一、在namespace設置自動注入:
給 default 命名空間設置標簽:istio-injection=enabled:
$ kubectl label namespace default istio-injection=enabled $ kubectl get namespace -L istio-injection NAME STATUS AGE ISTIO-INJECTION default Active 1h enabled istio-system Active 1h kube-public Active 1h kube-system Active 1h
這樣就會在 Pod 創建時觸發 Sidecar 的注入過程了。刪掉運行的 Pod,會產生一個新的 Pod,新 Pod 會被注入 Sidecar。原有的 Pod 只有一個容器,而被注入 Sidecar 的 Pod 會有兩個容器:
$ kubectl delete pod sleep-776b7bcdcd-7hpnk $ kubectl get pod NAME READY STATUS RESTARTS AGE sleep-776b7bcdcd-7hpnk 1/1 Terminating 0 1m sleep-776b7bcdcd-bhn9m 2/2 Running 0 7s
查看被注入的 Pod 的細節。不難發現多出了一個 istio-proxy 容器及其對應的存儲卷。注意用正確的 Pod 名稱來執行下面的命令:
$ kubectl describe pod sleep-776b7bcdcd-bhn9m
禁用 default 命名空間的自動注入功能,然后檢查新建 Pod 是不是就不帶有 Sidecar 容器了:
$ kubectl label namespace default istio-injection- $ kubectl delete pod sleep-776b7bcdcd-bhn9m $ kubectl get pod NAME READY STATUS RESTARTS AGE sleep-776b7bcdcd-bhn9m 2/2 Terminating 0 2m sleep-776b7bcdcd-gmvnr 1/1 Running 0 2s
二、在annotations中設置是否允許自動注入:
disabled - Sidecar 注入器缺省不會向 Pod 進行注入。在 Pod 模板中加入 sidecar.istio.io/inject 注解並賦值為 true 才能啟用注入。
enabled - Sidecar 注入器缺省會對 Pod 進行注入。在 Pod 模板中加入 sidecar.istio.io/inject 注解並賦值為 false 就會阻止對這一 Pod 的注入。
下面的例子用 sidecar.istio.io/inject 注解來禁用 Sidecar 注入:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: ignored spec: template: metadata: annotations: sidecar.istio.io/inject: "false" spec: containers: - name: ignored image: tutum/curl command: ["/bin/sleep","infinity"]
參考:
https://istio.io/zh/docs/setup/kubernetes/sidecar-injection/
https://istio.io/docs/setup/kubernetes/sidecar-injection/