应用程序要求

    • Service 关联: 每个 Pod 必须至少属于一个 Kubernetes Service,不管这个 Pod 是否对外暴露端口。如果一个 Pod 同时属于多个 Kubernetes Service, 那么这些 Service 不能同时在一个端口号上使用不同的协议(比如:HTTP 和 TCP)。

    • 带有 app 和 version 标签(label)的 Deployment: 我们建议显式地给 Deployment 加上 appversion 标签。给使用 Kubernetes Deployment 部署的 Pod 部署配置中增加这些标签,可以给 Istio 收集的指标和遥测信息中增加上下文信息。

    • 应用 UID: 确保你的 Pod 不会以 ID(UID)为 的用户运行应用,因为 1337 是为 Sidecar 代理保留的。

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

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

    端口协议描述仅限本地主机
    443HTTPSWebhooks 服务端口No
    8080HTTP调试接口(已弃用,仅限容器端口)No
    15010GRPCXDS 和 CA 服务(纯文本,仅用于安全网络)No
    15012GRPCXDS 和 CA 服务(TLS 和 mTLS,推荐用于生产)No
    15014HTTP控制平面监控No
    15017HTTPSWebhook 容器端口,从 443 转发No

    所需的 Pod 功能

    如果集群中的 Pod 安全策略被,并且除非您使用 Istio CNI 插件,否则您的 Pod 必须具有允许的 NET_ADMIN 功能。Envoy 代理的初始化容器需要此功能。

    要检查您的 Pod 是否支持 NET_ADMIN 功能,您需要检查其 service account(服务账户) 是否可以使用允许 NET_ADMIN 功能的 Pod 安全策略。如果尚未在 Pod 的部署中指定服务帐户,则 Pod 将在其部署的命名空间中使用 服务帐户运行。

    要实现列出服务帐户的功能,在以下命令中,用您的值替换 <your namespace> and <your service account>

    例如,要检查 默认 命名空间中的 默认 服务帐户,请运行以下命令:

    1. $ for psp in $(kubectl get psp -o jsonpath="{range .items[*]}{@.metadata.name}{'\n'}{end}"); do if [ $(kubectl auth can-i use psp/$psp --as=system:serviceaccount:default:default) = yes ]; then kubectl get psp/$psp --no-headers -o=custom-columns=NAME:.metadata.name,CAPS:.spec.allowedCapabilities; fi; done