前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Istio Helm Chart 详解 - 全局变量

Istio Helm Chart 详解 - 全局变量

作者头像
崔秀龙
发布2019-07-23 15:11:49
1.6K0
发布2019-07-23 15:11:49
举报
文章被收录于专栏:伪架构师

前言

我们在使用现有 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-init、enable-core-dump、istio-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 的镜像名。

代码语言:javascript
复制
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 线程/核的数量进行分配。

影响范围

代码语言:javascript
复制
ConfigMap:istio

proxy.accessLogFile

缺省值为 /dev/stdout

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

影响范围

代码语言:javascript
复制
ConfigMap:istio

proxy.privileged

缺省值为 false

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

影响范围

代码语言:javascript
复制
ConfigMap istio-sidecar-injector

proxy.enableCoreDump

缺省值为 false

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

影响范围

代码语言:javascript
复制
ConfigMap istio-sidecar-injector

proxy.includeIPRanges

缺省值为 "*"

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

影响范围

代码语言:javascript
复制
ConfigMap istio-sidecar-injector

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

proxy.excludeIPRanges

缺省值为 ""

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

影响范围

代码语言:javascript
复制
ConfigMap istio-sidecar-injector

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

proxy.includeInboundPorts

缺省值为 "*"

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

影响范围

代码语言:javascript
复制
ConfigMap istio-sidecar-injector

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

proxy.excludeInboundPorts

缺省值为 ""

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

影响范围

代码语言:javascript
复制
ConfigMap istio-sidecar-injector

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

proxy.autoInject

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

影响范围

代码语言:javascript
复制
ConfigMap istio-sidecar-injector

proxy.envoyStatsd

缺省值为:

代码语言:javascript
复制
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-init、enable-core-dump、istio-proxy 三个容器的镜像

proxy_init.image

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

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

影响范围

代码语言:javascript
复制
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-init,istio-proxy,enable-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 策略检查。

影响范围

代码语言:javascript
复制
ConfigMap istio

enableTracing

缺省值 true

设置请求跟踪。

代码语言:javascript
复制
ConfigMap istio

影响范围

代码语言:javascript
复制
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 分配镜像拉取过程所需的凭证。

影响范围

代码语言:javascript
复制
ServiceAccount: certmanager

arch

缺省值:

代码语言:javascript
复制
amd64: 2
s390x: 2
ppc64le: 2

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

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

oneNamespace

缺省值 false

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

影响范围

代码语言:javascript
复制
Deployment:istio-pilot

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

configValidation

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

影响范围

代码语言:javascript
复制
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

缺省值:

代码语言:javascript
复制
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

缺省值:

代码语言:javascript
复制
hub: quay.io/coreos
tag: v1.7.6_coreos.0

用于创建 CRD 的容器镜像。

影响范围

代码语言:javascript
复制
Job:istio-grafana-post-install

priorityClassName

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

影响范围

代码语言:javascript
复制
Deployment:certmanager

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。

影响范围

代码语言:javascript
复制
随这一开关确定是否创建所有 CRD

小结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • hub 和 tag
    • 影响范围
    • k8sIngressSelector
      • 影响范围
        • charts/pilot/templates/gateway.yaml
        • templates/configmap.yaml
    • k8sIngressHttps
      • 影响范围
        • charts/pilot/templates/gateway.yaml
    • proxy.image
      • 影响范围
        • istio/templates/sidecar-injector-configmap.yaml
    • proxy.resources
      • 影响范围
      • proxy.concurrency
        • 影响范围
        • proxy.accessLogFile
          • 影响范围
          • proxy.privileged
            • 影响范围
            • proxy.enableCoreDump
              • 影响范围
              • proxy.includeIPRanges
                • 影响范围
                • proxy.excludeIPRanges
                  • 影响范围
                  • proxy.includeInboundPorts
                    • 影响范围
                    • proxy.excludeInboundPorts
                      • 影响范围
                      • proxy.autoInject
                        • 影响范围
                        • proxy.envoyStatsd
                          • 影响范围
                          • proxy_init.image
                            • 影响范围
                            • imagePullPolicy
                            • 影响范围
                            • controlPlaneSecurityEnabled
                              • 影响范围
                              • disablePolicyChecks
                                • 影响范围
                                • enableTracing
                                  • 影响范围
                                  • mtls.enabled
                                    • 影响范围
                                    • imagePullSecrets
                                      • 影响范围
                                      • arch
                                      • oneNamespace
                                        • 影响范围
                                        • configValidation
                                          • 影响范围
                                          • meshExpansion
                                            • 影响范围
                                            • meshExpansionILB
                                              • 影响范围
                                              • defaultResources
                                                • 影响范围
                                                • hyperkube
                                                  • 影响范围
                                                  • priorityClassName
                                                    • 影响范围
                                                    • crds
                                                      • 影响范围
                                                      • 小结
                                                      相关产品与服务
                                                      Grafana 服务
                                                      Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
                                                      领券
                                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档