在 Kubernetes 中,CoreDNS 作为默认的 DNS 服务器,负责集群内部的域名解析。要添加域名解析,通常需要修改 CoreDNS 的配置文件,该配置文件实际上是一个存储在 kube-system 命名空间下的 ConfigMap 对象。
案例:假设要将域名 docker.local.io 解析到 IP 地址 192.168.0.100,以下是详细的操作步骤
- 打开 CoreDns 的配置文件
kubectl edit cm coredns -n kube-system
- 在配置文件中添加域名解析条目
修改之前可以先备份一下原 ConfigMap,以防配置修改错误。
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
hosts {
192.168.1.100 docker.local.io # 新增
fallthrough
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
保存并关闭配置文件,请注意,hosts 插件的配置块必须正确缩进。
- 重启 CoreDNS 服务以应用更改 修改 ConfigMap 后,Kubernetes 会自动检测到这些更改并重新加载 CoreDNS 配置,但有时候为了确保更改立即生效,您可能需要手动重启 CoreDNS 的 Pod。这可以通过删除 CoreDNS 的 Pod 来实现,Kubernetes 的 Deployment 控制器会自动创建新的 Pod 来替换它们:
kubectl delete pod -n kube-system -l k8s-app=kube-dns
请注意,在某些 Kubernetes 集群中,CoreDNS 的 label 可能不是 k8s-app=kube-dns,而是其他类似的 label,如 k8s-app=coredns。您可以使用下面的命令来检查正确的 label。
kubectl get pods -n kube-system --show-labels