Inject Method
1. 手动注入 - 针对具体的一个资源对象
工作原理: 通过改写yaml文件植入Istio-proxy容器,以及init-container用于修改iptables规则。
配置方法:istioctl kue-inject <deploy.yaml> -o <inject.yaml>
2. 自动注入 - 针对命名空间内的所有资源对象
工作原理: 通过webhook机制监听apiserver提交的请求从而自动的修改对应的资源对象。
配置方法:kubectl label namespace <namespace> istio-injection=enabled
kubectl get mutatingwebhookconfiguration istio-sidecar-injector -o yaml
# 原始的资源定义清单
tee nginx-deployment.yaml <<-'EOF'
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'
imagePullPolicy: IfNotPresent
name: nginx-deployment
resources:
limits:
cpu: 100m
memory: 200Mi EOF
kubectl apply -f nginx-deployment.yaml
# 被Istio注入后的资源定义清单
istioctl kube-inject -f nginx-deployment.yaml -o nginx-deployment-inject.yaml
kubectl apply -f nginx-deployment-inject.yaml
## 注入前 只有应用的容器
## 注入后 多出一个容器
# 所有的容器共享Pod的命名空间
## 注入前 应用只监听自身的套接字
## Nginx Container 注入之后 与 Istio-Proxy 共享网络命名空间
## Istio-Proxy Container 注入之后 与 Nginx 共享网络命名空间