Bootstrap

Kubersphere平台中开启 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

具体的注入方式可继续参考下面的内容。

自动注入

为名称空间打上下列标签,即可开启自动注入:

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'
;