Istio Helm Chart 详解 - Galley
前言
Galley 是 Istio 的配置管理组件,根据官方文档的描述:
Galley 代表其他的 Istio 控制平面组件,用来验证用户编写的 Istio API 配置。随着时间的推移,Galley 将接管 Istio 获取配置、 处理和分配组件的顶级责任。它将负责将其他的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节中隔离开来。
values.yaml 中的相关变量
galley:
enabled: true
replicaCount: 1
image: galley
这里看到,Galley 的相关变量只有启用、副本数量以及镜像三个。
enabled
:负责在requirements.yaml
中标识是否启用 Galley 组件。replicaCount
:负责在deployment.yaml
中定义副本数量。image
:负责在deployment.yaml
中定义镜像。
RBAC 相关内容
这里可以看到 Galley 使用 Service Account istio-galley-service-account
的身份运行。全局变量中如果定义了 imagePullSecrets
,则会在 serviceaccount.yaml
中进行引用。
clusterrole.yaml
模板中定义了 Galley 所需使用的系统资源:
- 对
admissionregistration.k8s.io
组中的validatingwebhookconfigurations
类型的完全控制。 config.istio.io
: Mixer CRD 的所有资源的读取权限。- 对
istio-galley
Deployment 和 Endpoint 的读取权限。
clusterrolebinding.yaml
将上面的两个对象连接起来完成授权。
service.yaml
这里看到为 Galley 开放了两个端口:443 是一个 https 端口,用来提供验证服务;而 9093 是一个用来进行 Galley 自身服务监控的 http 端口。
该文件只引用了 Release
内置变量。
deployment.yaml
这里以 Galley 为主进程创建了一个 Deployment 对象。
在 annotation
一节中将 sidecar.istio.io/inject
设置为 false
来防止自动注入 Sidecar。
全局变量
- Chart
- Release
- global.priorityClassName
- global.hub
- global.tag
- global.imagePullPolicy
- 模板 nodeaffinity
- global.defaultResources
变量使用细节
- 部署在 Istio 所属命名空间中。
- 使用
_helpers.tpl
中定义的模板给 App 标签赋值。 - 使用 Chart 和 Release 变量生成 Deployment 标签。
- Chart 变量
replicaCount
确定副本数量。 - 如果定义了
global.priorityClassName
,则设置到 Pod 上,提高组件在集群内的优先级。 - 使用 global.hub + image + global.tag 的方式设置镜像名称。
- 如果 Chart 变量设置了
resource
,则使用独立的资源限制,否则使用缺省的global.defaultResources
。 - 使用缺省的节点亲和性定义。
加载卷
加载了一个名为 istio.istio-galley-service-account
的 Secret,注意这个资源的类型为 istio.io/key-and-cert
,说明是由 Citadel 生成的,其中包含了几个证书,供 --caCertFile
、--tlsCertFile
和 --tlsKeyFile
用来提供 https 服务。
另外加载了一个 ConfigMap,其中的配置文件供 --webhook-config-file
参数使用,作为 Webhook 的参数。这个 ConfigMap 是由模板 configmap.yaml
和 validatingwehookconfiguration.yaml.tpl
生成的,后面将会进行讲解。
configmap.yaml 以及 validatingwehookconfiguration.yaml.tpl
configmap.yaml
模板中并没有实质内容,主要内容存在于 validatingwehookconfiguration.yaml.tpl
之中。
这个模板中定义了一个 ValidatingWebhookConfiguration
类型的资源。这种资源用于在不改变资源的情况下,对其进行校验并发出接受或拒绝的决策。
引用全局变量
Chart
和Release
:用于生成标签和命名空间。global.configValidation
:如果这一变量为 True,才会生成后续内容。
Webhook
webhooks
一节定义了两个元素,分别用于 Pilot 和 Mixer 的校验。以 Mixer 部分为例。
clientConfig
一节,定义了这个 Webhook 会调用的校验服务,标准情况下会使用 Istio 所在的命名空间的 istio-galley
,URL 相对路径为 /admitmixer
,其中的 rules
内容,定义了针对 config.istio.io/v1alpha2
的一系列对象的创建和更新操作进行校验,如果校验失败,则拒绝创建(failurePolicy: Fail
)。
结论
Galley 目前的文档非常少,主要在参考和运维指南部分有一点介绍,但 Istio 的配置难度是很著名的,因此推测随着项目的推进和普及,Galley 会持续的增强,并提供更多这方面的文档。