Kubersphere 平台中注入 Istio sidecar

开启 Istio 及自动注入

  1. 安装 Kubersphere 时,配置文件中的 service Mesh 需要设置为 enabled

  2. 编辑 master 节点的 /etc/kubernetes/manifests/kube-apiserver.yaml 文件,在其中 --enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook,增加 MutatingAdmissionWebhook 选项。

  3. 杀掉 api-server 容器,ks 将自动拉起该容器,通过 docker ps | grep kube-apiserver | grep -v pause 命令,确认 api-server 容器被正常拉起。

  4. 通过 ps -ef | grep api | grep MutatingAdmissionWebhook 命令,确认启动正常,并且 api-server 含有 MutatingAdmissionWebhook 选项。

  5. 修改 istio-system 空间下的 istio-sidecar-injector-1-11-2 的配置字典,修改其中的 policy 值为 enabled

image
  1. 执行下面的命令,修改注入策略。
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'
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容