原生应用要求
许多 Kubernetes 原生应用可以在启用 Istio 的集群中无需任何更改即可部署。然而,Istio 的 sidecar 模型存在一些影响,在部署启用 Istio 的原生应用时可能需要特别考虑。本文档描述了这些原生应用的注意事项以及启用 Istio 的具体要求。
Pod 要求
要成为网格的一部分,Kubernetes pod 必须满足以下要求:
-
原生应用 UID:确保您的 pod 不以用户 ID(UID)值为
1337的用户身份运行原生应用,因为1337是为 sidecar 代理保留的。 -
Pod 标签:建议通过使用 pod 标签显式声明带有原生应用标识符和版本的 pod。这些标签为 Istio 收集的指标和遥测数据添加上下文信息。每个值从多个标签中读取,优先级从高到低依次为:
- 原生应用名称:
service.istio.io/canonical-name、app.kubernetes.io/name或app。 - 原生应用版本:
service.istio.io/canonical-revision、app.kubernetes.io/version或version。
WARNINGKiali 依赖这些标签的正确性来实现多个功能(尤其是 原生应用名称 标签)。
在 Istio 中,可以使用另一组标签,如
app.kubernetes.io/name和app.kubernetes.io/version,但必须将 Kiali 配置为使用您所采用的标签。默认情况下,Kiali 使用 Istio 推荐的app和version标签。 - 原生应用名称:
-
命名服务端口:服务端口可以选择性地命名以明确指定协议。详情请参见 Protocol Selection。如果一个 pod 属于多个 Kubernetes 服务,这些服务不能对不同协议(例如 HTTP 和 TCP)使用相同的端口号。
Istio 使用的端口
以下端口和协议由 Istio sidecar 代理(Envoy)使用。
为了避免与 sidecar 端口冲突,原生应用不应使用 Envoy 使用的任何端口。
参考
- Application Requirements (Istio 文档)
- Labels and resource names (Kiali 文档)