升级问题

EnvoyFilter 迁移

EnvoyFilter 是一个 alpha API,它与 Istio xDS 配置生成的实现细节紧密耦合。在 Istio 的控制或数据平面升级过程中,必须仔细管理生产环境中使用 EnvoyFilter alpha API 的情况。在许多情况下,EnvoyFilter 可以替换为一流的 Istio API,该 API 具有明显更低的升级风险。

使用遥测 API 进行指标自定义

使用 IstioOperator 自定义 Prometheus 指标生成已替换为 遥测 API,因为 IstioOperator 依赖于模板 EnvoyFilter 来更改指标过滤器配置。请注意,这两种方法不兼容,遥测 API 不适用于 EnvoyFilterIstioOperator 指标自定义配置。

例如,以下 IstioOperator 配置添加了一个 destination_port 标签

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    telemetry:
      v2:
        prometheus:
          configOverride:
            inboundSidecar:
              metrics:
                - name: requests_total
                  dimensions:
                    destination_port: string(destination.port)

以下 Telemetry 配置替换了上面的配置

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: namespace-metrics
spec:
  metrics:
  - providers:
    - name: prometheus
    overrides:
    - match:
        metric: REQUEST_COUNT
      mode: SERVER
      tagOverrides:
        destination_port:
          value: "string(destination.port)"

使用 WasmPlugin API 进行 Wasm 数据平面扩展

使用 EnvoyFilter 注入 Wasm 过滤器已替换为 WasmPlugin API。WasmPlugin API 允许从工件注册表、URL 或本地文件动态加载插件。“Null”插件运行时不再是部署 Wasm 代码的推荐选项。

使用网关拓扑设置可信跃点的数量

使用 EnvoyFilter 配置 HTTP 连接管理器中可信跃点的数量已替换为 gatewayTopology 字段,该字段位于 ProxyConfig 中。例如,以下 EnvoyFilter 配置应使用 pod 或网格默认值的注释。而不是

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: ingressgateway-redirect-config
spec:
  configPatches:
  - applyTo: NETWORK_FILTER
    match:
      context: GATEWAY
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager
    patch:
      operation: MERGE
      value:
        typed_config:
          '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          xff_num_trusted_hops: 1
  workloadSelector:
    labels:
      istio: ingress-gateway

使用等效的入口网关 pod 代理配置注释

metadata:
  annotations:
    "proxy.istio.io/config": '{"gatewayTopology" : { "numTrustedProxies": 1 }}'

使用网关拓扑在入口网关上启用 PROXY 协议

在入口网关上使用EnvoyFilter启用PROXY 协议已被gatewayTopology字段替换,该字段位于ProxyConfig中。例如,以下EnvoyFilter配置应使用 pod 或网格默认值的注释。而不是

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: proxy-protocol
spec:
  configPatches:
  - applyTo: LISTENER_FILTER
    patch:
      operation: INSERT_FIRST
      value:
        name: proxy_protocol
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.listener.proxy_protocol.v3.ProxyProtocol"
  workloadSelector:
    labels:
      istio: ingress-gateway

使用等效的入口网关 pod 代理配置注释

metadata:
  annotations:
    "proxy.istio.io/config": '{"gatewayTopology" : { "proxyProtocol": {} }}'

使用代理注释自定义直方图存储桶大小

使用EnvoyFilter和实验性引导发现服务来配置直方图指标的桶大小已被代理注释sidecar.istio.io/statsHistogramBuckets替换。例如,以下EnvoyFilter配置应使用 pod 的注释。而不是

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: envoy-stats-1
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: BOOTSTRAP
    patch:
      operation: MERGE
      value:
        stats_config:
          histogram_bucket_settings:
            - match:
                prefix: istiocustom
              buckets: [1,5,50,500,5000,10000]

使用等效的 pod 注释

metadata:
  annotations:
    "sidecar.istio.io/statsHistogramBuckets": '{"istiocustom":[1,5,50,500,5000,10000]}'
这些信息对您有用吗?
您对改进有什么建议吗?

感谢您的反馈!