Istio Helm Chart 详解 - 全局变量

这是《Istio Helm Chart 详解》系列的第二篇。

前言

我们在使用现有 Chart 的时候,通常都不会修改 Chart 的本体,仅通过对变量的控制来实现对部署过程的定制。Istio Helm Chart 提供了大量的变量来帮助用户进行定制。

第一篇中我们提到过,Istio Chart 分为父子两层,因此变量也具有全局和本地两级,全局变量使用保留字 global 来进行定义,子 Chart 可以通过 .Values.global 的方式引用全局变量,而主 Chart 中也可以用 chart.var 的方式为子 Chart 指定变量值,本篇会首先讲解一下 values.yaml 中涉及到的全局变量,也就是 global 一节;各个 Chart 涉及到的专属变量会留在各个 Chart 的章节中。

hub 和 tag

缺省值分别为 docker.io/istio1.0.2

这里看到版本的控制主要是在镜像层面的,Chart 自身的版本控制并不是很规矩,差评。

多数情况下,这一配置代表所有镜像的地址,具体名称一般由 {{ .Values.global.hub }}/[component]/:{{ .Values.global.tag }} 的形式拼接而成。proxy_init、Mixer、Grafana 和 Pilot 中,一旦其 image 变量中包含了路径符 /,则会弃用 global.hub,直接采用 image 的定义。

影响范围

文件 对象 备注
charts/certmanager/templates/deployment.yaml Deployment:certmanager
charts/galley/templates/deployment.yaml Deployment:istio-galley
charts/gateways/templates/deployment.yaml 所有 Gateway 的 Deployment Container:istio-proxy
charts/grafana/templates/create-custom-resources-job.yaml Job:istio-grafana-post-install
charts/grafana/templates/deployment.yaml Deployment:grafana
charts/ingress/templates/deployment.yaml Deployment:istio-ingress
charts/kiali/templates/deployment.yaml Deployment:kiali
charts/mixer/templates/deployment.yaml Deployment:istio-policy/istio-telemetry Container:istio-proxy/mixer
charts/mixer/templates/statsdtoprom.yaml Deployment:istio-statsd-prom-bridge
charts/pilot/templates/deployment.yaml Deployment:istio-pilot
charts/prometheus/templates/deployment.yaml Deployment:prometheus
charts/security/templates/cleanup-secrets.yaml Job:istio-cleanup-secrets
charts/security/templates/create-custom-resources-job.yaml Job:istio-security-post-install
charts/security/templates/deployment.yaml Deployment:istio-citadel
charts/servicegraph/templates/deployment.yaml Deployment:servicegraph
charts/sidecarInjectorWebhook/templates/deployment.yaml Deployment:istio-sidecar-injector
charts/tracing/templates/deployment.yaml Deployment:istio-tracing
templates/sidecar-injector-configmap.yaml ConfigMap:istio-sidecar-injector istio-initenable-core-dumpistio-proxy

k8sIngressSelector

缺省值为 ingress

这一变量比较 Buggy。原则上讲,他仅在 ingress.enabledtrue 的时候生效。

影响范围

charts/pilot/templates/gateway.yaml

这个文件中定义了一个 Gateway - istio-autogenerated-k8s-ingress,其中的 spec.selector 是这样设计的:istio: {{ .Values.global.k8sIngressSelector }},实际上该文件中并没有针对 ingress.enabled 开关做出是否生成网关的判断,该网关一定会创建,但是只有在 Ingress Chart 中才会创建符合该条件的 Deployment,因此在 Ingress Chart 没有创建的情况下,该网关的 Selector 就无法匹配成功,也就无法生效了。

templates/configmap.yaml

这里会引用 ingress.enabled 进行判断,如果判断成功,则在 istio ConfigMap 对象中写入 ingressService: istio-{{ .Values.global.k8sIngressSelector }}

k8sIngressHttps

缺省值为 false

影响范围

charts/pilot/templates/gateway.yaml

如果启用该字段,会给 Gateway 定义中加入 443 端口及其 TLS 配置。

这段配置中对 /etc/istio/ingress/certs/ 下面的证书文件有依赖,因此需要启用这一选项,首先要启用 ingress.enabled,从而能够成功创建 ingress Chart 的 Deployment;另外还需要创建一个命名为 ingress-certs 的 tls secret,给 istio-ingress Deployment 进行加载。这些条件如果没有满足,LDS 会拒绝服务,从而无法提供 Ingress 功能。

proxy.image

缺省值为 proxyv2

影响范围

istio/templates/sidecar-injector-configmap.yaml

其中的 ConfigMap istio-sidecar-injector 中的注入部分会使用该值作为 istio-proxy 的镜像名。

image: {{ "[[ if (isset .ObjectMeta.Annotations \"sidecar.istio.io/proxyImage\") -]]" }}
{{ "\"[[ index .ObjectMeta.Annotations \"sidecar.istio.io/proxyImage\" ]]\"" }}
{{ "[[ else -]]" }}
{{ .Values.global.hub }}/{{ .Values.global.proxy.image }}:{{ .Values.global.tag }}
{{ "[[ end -]]" }}

这段代码表明,首先会判断 Pod 的 sidecar.istio.io/proxyImage 注解,如果注解不存在,才会使用这一变量,拼接方式为:{{ .Values.global.hub }}/{{ .Values.global.proxy.image }}:{{ .Values.global.tag }}

proxy.resources

这里为 Sidecar 定义了资源分配的方案。根据官方的伸缩性和规模调整指南

开启访问日志(默认开启)时,为 Sidecar 每分配 1 个 vCPU 能够负担 1000 qps 的访问峰值,没有开启则 0.5 vCPU 即可负担同样峰值,节点上的 fluentd 由于需要捕获和上传日志,是主要的性能消耗者。

影响范围

文件 对象 备注
charts/mixer/templates/deployment.yaml Deployment:istio-policy/istio-telemetry Container:istio-proxy/mixer
charts/pilot/templates/deployment.yaml Deployment:istio-pilot
templates/sidecar-injector-configmap.yaml ConfigMap:istio-sidecar-injector 会注入到所有 Pod

proxy.concurrency

缺省值为 0

Proxy worker 线程数量,如果设置为 0,则根据 CPU 线程/核的数量进行分配。

影响范围

文件 对象
istio/templates/configmap.yaml ConfigMap:istio

proxy.accessLogFile

缺省值为 /dev/stdout

Sidecar 的访问日志位置,如果设置为空字符串,则关闭访问日志功能。

影响范围

文件 对象
templates/configmap.yaml ConfigMap:istio

proxy.privileged

缺省值为 false

istio-initistio-proxy 的特权模式开关。

影响范围

文件 对象
templates/sidecar-injector-configmap.yaml ConfigMap istio-sidecar-injector

proxy.enableCoreDump

缺省值为 false

如果打开,新注入的 Sidecar 会启动 CoreDump 功能,加入初始化容器 enable-core-dump

影响范围

文件 对象
templates/sidecar-injector-configmap.yaml ConfigMap istio-sidecar-injector

proxy.includeIPRanges

缺省值为 "*"

劫持白名单,仅劫持该 CIDR 范围内的 IP。

影响范围

文件 对象
templates/sidecar-injector-configmap.yaml ConfigMap istio-sidecar-injector

修改 istio-init-i 参数,等价的 Pod Annotation 为 traffic.sidecar.istio.io/includeOutboundIPRanges

proxy.excludeIPRanges

缺省值为 ""

CIDR 范围之外的所有 IP 都会被劫持。

影响范围

文件 对象
templates/sidecar-injector-configmap.yaml ConfigMap istio-sidecar-injector

修改 istio-init-x 参数,等价的 Pod Annotation 为 traffic.sidecar.istio.io/excludeOutboundIPRanges

proxy.includeInboundPorts

缺省值为 "*"

进入端口的劫持白名单,所有从范围内端口进入 Pod 的流量会被劫持。

影响范围

文件 对象
templates/sidecar-injector-configmap.yaml ConfigMap istio-sidecar-injector

修改 istio-init-b 参数,等价的 Pod Annotation 为 traffic.sidecar.istio.io/includeInboundPorts

proxy.excludeInboundPorts

缺省值为 ""

进入端口的劫持黑名单,所有从范围外端口进入 Pod 的流量会被劫持。

影响范围

文件 对象
templates/sidecar-injector-configmap.yaml ConfigMap istio-sidecar-injector

修改 istio-init-d 参数,等价的 Pod Annotation 为 traffic.sidecar.istio.io/excludeOutboundIPRanges

proxy.autoInject

缺省值为 enabled。用于指定 Sidecar 注入器的策略。

影响范围

文件 对象
templates/sidecar-injector-configmap.yaml ConfigMap istio-sidecar-injector

proxy.envoyStatsd

缺省值为:

enabled: true
host: istio-statsd-prom-bridge
port: 9125

设置 Envoy 的 statsd 目标,也就是 Envoy 的 "--statsdUdpAddress 参数。某些情况下(例如没有安装 Mixer)可以关闭。

影响范围

文件 对象 备注
charts/ingress/templates/deployment.yaml Deployment:istio-ingress
templates/configmap.yaml ConfigMap:istio
templates/sidecar-injector-configmap.yaml ConfigMap:istio-sidecar-injector istio-initenable-core-dumpistio-proxy 三个容器的镜像

proxy_init.image

缺省值为 proxy_init,指定初始化镜像。

前面提到过,如果这里使用一个带有路径符号 / 的镜像名称,会忽略前面的 global.hub/tag 的设置。

影响范围

文件 对象
templates/sidecar-injector-configmap.yaml ConfigMap istio-sidecar-injector

imagePullPolicy

缺省值为 IfNotPresent。镜像的拉取策略。

影响范围

文件 对象 说明
charts/certmanager/templates/deployment.yaml Deployment:certmanager
charts/galley/templates/deployment.yaml Deployment:istio-galley
charts/gateways/templates/deployment.yaml 所有 Gateway 的 Deployment Container:istio-proxy
charts/grafana/templates/deployment.yaml Deployment:grafana
charts/ingress/templates/deployment.yaml Deployment:istio-ingress
charts/mixer/templates/deployment.yaml Deployment:istio-policy/istio-telemetry Container:istio-proxy/mixer
charts/mixer/templates/statsdtoprom.yaml Deployment:istio-statsd-prom-bridge
charts/pilot/templates/deployment.yaml Deployment:istio-pilot
charts/prometheus/templates/deployment.yaml Deployment:prometheus
charts/security/templates/deployment.yaml Deployment:istio-citadel
charts/servicegraph/templates/deployment.yaml Deployment:servicegraph
charts/sidecarInjectorWebhook/templates/deployment.yaml Deployment:istio-sidecar-injector
charts/tracing/templates/deployment.yaml Deployment:istio-tracing
templates/sidecar-injector-configmap.yaml ConfigMap:istio-sidecar-injector Container:istio-initistio-proxyenable-core-dump 未受影响

controlPlaneSecurityEnabled

缺省值为 false。控制面是否启用 mTLS。

影响范围

文件 对象 说明
charts/ingress/templates/deployment.yaml Deployment:istio-ingress 控制 Ingress 参数 --controlPlaneAuthPolicy 的取值,MUTUAL_TLS 或者 NONE
charts/mixer/templates/config.yaml DestinationRule: istio-policy 和 DestinationRule: istio-telemetry 为端口 15004 启用 ISTIO_MUTUAL
charts/mixer/templates/deployment.yaml Deployment:istio-policy/istio-telemetry 控制 Sidecar istio-proxy 参数 --controlPlaneAuthPolicy 的值,可选 MUTUAL_TLS 或者 NONE
charts/pilot/templates/deployment.yaml Deployment:istio-pilot 控制 Sidecar istio-proxy 参数 --controlPlaneAuthPolicy 的值,可选 MUTUAL_TLS 或者 NONE
templates/configmap.yaml ConfigMap:istio 控制 Sidecar istio-proxy 参数 --controlPlaneAuthPolicy 的值,可选 MUTUAL_TLS 或者 NONE

disablePolicyChecks

缺省值 false

禁用 Mixer 策略检查。

影响范围

文件 对象
templates/configmap.yaml ConfigMap istio

enableTracing

缺省值 true

设置请求跟踪。

文件 对象
templates/configmap.yaml ConfigMap istio

影响范围

文件 对象
templates/configmap.yaml ConfigMap istio

mtls.enabled

缺省值 false。服务间 mTLS 的缺省设置,可以使用目标规则或者服务注解进行覆盖。这一开关会控制生成一系列的 Job、ConfigMap 以及 Kubernetes RBAC 的相关内容,详情将会在 Security Chart 中讲解。

影响范围

|文件|对象|说明| |—|—|—|—| |charts/security/templates/configmap.yaml|ConfigMap:istio-security-custom-resources| |charts/security/templates/create-custom-resources-job.yaml|ServiceAccount: istio-security-post-install-account ClusterRole: istio-security-post-install-istio-system ClusterRoleBinding: istio-security-post-install-role-binding-istio-system Job:istio-security-post-install|这几个对象都需要启动这一开关才会创建|

imagePullSecrets

缺省为空。

用于为 ServiceAccount 分配镜像拉取过程所需的凭证。

影响范围

文件 对象
charts/certmanager/templates/serviceaccount.yaml ServiceAccount: certmanager
charts/galley/templates/serviceaccount.yaml ServiceAccount: istio-galley-service-account
charts/gateways/templates/serviceaccount.yaml 所有 Gateways 自动生成的 ServiceAccount
charts/ingress/templates/serviceaccount.yaml ServiceAccount: istio-ingress-service-account
charts/kiali/templates/serviceaccount.yaml ServiceAccount: kiali-service-account
charts/mixer/templates/serviceaccount.yaml ServiceAccount: istio-mixer-service-account
charts/pilot/templates/serviceaccount.yaml ServiceAccount: istio-pilot-service-account
charts/prometheus/templates/serviceaccount.yaml ServiceAccount: prometheus
charts/security/templates/serviceaccount.yaml ServiceAccount: istio-citadel-service-account
charts/sidecarInjectorWebhook/templates/serviceaccount.yaml ServiceAccount: istio-sidecar-injector-service-account

arch

缺省值:

amd64: 2
s390x: 2
ppc64le: 2

用于 Kubernetes 的节点亲和性调度过程。

这里列出了几种支持的服务器架构,并给出了优先级。详情请参看本文系列第一篇。

oneNamespace

缺省值 false

如果设置为 true,会对控制面管理的应用命名空间进行限制。如果没有设置,则监控所有命名空间。

影响范围

文件 对象
charts/pilot/templates/deployment.yaml Deployment:istio-pilot

设置 Pilot discovery 的 -a 参数。这一参数取值为监控的命名空间名称,目前会选用 Istio 所在的命名空间。

configValidation

缺省值 ture。用于配置是否开启服务端的配置验证。该选项开启之后,会生成一个 ValidatingWebhookConfiguration 对象,并被包含到 Galley 的配置之中,从而启用校验功能。

影响范围

文件 说明
charts/galley/templates/validatingwehookconfiguration.yaml.tpl ValidatingWebhookConfiguration: istio-galley

meshExpansion

缺省值为 false。如果启用,Pilot 和 Citadel 会在 Ingress Gateway 上公开服务。

影响范围

文件 对象 说明
charts/pilot/templates/gateway.yaml Gateway:meshexpansion-gateway 用于公开服务的 Gateway
charts/pilot/templates/meshexpansion.yaml VirtualService:meshexpansion-pilot Pilot 的 VirtualService
charts/security/templates/meshexpansion.yaml VirtualService:meshexpansion-citadel Citadel 的 的 VirtualService

meshExpansionILB

缺省值为 false。Pilot 和 Citadel 的 mTLS 和明文端口会在内部网关进行公开。

影响范围

文件 对象 说明
charts/pilot/templates/gateway.yaml Gateway:meshexpansion-ilb-gateway 用于公开服务的 Gateway
charts/pilot/templates/meshexpansion.yaml VirtualService:ilb-meshexpansion-pilot Pilot 的 VirtualService
charts/security/templates/meshexpansion.yaml VirtualService:meshexpansion-ilb-citadel Citadel 的 的 VirtualService

defaultResources

缺省值:

requests:
  cpu: 10m

为 Istio 组件提供一个最小的资源定义,以便 HPA 工作方便,每个组件可以定义自己的资源定义进行覆盖。

影响范围

文件 对象 说明
charts/galley/templates/deployment.yaml Deployment:istio-galley
charts/gateways/templates/deployment.yaml 所有网关创建的 Deployment
charts/grafana/templates/deployment.yaml Deployment:grafana
charts/ingress/templates/deployment.yaml Deployment:istio-ingress
charts/kiali/templates/deployment.yaml Deployment:kiali
charts/mixer/templates/deployment.yaml Deployment:istio-policy/istio-telemetry Container:istio-proxy/mixer
charts/mixer/templates/statsdtoprom.yaml Deployment:istio-statsd-prom-bridge
charts/pilot/templates/deployment.yaml Deployment:istio-pilot Container:istio-proxy/discovery
charts/prometheus/templates/deployment.yaml Deployment:prometheus
charts/security/templates/deployment.yaml Deployment:istio-citadel
charts/servicegraph/templates/deployment.yaml Deployment:servicegraph
charts/sidecarInjectorWebhook/templates/deployment.yaml Deploymet: istio-sidecar-injector
charts/tracing/templates/deployment.yaml Deployment:istio-tracing

hyperkube

缺省值:

hub: quay.io/coreos
tag: v1.7.6_coreos.0

用于创建 CRD 的容器镜像。

影响范围

文件 对象
charts/grafana/templates/create-custom-resources-job.yaml Job:istio-grafana-post-install
charts/security/templates/cleanup-secrets.yaml Job:istio-cleanup-secrets
charts/security/templates/create-custom-resources-job.yaml Job:istio-security-post-install

priorityClassName

Kubernetes 1.11.0 以上有两个 PriorityClass,用这种方式创建 Istio 组件 Pod,可以防止因较低的优先级被杀掉。

影响范围

文件 对象
charts/certmanager/templates/deployment.yaml Deployment:certmanager
charts/galley/templates/deployment.yaml Deployment:istio-galley
charts/gateways/templates/deployment.yaml 所有网管创建的 Deployment
charts/grafana/templates/deployment.yaml Deployment:grafana
charts/ingress/templates/deployment.yaml Deployment:istio-ingress
charts/kiali/templates/deployment.yaml Deployment:kiali
charts/mixer/templates/deployment.yaml Deployment:istio-policy/istio-telemetry
charts/pilot/templates/deployment.yaml Deployment:istio-pilot
charts/prometheus/templates/deployment.yaml Deployment:prometheus
charts/security/templates/deployment.yaml Deployment:istio-citadel
charts/servicegraph/templates/deployment.yaml Deployment:servicegraph
charts/sidecarInjectorWebhook/templates/deployment.yaml Deployment:istio-sidecar-injector
charts/tracing/templates/deployment.yaml Deployment:istio-tracing

crds

缺省值 true

如果使用的是 Helm 2.10 以上的 helm install,或者是 helm template 方式的安装,应该设置为 true;如果 Helm 版本小于 2.9,必须设置为 false,并手工执行 kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml 来首先创建 CRD。

影响范围

文件 说明
templates/crds.yaml 随这一开关确定是否创建所有 CRD

小结

本节中很多涉及到下层 Chart 的内容并未深入,会在子 Chart 的相关章节中尝试进一步说明。

相关

comments powered by Disqus