DC娱乐网

Kubernetes中ExternalName类型的Service 可...

“ 在 Kubernetes 中,ExternalName 类型的 Service 只能填写域名(DNS 名称),不能直

“ 在 Kubernetes 中,ExternalName 类型的 Service 只能填写域名(DNS 名称),不能直接填写固定 IP 地址。”

在 Kubernetes 中,ExternalName 类型的 Service 只能填写域名(DNS 名称),不能直接填写固定 IP 地址。这是由其设计机制和 DNS 解析规则决定的。

一、核心externalName字段

ExternalName Service 的 externalName 字段必须是一个合法的域名, 如:

apiVersion: v1kind: Servicemetadata: name: my-external-servicespec: type: ExternalName externalName: my.external-service.com # 必须是域名,不能是 IP

二、工作原理

Kubernetes 会为 ExternalName Service 创建一个 DNS CNAME 记录,将服务名称映射到指定的域名。例如:

当在集群内访问 my-external-service 时,DNS 查询会直接返回 my.external-service.com 的解析结果。

最终的 IP 地址由 my.external-service.com 的 DNS 解析决定。

三、测试验证是否只能填写域名

经过我的测试,直接填写 IP 地址是能够创建service,但是到pod中是无法ping通的,域名则可以。

1、填写IP,kubectl是可以创建的,其实是无用的。

# cat test.yaml apiVersion: v1kind: Servicemetadata: labels: serversname: mysql-m name: mysql-m namespace: opsspec: externalName: 192.168.1.100 sessionAffinity: None type: ExternalName

测试结果,无法连接。

ping mysql-m.opsping: unknown host mysql-m.ops

2、填写域名

apiVersion: v1kind: Servicemetadata: labels: serversname: mysql-m name: mysql-m namespace: opsspec: externalName: www.163.com sessionAffinity: None type: ExternalName

测试结果,可以正常ping:

ping mysql-m.opsPING www.163.com.w.kunluncan.com (101.37.183.169) 56(84) bytes of data.64 bytes from 101.37.183.169 (101.37.183.169): icmp_seq=1 ttl=56 time=9.01 ms64 bytes from 101.37.183.169 (101.37.183.169): icmp_seq=2 ttl=56 time=8.95 ms