Istio注入sidecar
1、注入
为了充分利用 Istio 的所有特性,网格中的 pod 必须运行一个 Istio sidecar 代理。
向 pod 中注入 Istio sidecar 的两种方法:使用 istioctl
手动注入或启用 pod 所属命名空间的 Istio sidecar 注入器自动注入。
手动注入直接修改配置,如 deployment,并将代理配置注入其中。
当 pod 所属命名空间启用自动注入后,自动注入器会使用准入控制器在创建 Pod 时自动注入代理配置。
通过应用 istio-sidecar-injector
ConfigMap 中定义的模版进行注入。
2、手动注入sidecar
上一节实现了istio的安装,所有的pod都是running状态,但不知其作用,现在先创建一个deployment
1 | apiVersion: apps/v1 |
为了方便视图,创建一个新的名称空间
1 | kubectl create namespace test |
执行如下语句:
1 | istioctl kube-inject -f nginx.yml | kubectl apply -n test -f - |
稍等会儿就能看到原来一个pod变成了两个,如果你有类似 rancher 这样的 web 控制台,可以看得更仔细些,如
下图所示。
从上图可知。此时 nginx pod 内部一共有 3 个容器,一个初始化容器 istio-init 已经运行成功并结束了,一个就是
nginx 本尊,另外一个就是本文的主角 istio-proxy 了,它就是 sidecar,作用是负责跟外部打交到用的。
3、命名空间注入sidecar
当你在一个命名空间中设置了 istio-injection=enabled
标签,且 injection webhook 被启用后,任何新的 pod 都有将在创建时自动添加 sidecar。
现在删除掉刚才创建的 nginx:
1 | kubectl delete deploy nginx -n test |
执行如下命令在命名空间内实现自动注入 sidecar:
1 | kubectl label namespaces test istio-injection=enabled |
再次创建nginx的deploy文件
1 | kubectl apply -f nginx.yml -n test |
稍等会儿就能看到已经自动注入了