CoreDNS 安装和配置

coredns CoreDNS 是一个用于域名系统(DNS)服务的开源项目,它可以在 Kubernetes 集群中用作集群的 DNS 服务器。在 Kubernetes 中,CoreDNS 通常用于提供服务发现和 DNS 解析服务。

安装

通常,CoreDNS 已经作为 Kubernetes 集群的默认 DNS 服务器安装。如果未安装,你可以根据你的 Kubernetes 部署方式选择适当的方法进行安装。

查看配置

你可以通过查看 ConfigMap 来检查 CoreDNS 的配置。在 Kubernetes 中,CoreDNS 的配置通常存储在 ConfigMap 中。使用以下命令查看 CoreDNS 的 ConfigMap:

kubectl get configmap coredns -n kube-system -o yaml
apiVersion: v1
data:
  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 {
           max_concurrent 1000
        }
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2023-05-06T02:27:35Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:Corefile: {}
    manager: kubeadm
    operation: Update
    time: "2023-05-06T02:27:35Z"
  name: coredns
  namespace: kube-system
  resourceVersion: "227"
  uid: 9f3ee395-3d50-4ea6-b509-ae1ca21c830a

修改配置

如果你需要对 CoreDNS 进行自定义配置,可以修改 ConfigMap。修改完成后,CoreDNS 将重新加载新的配置。下面是一个简单的示例,演示如何在 ConfigMap 中添加自定义配置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            upstream
            fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

在上述示例中,你可以在 Corefile 部分添加你的自定义配置。

重新加载CoreDNS

在修改 ConfigMap 后,CoreDNS 将会重新加载新的配置。你可以通过删除 CoreDNS 的 Pod 强制触发重新加载:

kubectl delete pod -n kube-system -l k8s-app=kube-dns

验证 CoreDNS

确保 CoreDNS 已经成功加载新的配置。你可以通过查看 CoreDNS 的 Pod 日志或使用 nslookup 或 dig 等工具在集群内验证 DNS 解析是否按预期工作。

kubectl logs -n kube-system -l k8s-app=kube-dns

一旦 CoreDNS 正常工作,Kubernetes 中的应用程序将能够使用域名来访问其他服务,例如通过 Service 名称进行服务发现。

Last Updated:
Contributors: jobcher