Istio 对 Pod 和服务的要求
要成为服务网格的一部分,Kubernetes 集群中的 Pod 和服务必须满足以下几个要求:
需要给端口正确命名:服务端口必须进行命名。端口名称只允许是
<协议>[-<后缀>-]
模式,其中<协议>
部分可选择范围包括grpc
、http
、http2
、https
、mongo
、redis
、tcp
、tls
以及udp
,Istio 可以通过对这些协议的支持来提供路由能力。例如name: http2-foo
和name: http
都是有效的端口名,但name: http2foo
就是无效的。如果没有给端口进行命名,或者命名没有使用指定前缀,那么这一端口的流量就会被视为普通 TCP 流量(除非显式的用Protocol: UDP
声明该端口是 UDP 端口)。Pod 端口: Pod 必须包含每个容器将监听的明确端口列表。在每个端口的容器规范中使用
containerPort
。任何未列出的端口都将绕过 Istio Proxy。关联服务:Pod 不论是否公开端口,都必须关联到至少一个 Kubernetes 服务上,如果一个 Pod 属于多个服务,这些服务不能在同一端口上使用不同协议,例如 HTTP 和 TCP。
Deployment 应带有
app
以及version
标签:在使用 KubernetesDeployment
进行 Pod 部署的时候,建议显式的为Deployment
加上app
以及version
标签。每个 Deployment 都应该有一个有意义的app
标签和一个用于标识Deployment
版本的version
标签。app
标签在分布式追踪的过程中会被用来加入上下文信息。Istio 还会用app
和version
标签来给遥测指标数据加入上下文信息。Application UID:不要使用 ID(UID)值为 1337 的用户来运行应用。
NET_ADMIN
功能: 如果您的群集中实施了 Pod 安全策略,除非您使用 Istio CNI 插件,您的 pod 必须具有NET_ADMIN
功能。请参阅必需的 Pod 功能。