Istio通过注入边车使得本身的应用获取了一些高级能力,是如何完成边车的注入的呢?
注入方式
手动注入 - 针对具体的一个资源对象
工作原理: 通过改写yaml文件植入Istio-proxy容器,以及init-container用于修改iptables规则。
配置方法:istioctl kube-inject [app.yaml] -o [inject.yaml] | kubectl apply -f -
自动注入 - 针对命名空间内的所有资源对象
工作原理: 通过webhook机制监听apiserver提交的请求从而自动的修改对应的资源对象。
配置方法:kubectl label namespace <namespace> istio-injection=enabled
通过webhook配置见到如果命名空间如果有对应的标签就会被选中执行自动注入
kubectl get mutatingwebhookconfiguration istio-sidecar-injector -o yaml
手动注入
原始的资源定义清单
apiVersion: v1
kind: Namespace
metadata:
name: demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels: app: nginx-deployment
name: nginx-deployment
namespace: demo
spec:
replicas: 2
selector: matchLabels: app: nginx-deployment
strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate
template: metadata: labels: app: nginx-deployment spec: containers: - image: 'nginx:latest' name: nginx-deployment
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
运行手动注入命令生成新的资源定义清单
istioctl kube-inject -f nginx-deployment.yaml -o nginx-deployment-inject.yaml
- 1
此时会发现新增了一个proxy的容器以及init容器。
通过应用注入后的资源定义清单完成注入
kubectl apply -f nginx-deployment-inject.yaml
- 1
注入前后对比
注入前 只有应用的容器
注入后 多出一个容器
注入前 应用只监听自身的套接字
注入后 Nginx 应用 与 Istio-Proxy 共享网络命名空间
文章来源: blog.csdn.net,作者:叶康铭,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/m0_38030719/article/details/108702826