-
安装 Kubersphere 时,配置文件中的 service Mesh 需要设置为 enabled。
-
编辑 master 节点的 /etc/kubernetes/manifests/kube-apiserver.yaml 文件,在其中 --enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook,增加
MutatingAdmissionWebhook 选项。 -
杀掉 api-server 容器,ks 将自动拉起该容器,通过 docker ps | grep kube-apiserver |
grep -v pause 命令,确认 api-server 容器被正常拉起。 -
通过 ps -ef | grep api | grep MutatingAdmissionWebhook 命令,确认启动正常,并且
api-server 含有 MutatingAdmissionWebhook 选项 -
修改 istio-system 空间下的 istio-sidecar-injector-1-11-2 的配置字典,修改其中的policy 值为 enabled。
-
执行下面的命令,修改注入策略
kubectl -n istio-system edit MutatingWebhookConfiguration istio-sidecar-injector-1-11-2
name: rev.namespace.sidecar-injector.istio.io
namespaceSelector:
matchExpressions:
- key: istio.io/rev
operator: In
values:
- 1-11-2
- key: istio-injection
operator: In
values:
- enabled
objectSelector:
matchExpressions:
- key: sidecar.istio.io/inject
operator: NotIn
values:
- "false"
上述配置段的含义是:
对 namespace 的注入策略,需要同时满足下面 3 个要求
- namespace 含有 istio.io/rev=1-11-2 的标签
- namespace 含有 istio-injection=enabled 的标签
- Deployment 中 sidecar.istio.io/inject 标签值不等于 false
name: rev.object.sidecar-injector.istio.io
namespaceSelector:
matchExpressions:
- key: istio.io/rev
operator: DoesNotExist
- key: istio-injection
operator: DoesNotExist
objectSelector:
matchExpressions:
- key: sidecar.istio.io/inject
operator: In
values:
- "true"
上述配置段的含义是:
对单个对象的注入策略,需要同时满足下面 3 个要求
- namespace 不含有 istio.io/rev 标签
- namespace 不含有 istio-injection 标签
- Deployment 中 sidecar.istio.io/inject 标签值等于 true
具体的注入方式可继续参考下面的内容。
自动注入
为名称空间打上下列标签,即可开启自动注入:
istio.io/rev=1-11-2
istio-injection=enabled
上述 2 个标签同时存在时才有效,缺一不可。
可通过下列命令打标签:
kubectl label namespace [$NameSpace] istio.io/rev=1-11-2kubectl label namespace [$NameSpace] istio-injection=enabled
可通过下列命令查看指定名称空间的标签:
kubectl label --list ns/[$NameSpace]
避免 Deployment 自动注入
如果名称空间开启了自动注入,但是有个别 Deployment 不希望自动注入 sidecar,可在 Deployment 中的添加下列标签,即可避免注入。
sidecar.istio.io/inject: 'false'
该标签在 Deployment 中的位置如下:
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
creationTimestamp: null
labels:
app: nginx
sidecar.istio.io/inject: 'false'
Deployment 工作负载
如果 Deployment 所在的 Namespace 未开启自动注入,但是希望在个别 Deployment 中注入 sidecar,可在 Deployment 中加入如下标签:
sidecar.istio.io/inject: 'true'
该标签在 Deployment 中的位置如下:
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
creationTimestamp: null
labels:
app: nginx
sidecar.istio.io/inject: 'true'