系列文章:


总目录索引:九析带你轻松完爆 istio 服务网格系列教程

目录

1 前言

2 istio 初探

    2.1 手动注入 sidecar

    2.2 自动注入 sidecar


1 前言

        如果你对博客有任何疑问,请加微信沟通:第二章 九析带你轻松完爆服务网格 - istio 初探_第1张图片

        你可以从下面截图中获取免费的、更生动的视频资料,在 b 站搜索“九析”:

第二章 九析带你轻松完爆服务网格 - istio 初探_第2张图片


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 的手动和自动织入功能。