CoreDNS:
在 Kubernetes 中,域名解析(DNS 解析)是通过 CoreDNS 或 kube-dns 服务实现的。以下是 Kubernetes 中域名解析的工作原理和配置:
工作原理
-
CoreDNS:
- CoreDNS 是 Kubernetes 集群的默认 DNS 服务器,它以容器的形式运行在 Kubernetes 集群中。
- CoreDNS 负责将 Kubernetes 服务和 Pod 的名称解析为 IP 地址。
-
DNS 解析流程:
- 当 Pod 需要访问另一个服务时,它会向 CoreDNS 发送 DNS 查询请求。
- CoreDNS 根据配置文件(Corefile)中的规则解析请求,并返回相应的 IP 地址。
配置示例
CoreDNS 的配置文件(Corefile)通常位于 /etc/coredns/Corefile
。以下是一个示例 Corefile:
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
域名格式
在 Kubernetes 中,服务的 DNS 名称格式如下:
- 服务名称:
<service-name>.<namespace>.svc.<cluster-domain>
<service-name>
:服务名称。<namespace>
:服务所在的命名空间。svc
:表示这是一个服务。<cluster-domain>
:集群域名,默认是cluster.local
。
例如,一个名为 my-service
的服务位于 my-namespace
命名空间中,其完整的 DNS 名称是 my-service.my-namespace.svc.cluster.local
。
Pod 的域名解析
Pod 的域名解析格式如下:
- Pod 名称:
<pod-ip>.<namespace>.pod.<cluster-domain>
<pod-ip>
:Pod 的 IP 地址。<namespace>
:Pod 所在的命名空间。pod
:表示这是一个 Pod。<cluster-domain>
:集群域名,默认是cluster.local
。
例如,一个 IP 地址为 10.1.2.3
的 Pod 位于 default
命名空间中,其完整的 DNS 名称是 10-1-2-3.default.pod.cluster.local
。
resolv.conf DNS 配置文件:
这几行配置是典型的 resolv.conf
文件中的 DNS 配置,用于指定 DNS 解析的行为。以下是对每一行的解释:
resolv.confv1
nameserver 10.247.3.10 search redis-ns.svc.cluster.local svc.cluster.local cluster.local options single-request-reopen timeout:2 ndots:5
nameserver 10.247.3.10
这一行指定了 DNS 服务器的 IP 地址。客户端在进行 DNS 查询时会向这个 IP 地址发送请求。在这个示例中,DNS 服务器的 IP 地址是 10.247.3.10
。
search redis-ns.svc.cluster.local svc.cluster.local cluster.local
这一行是搜索域配置。它定义了在进行主机名解析时要附加的域名列表。当客户端尝试解析一个不包含点(.
)的短主机名时,会依次将这些域名附加到主机名后面进行解析。例如,解析 my-service
时会尝试以下顺序:
my-service.redis-ns.svc.cluster.local
my-service.svc.cluster.local
my-service.cluster.local
options single-request-reopen timeout:2 ndots:5
这一行是一些 DNS 查询的选项配置:
-
single-request-reopen:启用这个选项可以解决某些网络环境中的问题,具体来说是重新打开一个新连接来发送后续的 DNS 请求,而不是复用现有的连接。
-
timeout:2:设置 DNS 查询的超时时间为 2 秒。如果在这个时间内没有收到 DNS 响应,客户端会重试查询。
-
ndots:5:设置 DNS 查询中点(
.
)的数量阈值。这个选项指定了在将查询主机名视为 FQDN(完全限定域名)之前必须包含的点的数量。如果主机名中包含的点数少于这个值,DNS 解析会依次附加search
指定的域名进行尝试。例如,如果主机名是my-service
,它包含 0 个点,小于 5 个点,因此会依次附加search
域名进行解析。