系列文章:
总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 istio 初探
2.1 手动注入 sidecar
2.2 自动注入 sidecar
1 前言
如果你对博客有任何疑问,请加微信沟通:
2 istio 初探
上节九析带你轻松完爆了 istio 的安装。但是我相信安装成功的小伙伴依然云里雾里,因为看着一大坨 pod 在那里 running 着,似乎并没有产生任何作用。这节,九析就带你“莫畏浮云遮望眼,守得云开见月明”。为了预期效果,我们不妨先建立一个 deployment,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14-alpine
ports:
- containerPort: 80
创建 deployment,当然为了让你能更深刻地记住哥,把哥印在灵魂深处,你需要首先创建一个命名空间:
kubectl create ns jiuxi
kubectl apply -f nginx-deployment.yaml -n jiuxi
命令执行成功后,查询 nginx pod 状态:
kubectl get pods -n jiuxi
截图如下:需要注意 ready 这一列,内容为 1/1,表示的含义是 pod 内有一个容器,且该容器运行成功并处于就绪状态。
下面到了激动人心的时刻了,因为 istio 即将闪亮登场。
2.1 手动注入 sidecar
执行如下语句:
kube-inject -f nginx-deployment.yaml | kubectl apply -n jiuxi -f -
命令执行结果如下图所示:
此时你会发现一个奇怪的现象,nginx-deployment.yaml 并没修改,但是 ready 状态却变成了 2/2。根据上面的解释可知,现在 pod 内有两个容器,且这两个容器都运行成功并处于就绪状态。为什么多了一个容器呢?
查看 pod 的详细信息:
kubectl get pod -n jiuxi nginx-xxxx -o yaml # xxxx 根据自己实际情况填写
如果你有类似 rancher 这样的 web 控制台,可以看得更仔细些,如下图所示。如果你还没有安装和配置 rancher,你可以参考哥的轻松完爆 rancher 系列进行安装,放心,容易到爆,容易到你尖叫。
从上图可知。此时 nginx pod 内部一共有 3 个容器,一个初始化容器 istio-init 已经运行成功并结束了,一个就是 nginx 本尊,另外一个就是本文的主角 istio-proxy 了,它就是 sidecar,作用跟鸡你太美的经纪人的作用差不多,负责跟外部打交道用的。
此时此刻,你已经为 pod 手工织入了 istio。但是这样似乎有点不够爽。因为每建立一个 pod 都撸这么一管,感觉有点累,有没有批量或者更自然的方式呢?
2.2 命名空间注入 sidecar
现在我们删除掉刚才创建的 nginx:
kubectl delete deployments.apps nginx -n jiuxi
执行如下命令在命名空间内实现自动注入 sidecar:
kubectl label namespaces jiuxi istio-injection=enabled
kubectl get ns jiuxi --show-labels # 查看 label 是否成功创建
再次根据 nginx-deployment.yaml 文件创建 nginx deployment:
kubectl apply -f nginx-deployment.yaml -n jiuxi
创建成功后查看 pod 信息,发现已经自动织入了 sidecar。
自此,本节九析带你轻松完爆了 istio 的手动和自动织入功能。