企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
`ExternalName Service`是一种特殊类型的 Service,主要用于访问位于集群外部的服务。它没有选择器 Selector,也没有定义任何端口 Port 或是 Endpoints。它的作用是返回集群外服务的域名。 通过返回`CNAME`和它的值,可以将服务映射到`externalName`字段对应的内容(比如:[www.lanqiao.cn)。使用这种类型的服务不会创建任何类型的代理。](http://www.lanqiao.cn%29.xn--ihq3thc2f6lqi40ot4aq01aga440stew1r2bxkdgrgja993l2wlka1620h./) 在`/home/shiyanlou`目录下新建`externalname-svc.yaml`文件,并向其中写入如下代码: ~~~yaml apiVersion: v1 kind: Service metadata: name: en-svc namespace: default spec: type: ExternalName # type 类型需要选择 ExternalName externalName: www.lanqiao.cn # externalName 中填写外部服务对应的域名 ~~~ 执行创建: ~~~bash $ kubectl create -f externalname-svc.yaml service/en-svc created # 查看服务,可以看到 en-svc 服务没有集群IP,只有一个 EXTERNAL-IP,为:www.lanqiao.cn $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE en-svc ExternalName <none> www.lanqiao.cn <none> 6s ~~~ 在实验环境中通过 ping 查看[www.lanqiao.cn](http://www.lanqiao.cn/)对应的 IP 地址: ~~~bash $ ping www.lanqiao.cn PING www.lanqiao.cn (121.40.227.60) 56(84) bytes of data. 64 bytes from 121.40.227.60: icmp_seq=1 ttl=100 time=3.82 ms 64 bytes from 121.40.227.60: icmp_seq=2 ttl=100 time=3.77 ms 64 bytes from 121.40.227.60: icmp_seq=3 ttl=100 time=3.78 ms ~~~ `www.lanqiao.cn`对应的 IP 地址为:`121.40.227.60`。 现在可以进入容器内部通过 DNS 查找 en-svc 服务对应的 IP 地址,这里单独运行一个使用 utils 镜像创建的 pod 执行命令(镜像中已经安装了 dnsutils): ~~~bash $ kubectl run --generator=run-pod/v1 --rm utils -it --image registry-vpc.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/utils:latest bash If you don't see a command prompt, try pressing enter. root@utils:/# nslookup en-svc Server: 10.96.0.10 Address: 10.96.0.10#53 en-svc.default.svc.cluster.local canonical name = www.lanqiao.cn. Name: www.lanqiao.cn Address: 121.40.227.60 root@utils:/# ~~~ 通过这样的方式也就验证了,使用 ExternalName Service 可以使集群连接外部服务,在`spec.externalName`字段中定义外部服务的域名即可使用。