Skip to main content

Command Palette

Search for a command to run...

Istio Helm Chart 详解 - Pilot

Updated
2 min read

前言

Pilot 也是 Istio 的核心组件,负责以下任务:

  1. 监听注册中心,例如 Kubernetes 中的服务信息变化。
  2. 监听 Istio 的路由相关 CRD 资源。
  3. 两项内容结合,生成 Envoy 可以理解的配置信息发送给 Envoy。

values.yaml 中的全局变量

  enabled: true
  replicaCount: 1
  autoscaleMin: 1
  autoscaleMax: 5
  image: pilot
  sidecar: true
  traceSampling: 1.0
  # Resources for a small pilot install
  resources:
    requests:
      cpu: 500m
      memory: 2048Mi
  env:
    PILOT_PUSH_THROTTLE_COUNT: 100
    GODEBUG: gctrace=2
  cpu:
    targetAverageUtilization: 80

image 字段使用的镜像名为 pilot

老生常谈的 HPA 部分和其他组件区别不大,实例数量的上限为 5。

值得注意的是 Pilot 的资源设置,缺省 CPU 500m,内存 2G,比其它组件来说是比较大的。这里还特意注明,这是针对小负载情况的。

sidecar 参数看来可以启用或者关闭 Pilot 组件的 Sidecar 注入。

traceSamplingPILOT_PUSH_THROTTLE_COUNTGODEBUG,目测都是性能向的参数。可以在后面的 Chart 中进行求证。

RBAC 相关

授权部分,Pilot 的 ServiceAccount 为:istio-pilot-service-account,从 clusterrole.yaml 可以看到较多门类的权限:

名称权限说明
config.istio.io/**Mixer 使用此配置对象将数据送入 Adapter。
rbac.istio.io/*只读RBAC 相关配置。
networking.istio.io/**流量控制相关配置。
authentication.istio.io*认证策略相关配置。
apiextensions.k8s.io/customresourcedefinitions*Kubernetes CRD。
extensions/thirdpartyresources*Kubernetes TPR,1.8 以后已经弃用。
extensions/thirdpartyresources.extensions*TPR 的扩展资源。
extensions/ingresses*Kubernetes Ingress 资源。
configmaps读写
endpoints, pods, servicesget, list, watch

namespaces, nodes, secrets|get, list, watch||

gateway.yaml

这个文件中包含了三个 Gateway 对象,用于网格扩展功能

  • istio-autogenerated-k8s-ingress:在 80 端口提供 http 边缘监听服务。
  • meshexpansion-gateway:用于 MeshExpanshion,如果启用了 global.meshExpansion,则创建 Gateway,在边缘提供 15011 的 Pilot 访问,以及 8060 的 citadel 组件访问。
  • meshexpansion-ilb-gateway:如果启用了 global.meshExpansionILB,则创建该对象,在内部网关中公开 Pilot 和 Citadel 的端口。

istio-autogenerated-k8s-ingress 对象其实是个 Bug,它使用了 global.k8sIngressSelector 作为 Gateway 控制器,也就是说只有在 global.ingress.enabled 为 True 的情况下才有可用的 Gateway 提供服务,这部分应该使用条件判断确定是否包含。

meshexpansion.yaml

这个文件很明显也是用于网格扩展的。事实上这一文件和 gateway.yaml 是一体的,今后可能会做合并。

如果启用了 global.meshExpansion 或者 global.meshExpansionILB,会为 gateway.yaml 中生成的 Gateway 创建 VirtualService

  • meshexpansion-pilot:从边缘进入的 Pilot 请求,访问 pilot.istio-system 主机时,如果端口为 15011,则指向 istio-pilot.istio-system.svc.cluster.local
  • ilb-meshexpansion-pilot:从内部网管进入的请求,访问主机为 meshexpansionilb.istio-system,将 1501115010 以及 5353 端口分别转向到 istio-pilot 明文端口、istio-pilot mTLS 端口以及 DNS 服务的 53 端口。

deployment.yaml

主进程为 Pilot Discovery。注解部分要求不进行自动注入。

除了 Chart 和 Release 之外,Pilot 的 Deployment 模板还引用了几个其它的全局变量。

  • image:和其它核心组件类似,Pilot 中对 image 的值如果包含了 /,则会忽略 hub 的内容,可以方便的替换为内网镜像。
  • 模板 istio.configmap.checksum:来自 templates/_helpers.tpl,Istio chart 中的 /templates/configmap.yaml 文件的校验和。
  • global.priorityClassNamePod 优先级
  • global.imagePullPolicy:镜像拉取策略。
  • global.oneNamespace:如果启用了这一参数,则会在主进程参数中加入 -a {{ .Release.Namespace }}
  • sidecar:如果为 True,会进行如下操作:
    • 在 Pod 中注入 istio-proxy 容器,这一容器会根据 global.controlPlaneSecurityEnabled 设置,决定 controlPlaneAuthPolicy 的值为 MUTUAL_TLS 还是 NONE
    • 注入容器的资源设置来自于 global.proxy.resourcesglobal.defaultResources
  • sidecar 如果为 False,会进行如下操作:
    • 设置启动参数 --secureGrpcAddr15011
    • 开放容器端口 15011
  • env:如果设置了 key: value 类型的环境变量,此处会发送给 Pilot 进程。
  • traceSampling:跟踪取样率,会被设置到 PILOT_TRACE_SAMPLING 环境变量中。
  • nodeaffinity 模板:来自 templates/_affinity.tpl,用于设置节点亲和性。

service.yaml

这里并无特殊设置,开放如下几个端口:

  • 15010:gRPC 的 xDS 端口
  • 15011:mTLS 的 xDS 端口
  • 8080:传统 http 端口
  • 9093:监控端口

总结

对 Pilot 的资源设置较大,同时 1.0.0 之后屡次出现 Pilot 内存消耗巨大的 Issue,其中的跟踪采样、GC 调试以及 Sidecar 注入方面应该都还有挖掘的潜力。但是很可惜 Pilot 的环境变量并无文档,须待日后进一步完善。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts