Istio对需要注入的Pod和Service是有要求的,要成为服务网格中的一部分,它们需要满足下面的要求:

  • Service端口命名:Service的端口必须命名,匹配的格式为:<protocol>[-<suffix>]<protocol>可以是下面的几种:grpchttphttp2httpsmongoredistcptlsudp,如果没有进行命名或者命名的前缀识别不出来,那么流量都会被当成TCP流量对待,除非显示声明,比如Protocol: UDP声明端口是UDP端口。
  • Pod端口:Pod需要被代理端口都需要使用containerPort指定出来,否则都会绕过Istio Proxy。
  • 关联服务:不管Pod有没有暴露端口,它需要关联至少一个Service。如果Pod关联了不止一个Service,那么在相同端口不能使用不同的协议。
  • Deployment需要打上标签appversion:app用于识别上下文信息,version可以标识Deployment的版本信息。
  • Application UID:确保Pod运行的用户ID(UID)不是1337。
  • NET_ADMIN能力:如果集群实施了Pod安全策略,除非使用了Istio CNI Plugin,否则Pod需要具备NET_ADMIN能力。

被Istio使用的端口

下面的端口和协议是Istio会使用到的,需要确保服务不会与Istio冲突。

端口 协议 使用者 描述
8060 HTTP Citadel GRPC 服务
9090 HTTP Prometheus Prometheus
9091 HTTP Mixer 决策/遥测
9093 HTTP Citadel
15000 TCP Envoy Envoy管理端口(命令/诊断)
15001 TCP Envoy Envoy
15004 HTTP Mixer, Pilot 决策/遥测 - mTLS
15010 HTTP Pilot Pilot服务 - XDS pilot - 发现
15011 TCP Pilot Pilot服务 - mTLS - 代理 - 发现
15014 HTTP Citadel, Mixer, Pilot 控制面板监控
15030 TCP Prometheus Prometheus
15090 HTTP Mixer 代理
42422 TCP Mixer 遥测 - Prometheus

参考

Pods and Services