- MutatingWebhookConfiguration with namespaceSelector
Khi cái istio thì anh em sẽ biết là để auto inject sidecard Istio thì chúng ta cần add label cho namespace
Mặc định sẽ là:kubectl label namespace default istio-injection=enabled
Nếu anh em sài revision cho istio và muốn inject istio theo revisio thì:kubectl label namespace sample istio-injection- istio.io/rev=1-9-9
đôi khi là overwritekubectl label namespace sample istio-injection- istio.io/rev=1-9-9 --overwrite
Nếu bạn đang canary và tại 1 thời điểm có version trên istio của bạn
root@work-space-u20:~# ./istio-1.9.9/bin/istioctl version
client version: 1.9.9
istiod version: 1.9.9
pilot version: 1.9.8
data plane version: 1.9.9 (2 proxies), 1.9.8 (5 proxies)

vậy workload sẽ inject istio version nào


istio-injection=enabled
Hiện tại thì ở version 1.9.8 thì MutatingWebhookConfiguration là:
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingWebhookConfiguration
metadata:
labels:
app: sidecar-injector
app.kubernetes.io/instance: istiod-primary-1.9.8
install.operator.istio.io/owning-resource: unknown
istio.io/rev: default
operator.istio.io/component: Pilot
release: istio
name: istio-sidecar-injector
webhooks:
- admissionReviewVersions:
- v1beta1
- v1
clientConfig:
caBundle: ''
service:
name: istiod
namespace: istio-system
path: /inject
port: 443
failurePolicy: Fail
name: sidecar-injector.istio.io
namespaceSelector:
matchLabels:
istio-injection: enabled
objectSelector:
matchExpressions:
- key: sidecar.istio.io/inject
operator: NotIn
values:
- 'false'
rules:
- apiGroups:
- ''
apiVersions:
- v1
operations:
- CREATE
resources:
- pods
sideEffects: None

Nếu namepace có label là istio-injection: enabled
ở version 1.9.9 thì MutatingWebhookConfiguration là:
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingWebhookConfiguration
metadata:
labels:
app: sidecar-injector
app.kubernetes.io/instance: istio-canary-1.9.9
install.operator.istio.io/owning-resource: unknown
istio.io/rev: 1-9-9
operator.istio.io/component: Pilot
release: istio
name: istio-sidecar-injector-1-9-9
webhooks:
- admissionReviewVersions:
- v1beta1
- v1
clientConfig:
caBundle: ''
service:
name: istiod-1-9-9
namespace: istio-system
path: /inject
port: 443
failurePolicy: Fail
name: sidecar-injector.istio.io
namespaceSelector:
matchExpressions:
- key: istio-injection
operator: DoesNotExist
- key: istio.io/rev
operator: In
values:
- 1-9-9
objectSelector:
matchExpressions:
- key: sidecar.istio.io/inject
operator: NotIn
values:
- 'false'
rules:
- apiGroups:
- ''
apiVersions:
- v1
operations:
- CREATE
resources:
- pods
sideEffects: None

Với config trên thì sẽ cho phép auto inject istio-proxy 1.9.9 nếu
không tồn tại key: istio-injection trong label namespace và trong namespace có label với key: istio.io/rev cộng với values: 1-9-9
https://serenafeng.github.io/2019/04/10/istio-sidecar-injector-overview/
từ links trên thì ta có 1 ví dụ nữa là:
......
webhooks:
- clientConfig:
service:
name: istio-sidecar-injector
namespace: istio-system
path: /inject
......
namespaceSelector:
matchExpressions:
- key: name
operator: NotIn
values:
- istio-system
- key: istio-injection
operator: NotIn
values:
- disabled
......
Trường hợp allow inject istio-proxy
– name of namespace khác isito-system và ko có label key:value là istio-injection: disabled
-> workload trong namespace là istio-system thì không được inject istio-system
-> workload trong namespace: default, sample,…(Not istio-system) và không cần namespace có label gì cả thì workload được inject istio-system