Kubernetes----ExternalName类型的Service
一、ExternalName类型Service简介
externalName Service是k8s中一个特殊的service类型,它不需要指定selector去选择哪些pods实例提供服务,而是使用DNS CNAME机制把自己CNAME到你指定的另外一个域名上,你可以提供集群内的名字,比如mysql.db.svc这样的建立在db命名空间内的mysql服务,也可以指定http://mysql.example.com这样的外部真实域名。
二、ExternalName类型Service实例
编辑external_name.yaml文件如下:
apiVersion: v1 kind: Namespace metadata: name: dev --- apiVersion: v1 kind: Service metadata: name: search namespace: dev spec: type: ExternalName externalName: www.baidu.com
使用如下命令创建资源
[root@master service]# kubectl apply -f external_name.yaml namespace/dev created service/search created [root@master service]#
查看资源如下:
[root@master service]# kubectl get service -n dev NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE search ExternalName <none> www.baidu.com <none> 11s [root@master service]#
此时,在集群内部的pod中就可以通过 search.dev.svc.cluster.local 访问www.baidu.com了 下面验证一下,首先登录一个pod查看 /etc/resolve.conf
[root@master service]# kubectl exec -it pod/pc-deployment-5ffc5bf56c-9bg6w -n dev /bin/bash kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. root@pc-deployment-5ffc5bf56c-9bg6w:/# root@pc-deployment-5ffc5bf56c-9bg6w:/# cat /etc/resolv.conf nameserver 10.96.0.10 search dev.svc.cluster.local svc.cluster.local cluster.local options ndots:5 root@pc-deployment-5ffc5bf56c-9bg6w:/#
然后使用dig命令验证
[root@master service]# dig @10.96.0.10 search.dev.svc.cluster.local ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @10.96.0.10 search.dev.svc.cluster.local ; (1 server found) ;; global options: +cmd ;; Got answer: ;; WARNING: .local is reserved for Multicast DNS ;; You are currently testing what happens when an mDNS query is leaked to DNS ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62861 ;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;search.dev.svc.cluster.local. IN A ;; ANSWER SECTION: search.dev.svc.cluster.local. 30 IN CNAME www.baidu.com. www.baidu.com. 30 IN CNAME www.a.shifen.com. www.a.shifen.com. 30 IN A 110.242.68.3 www.a.shifen.com. 30 IN A 110.242.68.4 ;; Query time: 5 msec ;; SERVER: 10.96.0.10#53(10.96.0.10) ;; WHEN: Wed Apr 06 23:48:14 CST 2022 ;; MSG SIZE rcvd: 219 [root@master service]#
三、删除资源
使用如下命令删除即可
[root@master service]# kubectl delete -f external_name.yaml namespace "dev" deleted service "search" deleted [root@master service]#
