目录

1 前言

2 邀约

3 externalName 介绍

4 externalName 样例

    4.1 jiuxi-client.yaml

    4.2 jiuxi-client-svc.yaml

    4.3 jiuxi-nginx.yaml

    4.4 jiuxi-nginx-svc.yaml

    4.5 jiuxi-ns.yaml

5 验证样例


1 前言

        如果你对博客有任何疑问,请告诉我。

第五章 九析带你轻松完爆 k8s - service externalName 介绍_第1张图片


2 邀约

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

第五章 九析带你轻松完爆 k8s - service externalName 介绍_第2张图片


3 externalName 介绍

        记得很多年前大陆流行音乐刚开始流行,李春波的一首《小芳》风靡大街小巷,正处于青春懵懂期的少男,顷刻间就被它的旋律捕获了,于是小芳就是初恋,初恋就是小芳。

spacer.gif

        后来上了大学,读了计算机系,学到了很多基于控制台的命令,但是不知道为什么,每当我敲打 ln 命令的时候,都会想起小芳,那时我天真地认为,只要找到了小芳,我就可以找到幸福,于是我向一个情场老手讨教全年级最好记的女生姓名叫什么?他想都没想,脱口而出——“殷静”、“史珍香”。

        后来学了 k8s,知道了常用的 k8s service 类型—— ClusterIP、NodePort、LoadBalancer,唯独对 externalName 置若罔闻,直到有一天在学习 Istio Sidecar 这种 API 资源的时候,才突然领悟了 ExternalName 这种 k8s service 类型是使用场景。

        externalName 这种 service 类型的作用类似软链或者快捷方式。下面举一个具体的例子。


4 externalName 样例

        首先画出整个样例的架构图:

第五章 九析带你轻松完爆 k8s - service externalName 介绍_第3张图片spacer.gif

        该样例目的是让处于 default 命名空间下的 httpd-pod 访问到处于 nginx-ns 命名空间下的 nginx-svc,不像以往 svc-name.ns-name.svc.cluster.local 方式跨命名空间访问的方式,这里我们使用 externalName 方式。

        基于上面的架构图,所需要的资源文件如下:

jiuxi-client.yaml # httpd pod

jiuxi-client-svc.yaml # httpd svc

jiuxi-nginx.yaml # nginx pod

jiuxi-nginx-svc.yaml # nginx svc

jiuxi-ns.yaml # nginx namespace

4.1 jiuxi-client.yaml

spacer.gif第五章 九析带你轻松完爆 k8s - service externalName 介绍_第4张图片

4.2 jiuxi-client-svc.yaml

spacer.gif第五章 九析带你轻松完爆 k8s - service externalName 介绍_第5张图片

        关键点就在这个文件,该文件中指定了到 nginx-svc 的软链,这么做的好处是对使用者做到了透明,让使用者感觉就好像调用自己命名空间的服务一样。

4.3 jiuxi-nginx.yaml

spacer.gif第五章 九析带你轻松完爆 k8s - service externalName 介绍_第6张图片

4.4 jiuxi-nginx-svc.yaml

spacer.gif第五章 九析带你轻松完爆 k8s - service externalName 介绍_第7张图片

4.5 jiuxi-ns.yaml

spacer.gif第五章 九析带你轻松完爆 k8s - service externalName 介绍_第8张图片

        自此整个样例代码编写完毕。

        首先创建 jiuxi-ns.yaml 命名空间,然后再应用其他资源文件,如下命令所示:

kubectl apply -f jiuxi-ns.yaml

kubectl apply -f jiuxi-client.yaml

kubectl apply -f jiuxi-client-svc.yaml

kubectl apply -f jiuxi-nginx.yaml

kubectl apply -f jiuxi-nginx-svc.yaml


5 验证样例

        所有 pod 都争取运行之后,登录 client,然后执行如下语句:

wget -q -O - http://jiuxi-client-svc

wget -q -O - http://jiuxi-nginx-svc.nginx-ns.svc.cluster.local

        发现两种方式都可以正常访问。

        自此,九析带你轻松完爆 k8s service externalName。