当前位置: 代码迷 >> 综合 >> Istio 注入原理
  详细解决方案

Istio 注入原理

热度:7   发布时间:2024-02-20 20:13:30.0

Istio通过注入边车使得本身的应用获取了一些高级能力,是如何完成边车的注入的呢?

注入方式

  1. 手动注入 - 针对具体的一个资源对象
    工作原理: 通过改写yaml文件植入Istio-proxy容器,以及init-container用于修改iptables规则。
    配置方法:istioctl kue-inject <deploy.yaml> -o <inject.yaml> | kubectl apply -f -

  2. 自动注入 - 针对命名空间内的所有资源对象
    工作原理: 通过webhook机制监听apiserver提交的请求从而自动的修改对应的资源对象。
    配置方法:kubectl label 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-deploymentname: nginx-deploymentnamespace: demo
spec:replicas: 2selector:matchLabels:app: nginx-deploymentstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: nginx-deploymentspec:containers:- image: 'nginx:latest'name: nginx-deployment

运行手动注入命令生成新的资源定义清单

istioctl kube-inject -f nginx-deployment.yaml -o nginx-deployment-inject.yaml

此时会发现新增了一个proxy的容器以及init容器。
在这里插入图片描述
通过应用注入后的资源定义清单完成注入

kubectl apply -f nginx-deployment-inject.yaml

注入前后对比

注入前 只有应用的容器
在这里插入图片描述

注入后 多出一个容器
在这里插入图片描述

注入前 应用只监听自身的套接字
在这里插入图片描述

注入之后 Nginx 应用 与 Istio-Proxy 共享网络命名空间
在这里插入图片描述
在这里插入图片描述