tke集群命名空间自动注入服务网格sidecar

2021-04-20 14:19:53 浏览数 (1)

通常我们部署了istio,都会配置下集群的哪些命名空间下的服务需要被istio管理,其实就是哪些pod需要注入envoy这个sidecar,如果希望命名空间A的pod都注入sidecar,我们可以将命名空间配置成sidecar的自动注入,这样在A命名空间下的pod就默认都会注入sidecar了。TCM给命名空间注入sidecar的方式和原生还是要有点区别,今天这里讲解下如何在tke集群的命名空间自动注入TCM的sidecar容器。

原生的istio的给命名空间配置自动注入是直接给命名空间打label

代码语言:javascript复制
kubectl label namespace default istio-injection=enabled

如果需要取消sidecar的自动注入,去掉命名空间下的label即可

代码语言:javascript复制
kubectl label namespace default istio-injection-

但是在tcm上配置自动注入的方式有点不一样,由于tcm有自己的一些订制,所以给命名空间打的label是不一样的

1. 控制台配置sidecar自动注入

我们可以在TCM控制台进入服务网格实例,然后选择服务,点击sidecar自动注入,选择对应的命名空间即可。

2. 命令配置sidecar自动注入

采用命令配置sidecar的自动注入,需要根据你的istio版本来给命名空间打上label,现在tcm提供了1.6.9和1.8.1这2个版本的istio

如果你的istio版本是1.6.9,则需要给命名空间打上如下label完成自动注入

代码语言:javascript复制
kubectl label ns xxxx istio.io/rev=1-6-9

如果你的istio版本是1.8.1,则需要给命名空间打上如下label完成自动注入

代码语言:javascript复制
kubectl label ns xxxx istio.io/rev=1-8-1

但是这里会有一个问题,就是有时候给命名空间打上label了,但是还是发下无法注入,这里是因为我们一开始会潜意识的给命名空间注入istio-injection=enabled这个label,然后有打上了istio.io/rev=1-x-x这个label,这里有个问题就是这2个label同时存在的时候自动注入会不生效,需要删除掉istio-injection=enabled才行,这里大家需要注意下。

3. 自动注入sidecar的原理

为什么tcm需要给命名空间打的label和原生的isito不一样呢,这里的原因是什么呢?其实这里需要从istio中自动注入的原理来解释分析下,其实自动注入这里是调用了一个istio的webhook,当admissionregistration配置被应用。默认配置将 sidecar 注入到所有拥有istio.io/rev=1-x-x标签的 namespace 下的 pod 中。istio-sidecar-injector配置字典指定了注入 sidecar 的配置。如需更改指定哪些 namespace 被注入,你可以使用以下命令编辑MutatingWebhookConfiguration

代码语言:javascript复制
[root@VM-0-13-centos kube]# kubectl get mutatingwebhookconfiguration istio-sidecar-injector-1-8-1 | grep istio
istio-sidecar-injector-1-8-1   1          31d
[root@VM-0-13-centos kube]# kubectl get mutatingwebhookconfiguration istio-sidecar-injector-1-8-1 -o yaml
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
  creationTimestamp: "2021-03-19T05:48:20Z"
  generation: 4
  labels:
    app: sidecar-injector
    install.operator.istio.io/owning-resource: tcm
    istio.io/rev: 1-8-1
    operator.istio.io/component: Pilot
    release: istio
    manager: mesh-manager
    operation: Update
    time: "2021-03-19T05:48:20Z"
    manager: pilot-discovery
    operation: Update
    time: "2021-03-19T05:49:10Z"
  name: istio-sidecar-injector-1-8-1
  resourceVersion: "7458502343"
  selfLink: /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/istio-sidecar-injector-1-8-1
  uid: f4d6f61a-e0c8-4376-9000-bb5862c2675f
webhooks:
- admissionReviewVersions:
  - v1beta1
  - v1
  clientConfig:
    caBundle: LS0tLS1CRVNPVmhKT05EZnhmb2xNWExYUGd3RFFZSktvWklodmNOQVdBMVVURZeQpORFV3V2hjTk16QXhNakkxTVRZeU5EVXdXakFpTVE0d0RBWURWUVFLRXdWSmMzUnBiekVRTUE0R0ExVUVBeE1IClVtOXZkQ0JEUVRDQ0FpSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVBBRENDQWdvQ2dnSUJBTFlscTJrVjJYdE4KMXIwb0VaZkdrRzloYmdlaFhFSzI0MWNDSDhwTkFxZndBdkZBZWFMYVNZTkNZblRsd3lLTXRPSENqQW81NEQvcApmNytRU21TSFUra3JBOHNRczA4ZWFhR2JaWU5GNFZJeEl1UVlnS1ltM3R4NWx6N1JzcjBuU3FPRzBLTVUzYlhwClBQZDhSOWMxVXRFZWM0dHVmdFQwRXNSUWtDNnJETVd3RE1NbEFjMGhFTlRtZmtlN1U5c1kwcEdTYllGSTRGejMKa0ZNdFBnM1djUVVnOE5WTFQzdm93YWtpUGFnaHgzVVQvdTZFT0xrcStQekJMcWt2ZFdMdEJLZFlYelJQd3NhagpuK010ZTV2YStOUHRQd2xBMGw1c1VtWHluUldHOC9idUt5bDVObTdaZkpZQkI1VURkamE1U0lxZEcyYzEwQ3JaClU5NWpqTUVNaE4rdDNMZlVOOHBKQVU1THlPRk10a1JmanhWcktscEcxeWRtNUVIWmJmbUF2dG9DS05DQkxhdWkKL3RnUmJTSnRDUGlQZHB2amZyUTFnemo0SWdiQ2lkZ1FOalMrcVduai9MRTVBQ0dGK3cxcVdIbXM5bzV4SUV6Tgo5aXBaQ1g4ZTMrODBUSy9vUDlRSjhGc2Uwc0RwR2ljcHdYTW1iYTlhM21KSFpwSjg3NGlEbHN6bVM5bytsMlV1CnNUM0hMT0FGVmJSKzh6bkJOdkxPaTIwZkZhUm1MeFF0WTQ4eFdBdjJ3V0NtVDhFU1daV2R1MDQxODhDekNJWnoKR0l6SG9PcGN2VlVFT293RHBDWWsxOHk3LzUyb2swMkFHdWxPTkZ1WUlGUWRmaS95Z1lVbjdScndkNFhWTU94bwo3UmhKanNZWkpjaFpieWxNR2VFVlZ6TjJVT3dIV3B4TkFnTUJBQUdqUWpCQU1BNEdBMVVkRHdFQi93UUVBd0lDCjVEQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkRGdRV0JCUWV1QzZHL1djaUt4RXFnZktPMjkwcG85KzEKTWpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQUZwU1NpMHZlbzUzQ0lpVEFBcTJRY2JUdk1qN29FMFNvaXRscwpieFE3ZjRpbGdvQnVRUjJGQzBReEZMOVJjc3FsV0Z2bitnYnZWM2ZlOEZkNWtrdTJSZ3lTYk5wcllLTmpmZVRsCjdxSTJ4Y2ZWNUtWMXdvSnhERDQ1UVdTMVU3VjczajVhcmdvOHBLNFJUekxIMkxIREVXN2M1YzJJN2d6amlHMUMKenp0ZnJseTh3ZjdhTGZMZjNFOGM0YTBrVXZHMkxJOE5mOElPSkpiTDE1L0N4ZDk5Ynh6V0JQd01peVNyc2RuYQppSnQyc2E2ck56VUpJRWVVWEgxT0tvSm81dHVBTHBzbFRNT1Y5QXZvWnliSFFXY0hqRXVGUWdnSXcrRUw0VTIxCjVlQ3JzU2l5Kzc3YitFK2xzTEdCaW5VUlUyMUJRckVRcDdMeGtVSEtOWnk5dml4Tk0ydDVHb05uR1ZtUWFWcEgKcHgxNlhrUHg4MTRoQlRPb0VHVThvNERKc0xZTHpxcGUxUWFZSi9jQ2ZDckgrOU5rQ1ZFdS81OXQ1a01RNDBHOApWaUJMSTd3VXVFU1phbEhxUHEreGFTanVReVNReUN3OTZ3NjE3WEI3TlRxdTM4Vml6SnNCb1RBZ2xvU0xESVYzCm13V2V2RjMzZ1l0bGRSZXZQSEpRTlNxeVlWcklWbmRsUnpMVURtZkF2dmpNdERuUi9UTmdHWUtZc0o1TjRSRUcKZU5TT1JOWERhWDNoZzZXWlpyQlYySmsxenE0eUgreVdTd3RrMUNOK0JMYzBMdGRCcGdic2xibWhJaDdPakpyRApxL0R1Z09IRWJwSnNJRXoyenFKempTOUV2MXJGbmxPcFFyL1NCdTlmTTZzeDZJb3M1cUwyc1RZTVY0V3lQTW1OClRPTFoxRGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    service:
      name: istiod-1-8-1
      namespace: istio-system
      path: /inject
      port: 443
  failurePolicy: Fail
  matchPolicy: Exact
  name: sidecar-injector.istio.io
  namespaceSelector:
    matchExpressions:
    - key: istio-injection
      operator: DoesNotExist
    - key: istio.io/rev
      operator: In
      values:
      - 1-8-1
  objectSelector: {}
  reinvocationPolicy: Never
  rules:
  - apiGroups:
    - ""
    apiVersions:
    - v1
    operations:
    - CREATE
    resources:
    - pods
    scope: '*'
  sideEffects: None
  timeoutSeconds: 30

从上面的webhook配置yaml可以看出为什么tcm上自动注入的标签和原生的不一样,其实就是namespaceSelector这个字段配置导致的,tcm的webhook里面需要匹配命名空间的label必须是istio.io/rev: 1-8-1才能被webhook拦截。

通过指定 namespaceSelector,Webhook 可以根据具有名字空间的资源所处的 名字空间的标签来选择拦截哪些资源的操作。

namespaceSelector 根据名字空间的标签是否匹配选择器,决定是否针对具名字空间的资源 (或 Namespace 对象)的请求运行 webhook。 如果对象是除 Namespace 以外的集群范围的资源,则 namespaceSelector 标签无效。

所以这里需要给命名空间打上istio.io/rev: 1-8-1才能实现自动注入。

4. 单独给pod注入sidecar

如果我们给命名空间打上了label,那么在这个命名空间下的所有pod都会自动注入sidecar,但是有的时候我们希望命名空间下某些pod不被istio管理,那么我们可以单独在workload配置下即可,在spec.template.metadata.annotations这个字段加上这个配置sidecar.istio.io/inject:"false"如果想注入sidecar的话,可以将false改为ture

这里我们有一个test pod默认是注入sidecar的,现在我们取消这个sidecar注入

我们修改下yaml文件,加上这个字段,设置成false,然后apply下这个yaml文件,pod启动成功后,我们再查看日志可以发现,只有一个容器的日志了,sidecar已经去掉了。

参考文档

https://istio.io/latest/zh/docs/setup/additional-setup/sidecar-injection/

0 人点赞