升级问题

EnvoyFilter 迁移

EnvoyFilter 是一个与 Istio xDS 配置生成的实现细节紧密耦合的 Alpha API。 在升级 Istio 的控制面或数据面时,必须谨慎使用 EnvoyFilter Alpha API。 在许多情况下,您可以使用升级风险低的标准 Istio API 替换 EnvoyFilter

使用 Telemetry API 自定义指标 {#use-telemetry-api-for-metrics- customization}

因为 IstioOperator 依赖于模板 EnvoyFilter 来更改指标过滤器配置, 所以使用 IstioOperator 自定义 Prometheus 指标生成的方式已经替换为 Telemetry API。 请注意,这两种方式互不兼容,Telemetry API 无法与 EnvoyFilterIstioOperator 指标自定义配置一起使用。

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

  1. apiVersion: install.istio.io/v1alpha1
  2. kind: IstioOperator
  3. spec:
  4. values:
  5. telemetry:
  6. v2:
  7. prometheus:
  8. configOverride:
  9. inboundSidecar:
  10. metrics:
  11. - name: requests_total
  12. dimensions:
  13. destination_port: string(destination.port)

以下 Telemetry 配置替换上述配置:

  1. apiVersion: telemetry.istio.io/v1
  2. kind: Telemetry
  3. metadata:
  4. name: namespace-metrics
  5. spec:
  6. metrics:
  7. - providers:
  8. - name: prometheus
  9. overrides:
  10. - match:
  11. metric: REQUEST_COUNT
  12. mode: SERVER
  13. tagOverrides:
  14. destination_port:
  15. value: "string(destination.port)"

使用 WasmPlugin API 扩展 Wasm 数据面

使用 EnvoyFilter 注入 Wasm 过滤器的做法已替换为 WasmPlugin API。 这是因为 WasmPlugin API 允许从镜像仓库、URL 或本地文件动态加载插件。 对于部署 Wasm 代码而言,“Null” 插件运行时不再是推荐的选项。

使用网关拓扑设置可信跳数

使用 EnvoyFilter 在 HTTP 连接管理器中配置可信跳数的方式已替换为 ProxyConfig 中的 gatewayTopology 字段。例如,以下 EnvoyFilter 配置应默认在 Pod 或网关上使用注解来替换:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: EnvoyFilter
  3. metadata:
  4. name: ingressgateway-redirect-config
  5. spec:
  6. configPatches:
  7. - applyTo: NETWORK_FILTER
  8. match:
  9. context: GATEWAY
  10. listener:
  11. filterChain:
  12. filter:
  13. name: envoy.filters.network.http_connection_manager
  14. patch:
  15. operation: MERGE
  16. value:
  17. typed_config:
  18. '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
  19. xff_num_trusted_hops: 1
  20. workloadSelector:
  21. labels:
  22. istio: ingress-gateway

使用等效的入口网关 Pod 代理配置注解:

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

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

使用 EnvoyFilter 在入口网关上启用 PROXY 协议 已替换为 ProxyConfig 中的 gatewayTopology 字段。例如,以下 EnvoyFilter 配置应默认在 Pod 或网格上使用注解来替换:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: EnvoyFilter
  3. metadata:
  4. name: proxy-protocol
  5. spec:
  6. configPatches:
  7. - applyTo: LISTENER_FILTER
  8. patch:
  9. operation: INSERT_FIRST
  10. value:
  11. name: proxy_protocol
  12. typed_config:
  13. "@type": "type.googleapis.com/envoy.extensions.filters.listener.proxy_protocol.v3.ProxyProtocol"
  14. workloadSelector:
  15. labels:
  16. istio: ingress-gateway

使用等效的入口网关 Pod 代理配置注解:

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

使用代理注解自定义直方图桶大小

使用 EnvoyFilter 和实验性引导发现服务来配置直方图指标桶大小的方式已替换为代理注解 sidecar.istio.io/statsHistogramBuckets。例如,以下 EnvoyFilter 配置应在 Pod 上使用注解来替换:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: EnvoyFilter
  3. metadata:
  4. name: envoy-stats-1
  5. namespace: istio-system
  6. spec:
  7. workloadSelector:
  8. labels:
  9. istio: ingressgateway
  10. configPatches:
  11. - applyTo: BOOTSTRAP
  12. patch:
  13. operation: MERGE
  14. value:
  15. stats_config:
  16. histogram_bucket_settings:
  17. - match:
  18. prefix: istiocustom
  19. buckets: [1,5,50,500,5000,10000]

使用等效的 Pod 注解:

  1. metadata:
  2. annotations:
  3. "sidecar.istio.io/statsHistogramBuckets": '{"istiocustom":[1,5,50,500,5000,10000]}'