在Sidecar部署方式中,你会为每个应用的容器部署一个伴生容器。对于Service Mesh,Sidecar接管进出应用程序容器的所有网络流量。
Sidecar有利于工作审计,特别是在一些与安全相关的方面。
自动注入是通过 kube-apiserver 准入控制实现的。简单来说,istio-sidecar-injector 服务提供一个 webservice 用于提供自动注入服务(该服务使用 istio-sidecar-injector ConfigMap 作为注入配置),而定义在何种情况下 kube-apiserver 需要向 istio-sidecar-injector 服务发送请求进行注入的是 istio-sidecar-injector MutatingAdmissionWebhook。
kubectl describe mutatingwebhookconfiguration istio-sidecar-injector
默认配置只包含istio-injection=enabled标签的命名空间内的pod在创建时才能调用istio-sidecar-injector服务完成自动注入。
kubectl label namespace demo istio-injection=enabled
kubectl get namespace -L istio-injection
kubectl edit mutatingwebhookconfiguration istio-sidecar-injector
修改namespaceSelector配置,如果某个命名空间不想自动注入,则加上istio-injection=disabled标签即可。
---
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
kubectl apply -f nginx.yaml
一个pod生成了两个容器,一个为nginx本身容器,另一个就是Sidecar代理容器。
kubectl describe po nginx-5bbcd878cf-q2l5s -n demo