Featured image of post Kubernetes修改CoreDNS配置文件解析内部域名

Kubernetes修改CoreDNS配置文件解析内部域名

在Kubernetes中,CoreDNS作为默认的DNS服务器,负责集群内部的域名解析。要添加域名解析,通常需要修改CoreDNS的配置文件。

在 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
Licensed under CC BY-NC-SA 4.0