Istio之Sidecar注入

【Istio之Sidecar注入】作者:iyacontrol
出处:
为了利用Istio的所有功能 , 网格中的Pod必须运行Istio Sidecar代理 。 下面介绍了两种将Istio Sidecar注入到容器中的方法:手动使用 istioctl 命令或通过在容器的命名空间中启用自动Istio Sidecar注入 。

  • 手动注入直接修改配置(如部署) , 并将代理配置注入其中 。
  • 在Pod的命名空间中启用后 , 自动注入会使用准入控制器在Pod创建时注入代理配置 。
手动注入要手动注入部署 , 请使用 istioctl kube-inject :
istioctl kube-inject -f samples/sleep/sleep.yaml | kubectl apply -f -默认情况下 , 这将使用集群内配置 。 或者 , 可以使用配置的本地副本来完成注入 。
kubectl -n istio-system get configmap istio-sidecar-injector -o=jsonpath='{.data.config}' > inject-config.yamlkubectl -n istio-system get configmap istio-sidecar-injector -o=jsonpath='{.data.values}' > inject-values.yamlkubectl -n istio-system get configmap istio -o=jsonpath='{.data.mesh}' > mesh-config.yaml在输入文件上运行 kube-inject 并进行部署 。
istioctl kube-inject \--injectConfigFile inject-config.yaml \--meshConfigFile mesh-config.yaml \--valuesFile inject-values.yaml \--filename samples/sleep/sleep.yaml \| kubectl apply -f -自动注入使用Istio提供的 mutating webhook admission controller, 可以将Sidecar自动添加到适用的Kubernetes Pod中 。
Istio之Sidecar注入文章插图
当您在名称空间上设置 istio-injection = enabled 标签并且启用了注入Webhook时 , 在该名称空间中创建的所有新容器都将自动添加一个sidecar 。
请注意 , 与手动注入不同 , 自动注入发生在容器级 。 您不会看到部署本身的任何变化 。 相反 , 您需要检查各个Pod(通过kubectl describe)以查看注入的代理 。
istio-sidecar-injector-controller根据在 istio-sidecar-injector ConfigMap中定义的模板来进行注入 。 我们查看一下具体内容:
$ kubectl describe configmap istio-sidecar-injector -n istio-systemName:istio-sidecar-injectorNamespace:istio-systemLabels:install.operator.istio.io/owning-resource=installed-stateinstall.operator.istio.io/owning-resource-namespace=istio-systemistio.io/rev=defaultoperator.istio.io/component=Pilotoperator.istio.io/managed=Reconcileoperator.istio.io/version=1.7.3release=istioAnnotations:kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","data":{"config":"policy: enabled\nalwaysInjectSelector:\n[]\nneverInjectSelector:\n[]\ninjectedAnnotations:\n\ntem...Data=http://kandian.youth.cn/index/===config:----policy: enabledalwaysInjectSelector:[]neverInjectSelector:[]injectedAnnotations:template: |rewriteAppHTTPProbe: {{ valueOrDefault .Values.sidecarInjectorWebhook.rewriteAppHTTPProbe false }}initContainers:{{ if ne (annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode) `NONE` }}{{ if .Values.istio_cni.enabled -}}- name: istio-validation{{ else -}}- name: istio-init{{ end -}}{{- if contains"/" .Values.global.proxy_init.image }}image: "{{ .Values.global.proxy_init.image }}"{{- else }}image: "{{ .Values.global.hub }}/{{ .Values.global.proxy_init.image }}:{{ .Values.global.tag }}"{{- end }}args:- istio-iptables- "-p"- 15001- "-z"- "15006"- "-u"- 1337- "-m"- "{{ annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode }}"- "-i"- "{{ annotation .ObjectMeta `traffic.sidecar.istio.io/includeOutboundIPRanges` .Values.global.proxy.includeIPRanges }}"- "-x"- "{{ annotation .ObjectMeta `traffic.sidecar.istio.io/excludeOutboundIPRanges` .Values.global.proxy.excludeIPRanges }}"- "-b"- "{{ annotation .ObjectMeta `traffic.sidecar.istio.io/includeInboundPorts` `*` }}"- "-d"{{- if excludeInboundPort (annotation .ObjectMeta `status.sidecar.istio.io/port` .Values.global.proxy.statusPort) (annotation .ObjectMeta `traffic.sidecar.istio.io/excludeInboundPorts` .Values.global.proxy.excludeInboundPorts) }}- "15090,15021,{{ excludeInboundPort (annotation .ObjectMeta `status.sidecar.istio.io/port` .Values.global.proxy.statusPort) (annotation .ObjectMeta `traffic.sidecar.istio.io/excludeInboundPorts` .Values.global.proxy.excludeInboundPorts) }}"{{- else }}- "15090,15021"{{- end }}{{ if or (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/includeOutboundPorts`) (ne (valueOrDefault .Values.global.proxy.includeOutboundPorts "") "") -}}- "-q"- "{{ annotation .ObjectMeta `traffic.sidecar.istio.io/includeOutboundPorts` .Values.global.proxy.includeOutboundPorts }}"{{ end -}}{{ if or (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/excludeOutboundPorts`) (ne (valueOrDefault .Values.global.proxy.excludeOutboundPorts "") "") -}}- "-o"- "{{ annotation .ObjectMeta `traffic.sidecar.istio.io/excludeOutboundPorts` .Values.global.proxy.excludeOutboundPorts }}"{{ end -}}{{ if (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/kubevirtInterfaces`) -}}- "-k"- "{{ index .ObjectMeta.Annotations `traffic.sidecar.istio.io/kubevirtInterfaces` }}"{{ end -}}{{ if .Values.istio_cni.enabled -}}- "--run-validation"- "--skip-rule-apply"{{ end -}}imagePullPolicy: "{{ valueOrDefault .Values.global.imagePullPolicy `Always` }}"{{- if .ProxyConfig.ProxyMetadata }}env:{{- range $key, $value := .ProxyConfig.ProxyMetadata }}- name: {{ $key }}value: "{{ $value }}"{{- end }}{{- end }}{{- if .Values.global.proxy_init.resources }}resources:{{ toYaml .Values.global.proxy_init.resources | indent 4 }}{{- else }}resources: {}{{- end }}securityContext:allowPrivilegeEscalation: {{ .Values.global.proxy.privileged }}privileged: {{ .Values.global.proxy.privileged }}capabilities:{{- if not .Values.istio_cni.enabled }}add:- NET_ADMIN- NET_RAW{{- end }}drop:- ALL{{- if not .Values.istio_cni.enabled }}readOnlyRootFilesystem: falserunAsGroup: 0runAsNonRoot: falserunAsUser: 0{{- else }}readOnlyRootFilesystem: truerunAsGroup: 1337runAsUser: 1337runAsNonRoot: true{{- end }}restartPolicy: Always{{ end -}}{{- if eq .Values.global.proxy.enableCoreDump true }}- name: enable-core-dumpargs:- -c- sysctl -w kernel.core_pattern=/var/lib/istio/data/core.proxy--tt-darkmode-bgcolor: #131313;">通过配置文件 , 包含以下内容: