一、在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/