Istio实现sidecar自动注入

1,288 阅读2分钟

Sidecar模式

在Sidecar部署方式中,你会为每个应用的容器部署一个伴生容器。对于Service Mesh,Sidecar接管进出应用程序容器的所有网络流量。

Sidecar有利于工作审计,特别是在一些与安全相关的方面。

image.png

原理解析

  • 原理图

image.png

自动注入是通过 kube-apiserver 准入控制实现的。简单来说,istio-sidecar-injector 服务提供一个 webservice 用于提供自动注入服务(该服务使用 istio-sidecar-injector ConfigMap 作为注入配置),而定义在何种情况下 kube-apiserver 需要向 istio-sidecar-injector 服务发送请求进行注入的是 istio-sidecar-injector MutatingAdmissionWebhook。

查看配置

  • 查看现有(默认)istio-sidecar-injector的MutatingAdmissionWebhook配置
kubectl describe mutatingwebhookconfiguration istio-sidecar-injector

image.png

默认配置只包含istio-injection=enabled标签的命名空间内的pod在创建时才能调用istio-sidecar-injector服务完成自动注入。

单个命名空间设置自动注入

  • 指定demo命名空间设置自动注入
kubectl label namespace demo istio-injection=enabled

image.png

  • 注入结果查看
kubectl get namespace -L istio-injection

image.png

所有命名空间设置自动注入

  • 修改配置
kubectl edit mutatingwebhookconfiguration istio-sidecar-injector

image.png

修改namespaceSelector配置,如果某个命名空间不想自动注入,则加上istio-injection=disabled标签即可。

测试自动注入

  • 创建一个简单的deployment
    • vim nginx.yaml
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: '1'
        k8s.kuboard.cn/displayName: nginx
        k8s.kuboard.cn/workload: nginx
      generation: 1
      labels:
        k8s.kuboard.cn/layer: ''
        k8s.kuboard.cn/name: nginx
      name: nginx
      namespace: demo
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          k8s.kuboard.cn/layer: ''
          k8s.kuboard.cn/name: nginx
      template:
        metadata:
          labels:
            k8s.kuboard.cn/layer: ''
            k8s.kuboard.cn/name: nginx
        spec:
          containers:
            - image: nginx:1.19.10-alpine
              imagePullPolicy: IfNotPresent
              name: nginx
    
  • 创建pod
kubectl apply -f nginx.yaml

image.png

image.png

一个pod生成了两个容器,一个为nginx本身容器,另一个就是Sidecar代理容器。

  • 查看pod详情
kubectl describe po nginx-5bbcd878cf-q2l5s -n demo

image.png

  • 也可以在kuboard中查看到

image.png

自动注入配置成功