k8s_设置dns

发布于:2024-06-02 ⋅ 阅读:(113) ⋅ 点赞:(0)

配置k8s dns

在 Kubernetes 集群中,CoreDNS 是默认的 DNS 服务器,它负责处理集群内所有的 DNS 请求。
kubectl edit cm coredns -n kube-system (此命令修改coredns 配置)
kubectl describe cm coredns -n kube-system(此命令查看coredns 配置)
出现类似以下结果

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: "2024-05-11T02:24:34Z"
  name: coredns
  namespace: kube-system
  resourceVersion: "514"
  uid: 04803c22-064c-451e-a88e-425e4cd38cd5

注意:其中
forward . /etc/resolv.conf
表示在 CoreDNS 的配置中使用 forward . /etc/resolv.conf { max_concurrent 1000 },CoreDNS 将所有无法处理的 DNS 请求转发到 /etc/resolv.conf 中指定的上游 DNS 服务器,并限制最大并发查询数为 1000。
修改完配置,执行下面命令使配置生效
kubectl delete pod -n kube-system -l k8s-app=kube-dns
验证
kubectl run -i --tty dnsutils --image=tutum/dnsutils --rm
进入pod后,执行下述命令查看dns是否正确
nslookup google.com
dig google.com

/etc/resolv.conf 和 /etc/systemd/resolved.conf 的关系和区别

/etc/resolv.conf/etc/systemd/resolved.conf 都与系统的 DNS 配置有关,但它们有不同的用途和作用范围。

/etc/resolv.conf

/etc/resolv.conf 是一个传统的配置文件,用于指定系统的 DNS 解析器。该文件包含 DNS 服务器的地址、搜索域等信息。典型的内容可能如下所示:
(此时可能手动管理)

nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com

或者(此时可能由systemd-resolved管理)

nameserver 127.0.0.53
options edns0 trust-ad
search .
  • nameserver:指定 DNS 服务器的 IP 地址。
  • search:指定搜索域,解析未完全限定的主机名时使用。

操作系统和大多数应用程序在进行 DNS 查询时会读取这个文件。

/etc/systemd/resolved.conf

/etc/systemd/resolved.conf 是 systemd-resolved 服务的配置文件。systemd-resolved 是一个用于处理 DNS 解析的系统服务,提供 DNS 缓存和分区的 DNS 配置。典型的配置文件内容可能如下所示:

[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1 1.0.0.1
Domains=example.com
LLMNR=no
MulticastDNS=no
DNSSEC=no
Cache=yes
  • DNS:指定主 DNS 服务器。
  • FallbackDNS:指定备用 DNS 服务器。
  • Domains:指定搜索域。
  • LLMNRMulticastDNSDNSSECCache:配置是否启用特定的 DNS 功能。

关系和区别

  • 用途/etc/resolv.conf 是一个通用的 DNS 配置文件,许多应用程序和工具会直接读取这个文件来获取 DNS 信息。而 /etc/systemd/resolved.conf 是用于配置 systemd-resolved 服务的。
  • 管理方式:当使用 systemd-resolved 时,它会管理 /etc/resolv.conf 的内容。如果 systemd-resolved 启动并运行,它可能会将 /etc/resolv.conf 设置为指向 systemd-resolved 自己的本地解析器(通常是 127.0.0.53)。在这种情况下,系统的 DNS 请求会被 systemd-resolved 处理。
  • 配置方式:可以通过编辑 /etc/resolv.conf 来手动配置 DNS 服务器,但如果 systemd-resolved 在运行,它可能会覆盖这些手动配置。通过编辑 /etc/systemd/resolved.conf 配置文件,并重启 systemd-resolved 服务,可以持久地配置 DNS 设置。

使用 systemd-resolved 时的典型配置步骤

  1. 编辑 /etc/systemd/resolved.conf

    [Resolve]
    DNS=8.8.8.8 8.8.4.4
    FallbackDNS=1.1.1.1 1.0.0.1
    Domains=example.com
    
  2. 重启 systemd-resolved 服务

    sudo systemctl restart systemd-resolved
    
  3. 确保 /etc/resolv.conf 指向 systemd-resolved

    sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
    

通过以上步骤,systemd-resolved 将会管理 DNS 配置,并确保 /etc/resolv.conf 指向它自己的本地解析器。

小结

总之,k8s通过coredns 来管理dns,并且指定无法处理的 DNS 请求转发到 /etc/resolv.conf指定的dns服务器(这里也可以配置为其他dns服务器)。systemd-resolved启动后,/etc/resolv.conf由 systemd-resolved 管理(会变成一个软链接),/etc/resolv.conf的内容实际是systemd-resolved的配置文件/run/systemd/resolve/stub-resolv.conf,stub-resolv.conf中会配置实际真正的dns服务器地址。dns设置不妥当,会影响k8s中安装组件时的域名解析。安装组件时可以通过下述命令查看是否因为域名解析导致pull组件镜像失败。
kubectl get events --sort-by=‘.metadata.creationTimestamp’ -n kube-system | tail -n10