协议选择

Istio 默认支持代理所有 TCP 流量。包括 HTTP、HTTPS、gRPC 以及原始 TCP 协议。但为了提供额外的能力,比如路由和丰富的指标,必须确定协议。协议可以被自动检测或者手动声明。

使用非基于 TCP 的协议时,如 UDP,不会被 Istio 代理拦截,可以继续正常工作。但是不能在仅代理的组件中使用,如 Ingress 或 Egress Gateway。

自动协议选择

Istio 可以自动检测出 HTTP 和 HTTP/2 流量。如果未自动检测出协议,流量将会视为普通 TCP 流量。

手动协议选择

协议可以在 Service 定义中手动指定。

可以通过以下两种方式配置:

  • 通过端口名称配置:name: <protocol>[-<suffix>]
  • 在版本 1.18+ 的Kubernetes,通过 appProtocol 字段配置:appProtocol: <protocol>

支持以下协议:

  • HTTP
  • HTTP2
  • HTTPS
  • TCP
  • TLS
  • gRPC
  • gRPC-Web
  • Mongo
  • MySQL*
  • Redis*
  • UDP (UDP 不会被代理,但可以将端口指定为 UDP)

* 在默认情况下,这些协议是禁用的,目的是避免无意启用 Experimental Feature。 如需启用它们,需配置相应的 Pilot 环境变量

例如,Service 通过 appProtocol 、名称分别定义一个 mysql 端口和一个 http 端口:

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - port: 3306
    name: database
    appProtocol: mysql
  - port: 80
    name: http-web
这些信息有用吗?
Do you have any suggestions for improvement?

Thanks for your feedback!