感谢您提出问题! 按下按钮之前,请先回答以下问题。
错误报告
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"
}
}
环境:
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"
}
}
uname -a
):$ 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
无论出于何种原因,您的群集上都没有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。 添加这些规则后,内部流量将按我的预期进行处理。
请检查/var/lib/kubelet/config.yaml
的clusterDNS
变量。 对于我们的配置,它被(错误地)设置为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设置(例如:它可能会更改,没有负载平衡)。
它不是:
我们使用--pod-network-cidr=10.244.0.0/16 --service-cidr=10.244.240.0/20
引导集群,但是正如我现在看到的那样,存在一些重叠,无论如何我都应该更改:-)所以,谢谢@chrisohaver!
请检查
/var/lib/kubelet/config.yaml
的clusterDNS
变量。 对于我们的配置,它被(错误地)设置为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.yaml
的clusterDNS
变量。 对于我们的配置,它被(错误地)设置为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并让他们重新创建它。
最有用的评论
请检查
/var/lib/kubelet/config.yaml
的clusterDNS
变量。 对于我们的配置,它被(错误地)设置为10.96.0.10
而应该是10.244.240.10
(这就是我们引导集群的内容)。 更改此设置并重新启动kubelet,可以为我们解决此问题。 您的里程可能会有所不同。