天天看點

istio-禁用/允許sidecar設定

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

繼續閱讀