原生应用要求

许多 Kubernetes 原生应用可以在启用 Istio 的集群中无需任何更改即可部署。然而,Istio 的 sidecar 模型存在一些影响,在部署启用 Istio 的原生应用时可能需要特别考虑。本文档描述了这些原生应用的注意事项以及启用 Istio 的具体要求。

Pod 要求

要成为网格的一部分,Kubernetes pod 必须满足以下要求:

  • 原生应用 UID:确保您的 pod 不以用户 ID(UID)值为 1337 的用户身份运行原生应用,因为 1337 是为 sidecar 代理保留的。

  • Pod 标签:建议通过使用 pod 标签显式声明带有原生应用标识符和版本的 pod。这些标签为 Istio 收集的指标和遥测数据添加上下文信息。每个值从多个标签中读取,优先级从高到低依次为:

    • 原生应用名称:service.istio.io/canonical-nameapp.kubernetes.io/nameapp
    • 原生应用版本:service.istio.io/canonical-revisionapp.kubernetes.io/versionversion
    WARNING

    Kiali 依赖这些标签的正确性来实现多个功能(尤其是 原生应用名称 标签)。

    在 Istio 中,可以使用另一组标签,如 app.kubernetes.io/nameapp.kubernetes.io/version,但必须将 Kiali 配置为使用您所采用的标签。默认情况下,Kiali 使用 Istio 推荐的 appversion 标签。

  • 命名服务端口:服务端口可以选择性地命名以明确指定协议。详情请参见 Protocol Selection。如果一个 pod 属于多个 Kubernetes 服务,这些服务不能对不同协议(例如 HTTP 和 TCP)使用相同的端口号。

Istio 使用的端口

以下端口和协议由 Istio sidecar 代理(Envoy)使用。

为了避免与 sidecar 端口冲突,原生应用不应使用 Envoy 使用的任何端口。

端口协议描述仅限 Pod 内部使用
15000TCPEnvoy 管理端口(命令/诊断)
15001TCPEnvoy 出站端口
15002TCP故障检测监听端口
15004HTTP调试端口
15006TCPEnvoy 入站端口
15008HTTP2HBONE mTLS 隧道端口
15020HTTP来自 Istio agent、Envoy 和原生应用的合并 Prometheus 遥测端口
15021HTTP健康检查端口
15053DNSDNS 端口(如果启用捕获)
15090HTTPEnvoy Prometheus 遥测端口

参考