6.3.4 服务发现方式:DNS

创建Service资源对象时,ClusterDNS会为它自动创建资源记录用于名称解析和服务注册,于是,Pod资源可直接使用标准的DNS名称来访问这些Service资源。每个Service对象相关的DNS记录包含如下两个:

  • {SVCNAME}.{NAMESPACE}.{CLUSTER_DOMAIN}
  • {SVCNAME}.{NAMESPACE}.svc.{CLUSTER_DOMAIN}

另外,在前面第2章的部署参数中,“--cluster-dns”指定了集群DNS服务的工作地址,“--cluster-domain”定义了集群使用的本地域名,因此,系统初始化时默认会将“cluster.local”和主机所在的域“ilinux.io”作为DNS的本地域使用,这些信息会在Pod创建时以DNS配置的相关信息注入它的/etc/resolv.conf配置文件中。例如,在此前创建的用于交互式Pod资源的客户端中查看其配置,命令如下:

**[terminal]
**[delimiter / # ]**[command cat /etc/resolv.conf]
nameserver 169.254.25.10
search default.svc.cluster.local svc.cluster.local cluster.local ilinux.io
options ndots:5

上述search参数中指定的DNS各搜索域,是以次序指定的几个域名后缀,具体如下所示:

  • {NAMESPACE}.svc.{CLUSTER_DOMAIN}:如default.svc.cluster.local
  • svc.{CLUSTER_DOMAIN}:如svc.cluster.local
  • {CLUSTER_DOMAIN}:如cluster.local
  • {WORK_NODE_DOMAIN}:如ilinux.io

例如,在此之前创建的用于交互式Po客户端中尝试请求解析myapp-svc的相关DNS记录:

**[terminal]
**[delimiter / # ]**[command nslookup myapp-svc.default]
nslookup: can't resolve '(null)': Name does not resolve

Name:      myapp-svc.default
Address 1: 10.233.16.105 myapp-svc.default.svc.cluster.local

解析时,“myapp-svc”服务名称的搜索次序依次是default.svc.cluster.local、svc.cluster.local、cluster.local和ilinux.io,因此基于DNS的服务发现不受Service资源所在的名称空间和创建时间的限制。上面的解析结果也正是默认的default名称空间中创建的myapp-svc服务的IP地址。

results matching ""

    No results matching ""