Dns 库伯内特斯:豆荚可以';无法解析主机名
我遇到了Kubernetes的问题,我的POD无法解析主机名(例如Dns 库伯内特斯:豆荚可以';无法解析主机名,dns,kubernetes,Dns,Kubernetes,我遇到了Kubernetes的问题,我的POD无法解析主机名(例如google.com或Kubernetes.default) 我目前在OpenStack的两个CentOS7实例上运行1个主节点和1个节点。我使用kubeadm进行部署 以下是已安装的版本: kubeadm-1.7.3-1.x86_64 kubectl-1.7.3-1.x86_64 kubelet-1.7.3-1.x86_64 kubernetes-cni-0.5.1-0.x86_64 下面概述了一些验证步骤,也许可以让您对我的
google.com
或Kubernetes.default
)
我目前在OpenStack的两个CentOS7实例上运行1个主节点和1个节点。我使用kubeadm
进行部署
以下是已安装的版本:
kubeadm-1.7.3-1.x86_64
kubectl-1.7.3-1.x86_64
kubelet-1.7.3-1.x86_64
kubernetes-cni-0.5.1-0.x86_64
下面概述了一些验证步骤,也许可以让您对我的问题有一些了解
我定义了一个busybox pod:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
restartPolicy: Always
然后创建pod:
$ kubectl create -f busybox.yaml
尝试对名称google.com
执行DNS查找:
$ kubectl exec -ti busybox -- nslookup google.com
Server: 10.96.0.10
Address 1: 10.96.0.10
nslookup: can't resolve 'google.com'
尝试对名称kubernetes执行DNS查找。默认值:
$ kubectl exec -ti busybox -- nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10
nslookup: can't resolve 'kubernetes.default'
检查我的DNS吊舱是否正在运行:
$ kubectl get pods --namespace=kube-system -l k8s-app=kube-dns
NAME READY STATUS RESTARTS AGE
kube-dns-2425271678-k1nft 3/3 Running 9 5d
检查我的DNS服务是否已启动:
$ kubectl get svc --namespace=kube-system
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns 10.96.0.10 <none> 53/UDP,53/TCP 5d
检查我的容器中/etc/resolv.conf
的内容:
$ kubectl exec -ti busybox -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns
I0817 20:54:58.445280 1 dns.go:48] version: 1.14.3-4-gee838f6
I0817 20:54:58.452551 1 server.go:70] Using configuration read from directory: /kube-dns-config with period 10s
I0817 20:54:58.452616 1 server.go:113] FLAG: --alsologtostderr="false"
I0817 20:54:58.452628 1 server.go:113] FLAG: --config-dir="/kube-dns-config"
I0817 20:54:58.452638 1 server.go:113] FLAG: --config-map=""
I0817 20:54:58.452643 1 server.go:113] FLAG: --config-map-namespace="kube-system"
I0817 20:54:58.452650 1 server.go:113] FLAG: --config-period="10s"
I0817 20:54:58.452659 1 server.go:113] FLAG: --dns-bind-address="0.0.0.0"
I0817 20:54:58.452665 1 server.go:113] FLAG: --dns-port="10053"
I0817 20:54:58.452674 1 server.go:113] FLAG: --domain="cluster.local."
I0817 20:54:58.452683 1 server.go:113] FLAG: --federations=""
I0817 20:54:58.452692 1 server.go:113] FLAG: --healthz-port="8081"
I0817 20:54:58.452698 1 server.go:113] FLAG: --initial-sync-timeout="1m0s"
I0817 20:54:58.452704 1 server.go:113] FLAG: --kube-master-url=""
I0817 20:54:58.452713 1 server.go:113] FLAG: --kubecfg-file=""
I0817 20:54:58.452718 1 server.go:113] FLAG: --log-backtrace-at=":0"
I0817 20:54:58.452727 1 server.go:113] FLAG: --log-dir=""
I0817 20:54:58.452734 1 server.go:113] FLAG: --log-flush-frequency="5s"
I0817 20:54:58.452741 1 server.go:113] FLAG: --logtostderr="true"
I0817 20:54:58.452746 1 server.go:113] FLAG: --nameservers=""
I0817 20:54:58.452752 1 server.go:113] FLAG: --stderrthreshold="2"
I0817 20:54:58.452759 1 server.go:113] FLAG: --v="2"
I0817 20:54:58.452765 1 server.go:113] FLAG: --version="false"
I0817 20:54:58.452775 1 server.go:113] FLAG: --vmodule=""
I0817 20:54:58.452856 1 server.go:176] Starting SkyDNS server (0.0.0.0:10053)
I0817 20:54:58.453680 1 server.go:198] Skydns metrics enabled (/metrics:10055)
I0817 20:54:58.453692 1 dns.go:147] Starting endpointsController
I0817 20:54:58.453699 1 dns.go:150] Starting serviceController
I0817 20:54:58.453841 1 logs.go:41] skydns: ready for queries on cluster.local. for tcp://0.0.0.0:10053 [rcache 0]
I0817 20:54:58.453852 1 logs.go:41] skydns: ready for queries on cluster.local. for udp://0.0.0.0:10053 [rcache 0]
I0817 20:54:58.964468 1 dns.go:171] Initialized services and endpoints from apiserver
I0817 20:54:58.964523 1 server.go:129] Setting up Healthz Handler (/readiness)
I0817 20:54:58.964536 1 server.go:134] Setting up cache handler (/cache)
I0817 20:54:58.964545 1 server.go:120] Status HTTP port 8081
$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c sidecar
ERROR: logging before flag.Parse: I0817 20:55:04.488391 1 main.go:48] Version v1.14.3-4-gee838f6
ERROR: logging before flag.Parse: I0817 20:55:04.488612 1 server.go:45] Starting server (options {DnsMasqPort:53 DnsMasqAddr:127.0.0.1 DnsMasqPollIntervalMs:5000 Probes:[{Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1} {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}] PrometheusAddr:0.0.0.0 PrometheusPort:10054 PrometheusPath:/metrics PrometheusNamespace:kubedns})
ERROR: logging before flag.Parse: I0817 20:55:04.488667 1 dnsprobe.go:75] Starting dnsProbe {Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
ERROR: logging before flag.Parse: I0817 20:55:04.488766 1 dnsprobe.go:75] Starting dnsProbe {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
如果我理解正确,Kubernetes文档说明我的POD应该继承节点(或主节点?)的DNS配置。但是,即使只有一行(nameserver 10.92.128.40
),我在旋转吊舱时也会收到以下警告:
Search Line limits were exceeded, some dns names have been omitted, the applied search line is: default.svc.cluster.local svc.cluster.local cluster.local mydomain.net anotherdomain.net yetanotherdomain.net
我知道存在一个已知问题,即在/etc/resolv.conf
中只能列出这么多项目。但是,我的容器中的上述搜索行和名称服务器将从何处生成
最后,这里是来自kube dns
容器的日志:
$ kubectl exec -ti busybox -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns
I0817 20:54:58.445280 1 dns.go:48] version: 1.14.3-4-gee838f6
I0817 20:54:58.452551 1 server.go:70] Using configuration read from directory: /kube-dns-config with period 10s
I0817 20:54:58.452616 1 server.go:113] FLAG: --alsologtostderr="false"
I0817 20:54:58.452628 1 server.go:113] FLAG: --config-dir="/kube-dns-config"
I0817 20:54:58.452638 1 server.go:113] FLAG: --config-map=""
I0817 20:54:58.452643 1 server.go:113] FLAG: --config-map-namespace="kube-system"
I0817 20:54:58.452650 1 server.go:113] FLAG: --config-period="10s"
I0817 20:54:58.452659 1 server.go:113] FLAG: --dns-bind-address="0.0.0.0"
I0817 20:54:58.452665 1 server.go:113] FLAG: --dns-port="10053"
I0817 20:54:58.452674 1 server.go:113] FLAG: --domain="cluster.local."
I0817 20:54:58.452683 1 server.go:113] FLAG: --federations=""
I0817 20:54:58.452692 1 server.go:113] FLAG: --healthz-port="8081"
I0817 20:54:58.452698 1 server.go:113] FLAG: --initial-sync-timeout="1m0s"
I0817 20:54:58.452704 1 server.go:113] FLAG: --kube-master-url=""
I0817 20:54:58.452713 1 server.go:113] FLAG: --kubecfg-file=""
I0817 20:54:58.452718 1 server.go:113] FLAG: --log-backtrace-at=":0"
I0817 20:54:58.452727 1 server.go:113] FLAG: --log-dir=""
I0817 20:54:58.452734 1 server.go:113] FLAG: --log-flush-frequency="5s"
I0817 20:54:58.452741 1 server.go:113] FLAG: --logtostderr="true"
I0817 20:54:58.452746 1 server.go:113] FLAG: --nameservers=""
I0817 20:54:58.452752 1 server.go:113] FLAG: --stderrthreshold="2"
I0817 20:54:58.452759 1 server.go:113] FLAG: --v="2"
I0817 20:54:58.452765 1 server.go:113] FLAG: --version="false"
I0817 20:54:58.452775 1 server.go:113] FLAG: --vmodule=""
I0817 20:54:58.452856 1 server.go:176] Starting SkyDNS server (0.0.0.0:10053)
I0817 20:54:58.453680 1 server.go:198] Skydns metrics enabled (/metrics:10055)
I0817 20:54:58.453692 1 dns.go:147] Starting endpointsController
I0817 20:54:58.453699 1 dns.go:150] Starting serviceController
I0817 20:54:58.453841 1 logs.go:41] skydns: ready for queries on cluster.local. for tcp://0.0.0.0:10053 [rcache 0]
I0817 20:54:58.453852 1 logs.go:41] skydns: ready for queries on cluster.local. for udp://0.0.0.0:10053 [rcache 0]
I0817 20:54:58.964468 1 dns.go:171] Initialized services and endpoints from apiserver
I0817 20:54:58.964523 1 server.go:129] Setting up Healthz Handler (/readiness)
I0817 20:54:58.964536 1 server.go:134] Setting up cache handler (/cache)
I0817 20:54:58.964545 1 server.go:120] Status HTTP port 8081
$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c sidecar
ERROR: logging before flag.Parse: I0817 20:55:04.488391 1 main.go:48] Version v1.14.3-4-gee838f6
ERROR: logging before flag.Parse: I0817 20:55:04.488612 1 server.go:45] Starting server (options {DnsMasqPort:53 DnsMasqAddr:127.0.0.1 DnsMasqPollIntervalMs:5000 Probes:[{Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1} {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}] PrometheusAddr:0.0.0.0 PrometheusPort:10054 PrometheusPath:/metrics PrometheusNamespace:kubedns})
ERROR: logging before flag.Parse: I0817 20:55:04.488667 1 dnsprobe.go:75] Starting dnsProbe {Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
ERROR: logging before flag.Parse: I0817 20:55:04.488766 1 dnsprobe.go:75] Starting dnsProbe {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
dnsmasq
容器。不管它发现了多个名称服务器,而不仅仅是我在resolv.conf
中提到的名称服务器,因为我在它们原来的名称服务器中找到了更多的名称服务器。我试图简单地通过删除附加项来实现:
$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq
I0817 20:55:03.295826 1 main.go:76] opts: {{/usr/sbin/dnsmasq [-k --cache-size=1000 --log-facility=- --server=/cluster.local/127.0.0.1#10053 --server=/in-addr.arpa/127.0.0.1#10053 --server=/ip6.arpa/127.0.0.1#10053] true} /etc/k8s/dns/dnsmasq-nanny 10000000000}
I0817 20:55:03.298134 1 nanny.go:86] Starting dnsmasq [-k --cache-size=1000 --log-facility=- --server=/cluster.local/127.0.0.1#10053 --server=/in-addr.arpa/127.0.0.1#10053 --server=/ip6.arpa/127.0.0.1#10053]
I0817 20:55:03.731577 1 nanny.go:111]
W0817 20:55:03.731609 1 nanny.go:112] Got EOF from stdout
I0817 20:55:03.731642 1 nanny.go:108] dnsmasq[9]: started, version 2.76 cachesize 1000
I0817 20:55:03.731656 1 nanny.go:108] dnsmasq[9]: compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth no-DNSSEC loop-detect inotify
I0817 20:55:03.731681 1 nanny.go:108] dnsmasq[9]: using nameserver 127.0.0.1#10053 for domain ip6.arpa
I0817 20:55:03.731689 1 nanny.go:108] dnsmasq[9]: using nameserver 127.0.0.1#10053 for domain in-addr.arpa
I0817 20:55:03.731695 1 nanny.go:108] dnsmasq[9]: using nameserver 127.0.0.1#10053 for domain cluster.local
I0817 20:55:03.731704 1 nanny.go:108] dnsmasq[9]: reading /etc/resolv.conf
I0817 20:55:03.731710 1 nanny.go:108] dnsmasq[9]: using nameserver 127.0.0.1#10053 for domain ip6.arpa
I0817 20:55:03.731717 1 nanny.go:108] dnsmasq[9]: using nameserver 127.0.0.1#10053 for domain in-addr.arpa
I0817 20:55:03.731723 1 nanny.go:108] dnsmasq[9]: using nameserver 127.0.0.1#10053 for domain cluster.local
I0817 20:55:03.731729 1 nanny.go:108] dnsmasq[9]: using nameserver 10.92.128.40#53
I0817 20:55:03.731735 1 nanny.go:108] dnsmasq[9]: using nameserver 10.92.128.41#53
I0817 20:55:03.731741 1 nanny.go:108] dnsmasq[9]: using nameserver 10.95.207.66#53
I0817 20:55:03.731747 1 nanny.go:108] dnsmasq[9]: read /etc/hosts - 7 addresses
和侧车
集装箱:
$ kubectl exec -ti busybox -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns
I0817 20:54:58.445280 1 dns.go:48] version: 1.14.3-4-gee838f6
I0817 20:54:58.452551 1 server.go:70] Using configuration read from directory: /kube-dns-config with period 10s
I0817 20:54:58.452616 1 server.go:113] FLAG: --alsologtostderr="false"
I0817 20:54:58.452628 1 server.go:113] FLAG: --config-dir="/kube-dns-config"
I0817 20:54:58.452638 1 server.go:113] FLAG: --config-map=""
I0817 20:54:58.452643 1 server.go:113] FLAG: --config-map-namespace="kube-system"
I0817 20:54:58.452650 1 server.go:113] FLAG: --config-period="10s"
I0817 20:54:58.452659 1 server.go:113] FLAG: --dns-bind-address="0.0.0.0"
I0817 20:54:58.452665 1 server.go:113] FLAG: --dns-port="10053"
I0817 20:54:58.452674 1 server.go:113] FLAG: --domain="cluster.local."
I0817 20:54:58.452683 1 server.go:113] FLAG: --federations=""
I0817 20:54:58.452692 1 server.go:113] FLAG: --healthz-port="8081"
I0817 20:54:58.452698 1 server.go:113] FLAG: --initial-sync-timeout="1m0s"
I0817 20:54:58.452704 1 server.go:113] FLAG: --kube-master-url=""
I0817 20:54:58.452713 1 server.go:113] FLAG: --kubecfg-file=""
I0817 20:54:58.452718 1 server.go:113] FLAG: --log-backtrace-at=":0"
I0817 20:54:58.452727 1 server.go:113] FLAG: --log-dir=""
I0817 20:54:58.452734 1 server.go:113] FLAG: --log-flush-frequency="5s"
I0817 20:54:58.452741 1 server.go:113] FLAG: --logtostderr="true"
I0817 20:54:58.452746 1 server.go:113] FLAG: --nameservers=""
I0817 20:54:58.452752 1 server.go:113] FLAG: --stderrthreshold="2"
I0817 20:54:58.452759 1 server.go:113] FLAG: --v="2"
I0817 20:54:58.452765 1 server.go:113] FLAG: --version="false"
I0817 20:54:58.452775 1 server.go:113] FLAG: --vmodule=""
I0817 20:54:58.452856 1 server.go:176] Starting SkyDNS server (0.0.0.0:10053)
I0817 20:54:58.453680 1 server.go:198] Skydns metrics enabled (/metrics:10055)
I0817 20:54:58.453692 1 dns.go:147] Starting endpointsController
I0817 20:54:58.453699 1 dns.go:150] Starting serviceController
I0817 20:54:58.453841 1 logs.go:41] skydns: ready for queries on cluster.local. for tcp://0.0.0.0:10053 [rcache 0]
I0817 20:54:58.453852 1 logs.go:41] skydns: ready for queries on cluster.local. for udp://0.0.0.0:10053 [rcache 0]
I0817 20:54:58.964468 1 dns.go:171] Initialized services and endpoints from apiserver
I0817 20:54:58.964523 1 server.go:129] Setting up Healthz Handler (/readiness)
I0817 20:54:58.964536 1 server.go:134] Setting up cache handler (/cache)
I0817 20:54:58.964545 1 server.go:120] Status HTTP port 8081
$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c sidecar
ERROR: logging before flag.Parse: I0817 20:55:04.488391 1 main.go:48] Version v1.14.3-4-gee838f6
ERROR: logging before flag.Parse: I0817 20:55:04.488612 1 server.go:45] Starting server (options {DnsMasqPort:53 DnsMasqAddr:127.0.0.1 DnsMasqPollIntervalMs:5000 Probes:[{Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1} {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}] PrometheusAddr:0.0.0.0 PrometheusPort:10054 PrometheusPath:/metrics PrometheusNamespace:kubedns})
ERROR: logging before flag.Parse: I0817 20:55:04.488667 1 dnsprobe.go:75] Starting dnsProbe {Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
ERROR: logging before flag.Parse: I0817 20:55:04.488766 1 dnsprobe.go:75] Starting dnsProbe {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
我一直在阅读提供的文档。任何方向、见解或尝试的东西都将不胜感激 我想到了一些想法:
- 可能kube代理服务工作不正常,因此无法访问kube dns服务。你能检查一下它是否工作吗
- 您没有正确安装网络覆盖,例如Calico:。您安装了它并且它正在工作吗
遇到了同样的问题。我遵循这个文档,检查了与DNS相关的POD、服务、端点,所有这些都在运行,没有错误消息。最后,我发现我的印花布服务已经失效。在我启动calico服务并等待了几分钟后,它开始工作。如果您看到以下错误,请检查coredns pods日志:
# kubectl logs --namespace=kube-system coredns-XXX
...
[ERROR] plugin/errors ... HINFO: read udp ... read: no route to host
然后确保主机上已启用firewalld伪装:
# firewall-cmd --list-all
...
masquerade: yes
Enable if it's "no":
# firewall-cmd --add-masquerade --permanent
# firewall-cmd --reload
*在此之后,您可能需要重新启动/重新启动。我遇到了类似的问题。重新启动coredns部署为我解决了这一问题:
kubectl -n kube-system rollout restart deployment coredns
您好,kube代理正在运行:/usr/local/bin/kube proxy--kubeconfig=/var/lib/kube proxy/kubeconfig.conf--cluster cidr=10.244.0.0/16
。根据,代理正在节点上创建所需的iptables规则。奇怪的是,对服务运行curl10.111.133.184:80
有时会返回一个pod名称,其他时候我会得到“没有到主机的路由”。在进行kubeadm
设置时,我确实选择了法兰绒。你能指出如何测试它的方向吗?好的,如果我理解正确的话,Flannel提供了一个覆盖网络,这样吊舱可以跨不同的节点相互通信。Mykube-dns-2425271678-k1nft
pod的IP为10.244.0.5
。这是一个由Flannel处理的IP(在/run/Flannel/subnet.env
中定义)。此DNS吊舱位于节点kubemaster
上。现在,我创建的pod位于节点kubenode01
上。我可以从kubemaster
中ping10.244.0.5
,但不能从kubenode01
中ping。我认为这可能是法兰绒的问题,对吗?我的耳朵后面湿透了,所以为愚蠢的问题道歉。再补充一点关于测试代理。。我可以创建两个运行nginx的pod,将它们添加到一个服务中,该服务的端口为80',节点端口为31746
。然后,我可以使用该节点的外部IP地址和上述端口从外部访问该服务。这是否证明kube代理至少可以正常工作,因为它似乎成功地将流量转发到pods?我几乎100%确定这个问题与覆盖有关。运行kubectl exec--namespace kube系统-it kube-dns-2425271678-k1nft--container kubedns--ping google.com
效果很好,因为kube dns在主机上运行。它也适用于在主机上运行的任何其他pod,如kube flannel、kube proxy等。。但是,在worker上创建的任何pod都无法解析DNS,这可能是因为它们无法访问DNS服务,因为Flannel出现了一些问题。我将开始研究如何缩小范围,但任何建议都将不胜感激!因此,我在我的主节点和节点上重新启动了docker和kubelet服务,您知道什么。。一切都开始起作用了。。我不知道我做了什么,也不知道为什么它不起作用,但全面刷新这两项服务不知怎么解决了问题。我希望我一开始就这么做了!谢谢你帮了我一把。我肯定要进一步了解Kubernetes的工作原理:)k8s运行的节点的名称解析了吗?应该重新启动什么?@cryptoparty restart network likesystemctl restart network
coredns正在运行,我认为它一定很好,但重新启动它很有魅力,谢谢。我的coredns运行良好,没有错误,但是这个命令很好地解决了我的问题。我非常感谢,我决定登录并按下向上投票。这解决了我的问题。谢谢你的命令!这可以解决我的问题。不知道为什么。