Istio实现sidecar自动注入
Istio实现sidecar自动注入
Sidecar模式
在Sidecar部署方式中,你会为每个应用的容器部署一个伴生容器。对于Service Mesh,Sidecar接管进出应用程序容器的所有网络流量。
Sidecar有利于工作审计,特别是在一些与安全相关的方面。
原理解析
- 原理图
自动注入是通过 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
默认配置只包含istio-injection=enabled标签的命名空间内的pod在创建时才能调用istio-sidecar-injector服务完成自动注入。
单个命名空间设置自动注入
- 指定demo命名空间设置自动注入
kubectl label namespace demo istio-injection=enabled
- 注入结果查看
kubectl get namespace -L istio-injection
所有命名空间设置自动注入
- 修改配置
kubectl edit mutatingwebhookconfiguration istio-sidecar-injector
修改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
一个pod生成了两个容器,一个为nginx本身容器,另一个就是Sidecar代理容器。
- 查看pod详情
kubectl describe po nginx-5bbcd878cf-q2l5s -n demo
- 也可以在kuboard中查看到
自动注入配置成功
本文来自博客园,作者:xiao智,转载请注明原文链接:https://www.cnblogs.com/yuwen01/p/16885568.html