Coredns 仅解析默认命名空间的集群地址

Coredns 仅解析默认命名空间的集群地址

概括

我只能解析default命名空间的主机名。来自其他命名空间的请求(例如kube-system)会从 coredns 返回 NXDOMAIN。是否需要进行某些授权?

细节

我已经按照以下方式建立了一个学习集群Kubernetes 的艰难之路除了使用 VirtualBox 而不是 GCP。除了非默认命名空间中的 DNS 查询外,其他所有操作似乎都有效。更具体地说:

  • 工作(从默认命名空间运行):kubernetes.default
  • 不起作用(从 kube-system 命名空间运行,获取 NXDOMAIN):kubernetes.kube-system

配置

我已升级到 Coredns 1.12,因为 1.2.2 大约有 50% 的时间无法解析任何内容。使用 1.12 时,请求 100% 的时间都能解析(如果在default命名空间中)。

我必须编辑配置(在 configmap 中),删除“loop”和“proxy”(用 forward 替换 proxy)插件才能使其正常工作。我的配置如下:

    .:53 {
        forward . 192.168.99.254:53 # dnsmasq on host machine
        log
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        cache 30
        reload
        loadbalance

故障排除

下列的本指南我懂了:

Pod 运行正常

$ kubectl get pods --namespace=kube-system -l k8s-app=kube-dns
NAME                       READY   STATUS    RESTARTS   AGE
coredns-6f8fb48d88-dz9cd   1/1     Running   0          14m
coredns-6f8fb48d88-s5rvp   1/1     Running   0          14m

检查控制台,我看到健康的日志记录

2019-05-24T04:41:13.990Z [INFO] plugin/reload: Running configuration MD5 = 7c717fabd578b2514cf60fee426fabc6
2019-05-24T04:41:13.992Z [INFO] CoreDNS-1.5.0
2019-05-24T04:41:13.992Z [INFO] linux/amd64, go1.12.2, e3f9a80

DNS 服务可用:

 $ kubectl get svc --namespace=kube-system
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
kube-dns         ClusterIP   10.32.0.10   <none>        53/UDP,53/TCP   18d

端点暴露如下:

$ kubectl get ep kube-dns --namespace=kube-system
NAME       ENDPOINTS                                                     AGE
kube-dns   10.200.21.33:53,10.200.22.17:53,10.200.21.33:53 + 1 more...   18d

如上所述,DNS 可以工作,但仅限于default命名空间。

答案1

看来这是busybox 图片- 如果我使用通用 Ubuntu,则记录解析成功,需要记录的服务能够获取它们。例如,metrics-server 可以解析节点。

相关内容