开启 Istio 及自动注入
安装 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
具体的注入方式可继续参考下面的内容。
Namespace 名称空间
自动注入
为名称空间打上下列标签,即可开启自动注入:
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]
[root@ks-master ~]# kubectl label --list ns/ops-share # 此处以 ops-share ns 为例。
istio-injection=enabled
istio.io/rev=1-11-2
kubernetes.io/metadata.name=ops-share
kubesphere.io/namespace=ops-share
kubesphere.io/workspace=mq
避免 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'