Kubeadm: 使用CoreDNS进行全新部署无法解决任何dns查找

创建于 2018-08-14  ·  22评论  ·  资料来源: kubernetes/kubeadm

感谢您提出问题! 按下按钮之前,请先回答以下问题。

这是错误报告还是功能请求?

错误报告

版本号

kubeadm版本(使用kubeadm version ):

{
  "clientVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:14:39Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}

环境

  • Kubernetes版本(使用kubectl version ):
{
  "clientVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:17:28Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  },
  "serverVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:08:19Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}
  • 云提供商或硬件配置
    CentosOS 7虚拟机
  • 操作系统(例如,从/ etc / os-release):
    CentOS Linux版本7.5.1804(核心)
  • 内核(例如uname -a ):
    Linux K8S-master 3.10.0-862.9.1.el7.x86_64#1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
  • 其他
    与法兰绒联网
$ kubectl get all --all-namespaces 
NAMESPACE     NAME                                     READY     STATUS    RESTARTS   AGE
kube-system   pod/coredns-78fcdf6894-bvtcg             1/1       Running   2          3h
kube-system   pod/coredns-78fcdf6894-lq7st             1/1       Running   2          3h
kube-system   pod/etcd-k8s-master                      1/1       Running   1          3h
kube-system   pod/kube-apiserver-k8s-master            1/1       Running   1          3h
kube-system   pod/kube-controller-manager-k8s-master   1/1       Running   1          3h
kube-system   pod/kube-flannel-ds-6tgqf                1/1       Running   2          3h
kube-system   pod/kube-flannel-ds-cn4ql                1/1       Running   1          3h
kube-system   pod/kube-proxy-cjlvz                     1/1       Running   1          3h
kube-system   pod/kube-proxy-w7ts7                     1/1       Running   1          3h
kube-system   pod/kube-scheduler-k8s-master            1/1       Running   1          3h

NAMESPACE   NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
default     service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3h

NAMESPACE     NAME                             DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
kube-system   daemonset.apps/kube-flannel-ds   2         2         2         2            2           beta.kubernetes.io/arch=amd64   3h
kube-system   daemonset.apps/kube-proxy        2         2         2         2            2           beta.kubernetes.io/arch=amd64   3h

NAMESPACE     NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns   2         2         2            2           3h

NAMESPACE     NAME                                 DESIRED   CURRENT   READY     AGE
kube-system   replicaset.apps/coredns-78fcdf6894   2         2         2         3h

发生了什么?

我创建了一项服务,以便一个Pod可以卷曲另一个Pod,但是这个名称从未解析。
执行到广告连播中:

# cat /etc/resolv.conf 
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

在默认的kube-dns较旧的安装中,我记得IP 10.96.0.10的服务名为“ kube-dns”。 此安装没有此类服务。

curl my-service 
curl: (6) Could not resolve host: my-service

curl my-service.default.svc.cluster.local 
curl: (6) Could not resolve host: my-service.default.svc.cluster.local

curl www.google.com
curl: (6) Could not resolve host: www.google.com

您预期会发生什么?

DNS查询应该解决

如何重现(尽可能少且精确)?

全新安装了kubeadm和法兰绒,带有一个节点的CentOS 7和主节点也充当了节点。
创建一个容器和服务,尝试将容器卷曲在容器中。

我们还有什么需要知道的吗?

我在/etc/resolv.conf(10.96.0.10)中看到的IP地址与kube-dns相同,但是这次在10.96.0.10中没有任何显示。

$ kubectl logs -f --namespace=kube-system coredns-78fcdf6894-bvtcg 
.:53
CoreDNS-1.1.3
linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] CoreDNS-1.1.3
2018/08/14 15:34:06 [INFO] linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] plugin/reload: Running configuration MD5 = 2a066f12ec80aeb2b92740dd74c17138
^C
$ kubectl logs -f --namespace=kube-system coredns-78fcdf6894-lq7st 
.:53
2018/08/14 15:34:06 [INFO] CoreDNS-1.1.3
2018/08/14 15:34:06 [INFO] linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] plugin/reload: Running configuration MD5 = 2a066f12ec80aeb2b92740dd74c17138
CoreDNS-1.1.3
linux/amd64, go1.10.1, b0fd575c
help wanted prioritawaiting-more-evidence

最有用的评论

请检查/var/lib/kubelet/config.yamlclusterDNS变量。 对于我们的配置,它被(错误地)设置为10.96.0.10而应该是10.244.240.10 (这就是我们引导集群的内容)。 更改此设置并重新启动kubelet,可以为我们解决此问题。 您的里程可能会有所不同。

所有22条评论

无论出于何种原因,您的群集上都没有kube-dns服务。
您首先需要手工重新创建它以修复问题。 然后,我们可以尝试找出它是如何消失的。

您可以使用此Yaml通过kubectl apply -f创建服务...

apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  annotations:
    prometheus.io/port: "9153"
    prometheus.io/scrape: "true"
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "CoreDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 10.96.0.10
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

注意:CoreDNS服务名称仍被命名为“ kube-dns”,这与直觉相反,但是它确实选择了coredns pod(使用选择器标签“ kube-dns”)。

我遇到了与OP相同的问题,描述和用例几乎相同:在Centos 7.5上的kubeadm ,其中一个主节点也作为工作节点运行。 我有同样的问题,并且我的服务确实存在:

λ k get all --all-namespaces
NAMESPACE        NAME                                                READY     STATUS             RESTARTS   AGE
default          pod/busybox                                         0/1       Error              0          28m
default          pod/gitlab-gitlab-fd8b9fb85-26mkz                   0/1       CrashLoopBackOff   6          50m
default          pod/gitlab-minio-7fb7886d94-2zsff                   1/1       Running            0          50m
default          pod/gitlab-postgresql-8684bb6656-ltxjm              1/1       Running            0          50m
default          pod/gitlab-redis-785447c586-84x4c                   1/1       Running            0          50m
default          pod/ldap-79bb8c66b9-68v9f                           1/1       Running            0          2d
default          pod/local-volume-provisioner-dkxm9                  1/1       Running            0          2d
kube-system      pod/coredns-78fcdf6894-2t8tv                        1/1       Running            0          2d
kube-system      pod/coredns-78fcdf6894-wvq26                        1/1       Running            0          2d
kube-system      pod/etcd-server1.stitches.tech                      1/1       Running            0          2d
kube-system      pod/kube-apiserver-server1.domain            1/1       Running            0          2d
kube-system      pod/kube-controller-manager-server1.domain   1/1       Running            0          2d
kube-system      pod/kube-flannel-ds-m9cz5                           1/1       Running            0          2d
kube-system      pod/kube-proxy-qhr8p                                1/1       Running            0          2d
kube-system      pod/kube-scheduler-server1.domain            1/1       Running            0          2d
kube-system      pod/kubernetes-dashboard-6948bdb78-qnp4b            1/1       Running            0          2d
kube-system      pod/tiller-deploy-56c4cf647b-64w8v                  1/1       Running            0          2d
metallb-system   pod/controller-9c57dbd4-fqhzb                       1/1       Running            0          2d
metallb-system   pod/speaker-tngv7                                   1/1       Running            0          2d

NAMESPACE     NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                   AGE
default       service/gitlab-gitlab          LoadBalancer   10.102.204.34   192.168.1.201   22:32208/TCP,80:32194/TCP,443:31370/TCP   50m
default       service/gitlab-minio           ClusterIP      None            <none>          9000/TCP                                  50m
default       service/gitlab-postgresql      ClusterIP      10.108.66.88    <none>          5432/TCP                                  50m
default       service/gitlab-redis           ClusterIP      10.97.59.57     <none>          6379/TCP                                  50m
default       service/kubernetes             ClusterIP      10.96.0.1       <none>          443/TCP                                   2d
default       service/ldap-service           LoadBalancer   10.101.250.10   192.168.1.200   389:32231/TCP                             2d
kube-system   service/kube-dns               ClusterIP      10.96.0.10      <none>          53/UDP,53/TCP                             2d
kube-system   service/kubernetes-dashboard   NodePort       10.104.132.52   <none>          443:30924/TCP                             2d
kube-system   service/tiller-deploy          ClusterIP      10.96.67.163    <none>          44134/TCP                                 2d

NAMESPACE        NAME                                      DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
default          daemonset.apps/local-volume-provisioner   1         1         1         1            1           <none>                          2d
kube-system      daemonset.apps/kube-flannel-ds            1         1         1         1            1           beta.kubernetes.io/arch=amd64   2d
kube-system      daemonset.apps/kube-proxy                 1         1         1         1            1           beta.kubernetes.io/arch=amd64   2d
metallb-system   daemonset.apps/speaker                    1         1         1         1            1           <none>                          2d

NAMESPACE        NAME                                   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
default          deployment.apps/gitlab-gitlab          1         1         1            0           50m
default          deployment.apps/gitlab-minio           1         1         1            1           50m
default          deployment.apps/gitlab-postgresql      1         1         1            1           50m
default          deployment.apps/gitlab-redis           1         1         1            1           50m
default          deployment.apps/ldap                   1         1         1            1           2d
kube-system      deployment.apps/coredns                2         2         2            2           2d
kube-system      deployment.apps/kubernetes-dashboard   1         1         1            1           2d
kube-system      deployment.apps/tiller-deploy          1         1         1            1           2d
metallb-system   deployment.apps/controller             1         1         1            1           2d

NAMESPACE        NAME                                             DESIRED   CURRENT   READY     AGE
default          replicaset.apps/gitlab-gitlab-fd8b9fb85          1         1         0         50m
default          replicaset.apps/gitlab-minio-7fb7886d94          1         1         1         50m
default          replicaset.apps/gitlab-postgresql-8684bb6656     1         1         1         50m
default          replicaset.apps/gitlab-redis-785447c586          1         1         1         50m
default          replicaset.apps/ldap-79bb8c66b9                  1         1         1         2d
kube-system      replicaset.apps/coredns-78fcdf6894               2         2         2         2d
kube-system      replicaset.apps/kubernetes-dashboard-6948bdb78   1         1         1         2d
kube-system      replicaset.apps/tiller-deploy-56c4cf647b         1         1         1         2d
kube-system      replicaset.apps/tiller-deploy-64c9d747bd         0         0         0         2d
metallb-system   replicaset.apps/controller-9c57dbd4              1         1         1         2d

从CoreDNS窗格中,我似乎无法对外界进行查找,这似乎很奇怪:

root on server1 at 11:45:48 AM in /internal/gitlab
λ k exec -it coredns-78fcdf6894-2t8tv /bin/sh -n kube-system
/ # cat /etc/resolv.conf
nameserver 192.168.1.254
nameserver 2600:1700:c540:64c0::1
search attlocal.net domain
/ # host gitlab
;; connection timed out; no servers could be reached
/ # host google.com
;; connection timed out; no servers could be reached

对我来说,这意味着CoreDNS pod看不到它的上游名称服务器,即主机网络的IP 192.168.1.254。 我在正确的轨道上吗?

但是,更奇怪的是,在该主节点上运行的Pod可以很好地到达该IP地址:

λ kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
If you don't see a command prompt, try pressing enter.
dnstools# ping 192.168.1.254
PING 192.168.1.254 (192.168.1.254): 56 data bytes
64 bytes from 192.168.1.254: seq=0 ttl=63 time=1.102 ms

您可以尝试dig吗?

dig google.com @192.168.1.254

通常,具有有效ipv6配置的系统通常会先尝试使用该ipv6解析器进行解析。 如果失败,则这些系统将其称为失败。 首先看看dig命令是否可行,我将查看系统是否配置了双栈ipv4 ipv6。

再次感谢@mauilion ,今天花了很多时间帮助我诊断此问题!

我的解决方案(尽管目前非常糟糕)只是在主机操作系统上禁用firewalld服务:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

请记住该命令的实际作用。 这样做自担风险。

我遇到了同样的问题,即通过kubeadm将kubernetes 1.11.2和法兰绒0.10.0部署到CentOS 7虚拟机,并且将kube-proxy配置为使用iptables。 我注意到的是,在初始部署之后,我没有Pod到Pod或Pod不能进行服务通信。 通过查看iptables上的FORWARD链,kube-proxy建立了KUBE-FORWARD链作为第一条规则,该规则应在检查后处理我上面描述的所有流量。 Flannel在CentOS 7 FORWARD链中默认的DROP和REJECT规则之后附加了两个规则。 我注意到,当我删除REJECT规则时,Flannel添加的规则将处理流量,并且我的Pod可以与其他Pod和服务ip进行通信。

由于kube-proxy监视KUBE-FORWARD更改并保持更改不变,因此我在KUBE-FORWARD规则之后添加了两个规则,该规则增加了ctstate。 添加这些规则后,内部流量将按我的预期进行处理。

rules

请检查/var/lib/kubelet/config.yamlclusterDNS变量。 对于我们的配置,它被(错误地)设置为10.96.0.10而应该是10.244.240.10 (这就是我们引导集群的内容)。 更改此设置并重新启动kubelet,可以为我们解决此问题。 您的里程可能会有所不同。

@pkeuter ,10.244.0.0/16是法兰绒的默认_pod_ cidr。 如果您的情况如此,那么10.244.240.10将是一个Pod IP,您不应将其用作cluster-dns ip设置(例如:它可能会更改,没有负载平衡)。

它不是:
image

我们使用--pod-network-cidr=10.244.0.0/16 --service-cidr=10.244.240.0/20引导集群,但是正如我现在看到的那样,存在一些重叠,无论如何我都应该更改:-)所以,谢谢@chrisohaver!

请检查/var/lib/kubelet/config.yamlclusterDNS变量。 对于我们的配置,它被(错误地)设置为10.96.0.10而应该是10.244.240.10 (这就是我们引导集群的内容)。 更改此设置并重新启动kubelet,可以为我们解决此问题。 您的里程可能会有所不同。

谢谢您-它帮助我追踪了为什么我的内部DNS请求无法解析的原因。

作为参考,当我使用--service-cidr = 192.168.0.0 / 16初始化kubeadm时,我必须将clusterDNS值设置为192.168.0.10,而我的kube-dns服务将其作为其外部IP。

还要注意的是,仅重新启动kubelet是不够的-我必须重新启动Pod,因此/etc/resolv.conf已更新。 已完成的一项请求正在按预期解决。

此后,解决了有关coreDNS的许多合并问题。 鉴于问题过多,我将结束这一问题。

如果在1.12+上有特定的repro,请随时打开,我们将尽快解决。

请检查/var/lib/kubelet/config.yamlclusterDNS变量。 对于我们的配置,它被(错误地)设置为10.96.0.10而应该是10.244.240.10 (这就是我们引导集群的内容)。 更改此设置并重新启动kubelet,可以为我们解决此问题。 您的里程可能会有所不同。

太好了,我使用calico应该设置哪个clusterDNS地址?

我做了同样的事情,但是面对同样的错误,我的coredns pods没有开始给出错误状态

我更改了ClusterDNS,但仍然无效@justlooks

+1在CentOS 7和kubeadm 1.11中面临相同的问题

@timothysc

添加iptables -p FORWARD ACCEPT解决了该问题

+1在CentOS 7和kubeadm 1.12中面临相同的问题

找到了解决问题的办法。
当核心dns守护程序控制器达到cpu限制时,删除了资源限制。 这使它重新启动。

也许是法兰绒问题,在我的情况下,流浪者具有mutil网络接口,因此在部署法兰绒时必须指定该接口: - --iface=eth1 ,否则将发生相同的dns问题...

https://github.com/kubernetes/kubernetes/issues/39701

vim https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml修改如下:

......
containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.11.0-amd64
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth1
......

感谢@pkeuter ,它解决了这个问题,我不得不删除coredns pod并让他们重新创建它。

此页面是否有帮助?
0 / 5 - 0 等级