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.yamlvalidatingwehookconfiguration.yaml.tpl 生成的,后面将会进行讲解。

configmap.yaml 以及 validatingwehookconfiguration.yaml.tpl

configmap.yaml 模板中并没有实质内容,主要内容存在于 validatingwehookconfiguration.yaml.tpl 之中。

这个模板中定义了一个 ValidatingWebhookConfiguration 类型的资源。这种资源用于在不改变资源的情况下,对其进行校验并发出接受或拒绝的决策。

引用全局变量

  • ChartRelease:用于生成标签和命名空间。
  • 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 会持续的增强,并提供更多这方面的文档。

相关

comments powered by Disqus