Skip to main content

Command Palette

Search for a command to run...

Istio Helm Chart 详解 - Ingress

Published
•2 min read•View as Markdown

这是《Istio Helm Chart 详解》系列的第三篇。开始逐个 Chart 进行阅读。

前言

全局变量之后,接下来就是 Ingress 一节了,这个 Chart 只是个兼容选项,为 Istio 提供了传统 Kubernetes Ingress 的功能。ingress.enabled 变量用于在 requirements.yaml 中控制该 Chart 是否启用。

Chart.yaml

元数据文件,无需赘述。

autoscale.yaml

该文件用于处理该模块的 HPA 对象。引用变量如下:

  • ingress.autoscaleMin:水平伸缩的 Pod 数量下限,另外该变量被赋值的情况下才会渲染 HPA 对象。
  • ingress.autoscaleMax:水平伸缩的 Pod 数量上限。
  • Release.Namespace:HPA 对象所在的命名空间,使用 Istio 同一值。Release 是 Helm 的保留字,用于标识该 Release 所在的命名空间。

代码中我们看到,targetAverageUtilization 设置为固定值 80。

serviceaccount.yaml

这个模板用于为 Pod 生成 Service Account——istio-ingress-service-account。

其中引用变量:

  • global.imagePullSecrets:全局变量定义的数组,提供给 Service Account,在拉取镜像时使用。
  • Chart 和 Release 都是 Helm 的内置对象。

clusterrole.yaml 和 clusterrolebinding.yaml

Kubernetes RBAC 系统使用,这是一个集群范围内生效的 ClusterRole,声明了 Ingress 中需要的两组权限,并最终和 Service Account 进行绑定:

  • 对于 extensions.thirdpartyresources 和 extensions.ingresses 对象的读写权限。
  • 对 configmaps、pods、endpoints 和 services 对象的读取权限。

其中引用变量:

  • istio.name:定义在 istio 的 _helpers.tpl 中,如果没有使用 nameOverride 进行覆盖的话,会使用 Chart 名称。
  • Chart 和 Release 都是 Helm 的内置对象。

deployment.yaml

这一模板用于生成 Deployment,主体部分和 Ingress Gateway 类似,使用的都是 istio/proxyv2 镜像,参数稍有区别:

  • istio-proxy:proxy sidecar
  • ingress:proxy ingress
  • gateways:proxy router

其中引用变量:

  • istio.name:定义在 istio 的 _helpers.tpl 中,如果没有使用 nameOverride 进行覆盖的话,会使用 Chart 名称。
  • 使用 Chart 和 Release 数据生成标签。这里可以看到,固定使用 istio: ingress 提供给 Gateway Selector 进行选择。
  • global.hub 和 global.tag:生成镜像地址。
  • replicaCount:控制 Pod 数量。
  • global.imagePullPolicy:拉取策略。
  • global.priorityClassName:PriorityClass
  • global.proxy.envoyStatsd.enabled:如果启用,则加入 --statsdUdpAddress 参数。
  • global.controlPlaneSecurityEnabled:根据这一设置确定 controlPlaneAuthPolicy 设置:
# 如果启用
- --controlPlaneAuthPolicy
- MUTUAL_TLS
- --discoveryAddress
- istio-pilot:15005
# 如果没启用
- --controlPlaneAuthPolicy
- NONE
- --discoveryAddress
- istio-pilot:8080
  • resources 和 globale.defaultResources:优先使用 Chart 自身的资源定义,如果没有则使用缺省定义。
  • nodeaffinity:包含节点亲和性定义模板。

另外这里还包含了对两个 secret 的可选加载:

  • istio.istio-ingress-service-account:用于 RBAC 的 Service Account 证书。
  • istio-ingress-certs:提供 https 服务时使用这一组证书。

service.yaml

这个模板用来为 Ingress 生成服务。

引用变量包括:

  • istio.name:定义在 istio 的 _helpers.tpl 中,如果没有使用 nameOverride 进行覆盖的话,会使用 Chart 名称。
  • 使用 Chart 和 Release 数据生成标签。
  • service.loadBalancerIP:如果指定了 IP,则使用指定 IP。
  • service.type:如果没有负载均衡支持,可以考虑采用 NodePort 方式。
  • service.annotations:可以设置一系列的键值对,通过遍历的形式为 Service 对象生成注解。
  • service.ports:可以定义其它的非标准端口,以数组形式供 Helm 进行遍历,例如:
- port: 80
  name: http
  nodePort: 32000
- port: 443
  name: https

常用链接

  1. Helm 内置对象:https://docs.helm.sh/chart_template_guide/#built-in-objects

More from this blog

AI Agent 的“莫兰迪时刻”

一个新范式真正走向大众,往往不是从所有人都正确理解它开始,而是从它开始被反复引用、简化、误读,甚至滥用开始。 今天的 AI Agent,可能正走到这样一个时刻。 这篇文章的念头,来自我最近收听《大内密谈》vol.1434《审美升级or消费主义?从莫兰迪在中国聊起》时的一些联想。节目从莫兰迪色在中国的走红,谈到作品价格、知识产权、商业流量与消费主义。[9] 我听着听着想到另一个熟悉的技术史问题:为

Oct 5, 20263 min read

FDE 是传统运维产品厂商的出路吗?

很多传统运维产品厂商,已经不缺产品了。 从 ITSM、CMDB、监控、自动化,到 IAM、数据中心管理和各类大屏,一个成熟厂商往往都能拿出一张很完整的产品地图。销售材料上看,客户运维部门的日常工作几乎都被覆盖了。 但项目一落地,味道就变了。 产品越多,集成越重;模块越全,边界越模糊;客户越大,定制越深。到了后期,项目成功本身也会变成麻烦:现场改出来的东西回不到主干,配置越来越像黑箱,谁都不敢轻易升

Jun 29, 20263 min read

绵里藏针才是 AIOps 的本质?

Agent 让运维编排变得柔性、可变、甚至自演进;但真正敢进入生产环境的 AIOps,仍然离不开坚实、受控、可审计、可回退的自动化底座。 从 Gartner 提出 AIOps 概念到现在,也大概有十年了。这么多年来,这个领域好像发生了很多变化,又好像没什么“本质”的变化。技术上,我们经历了传统机器学习、深度学习和神经网络、以及大模型和智能体这样“翻天覆地”的变化;业务上,我们面对的是更多品种、更大

May 31, 20263 min read

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

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

Mar 9, 20261 min read
【

【伪】架构师

346 posts