目录
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 前言
如果你对博客有任何疑问,请告诉我。
2 邀约
你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:
3 externalName 介绍
记得很多年前大陆流行音乐刚开始流行,李春波的一首《小芳》风靡大街小巷,正处于青春懵懂期的少男,顷刻间就被它的旋律捕获了,于是小芳就是初恋,初恋就是小芳。
后来上了大学,读了计算机系,学到了很多基于控制台的命令,但是不知道为什么,每当我敲打 ln 命令的时候,都会想起小芳,那时我天真地认为,只要找到了小芳,我就可以找到幸福,于是我向一个情场老手讨教全年级最好记的女生姓名叫什么?他想都没想,脱口而出——“殷静”、“史珍香”。
后来学了 k8s,知道了常用的 k8s service 类型—— ClusterIP、NodePort、LoadBalancer,唯独对 externalName 置若罔闻,直到有一天在学习 Istio Sidecar 这种 API 资源的时候,才突然领悟了 ExternalName 这种 k8s service 类型是使用场景。
externalName 这种 service 类型的作用类似软链或者快捷方式。下面举一个具体的例子。
4 externalName 样例
首先画出整个样例的架构图:
该样例目的是让处于 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
4.2 jiuxi-client-svc.yaml
关键点就在这个文件,该文件中指定了到 nginx-svc 的软链,这么做的好处是对使用者做到了透明,让使用者感觉就好像调用自己命名空间的服务一样。
4.3 jiuxi-nginx.yaml
4.4 jiuxi-nginx-svc.yaml
4.5 jiuxi-ns.yaml
自此整个样例代码编写完毕。
首先创建 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。