`kube-dns`得到错误的端点地址与法兰绒导致POD DNS服务失败

时间:2018-06-03 17:48:33

标签: kubernetes kube-dns

我在Ubuntu 16.04上设置了3个节点kubernetes(v1.9.3)群集。

之前的设置我清除了iptables规则并按照k8s文件为flannel用以下命令初始化集群:

# kubeadm init --apiserver-advertise-address 192.168.56.20 --pod-network-cidr=10.244.0.0/16 --kubernetes-version 1.9.3
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

上一个命令似乎成功了:

# kubectl -n kube-system -n kube-system get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-master                      1/1       Running   0          3m
kube-apiserver-master            1/1       Running   0          2m
kube-controller-manager-master   1/1       Running   0          2m
kube-dns-6f4fd4bdf-4c76v         3/3       Running   0          3m
kube-flannel-ds-wbx97            1/1       Running   0          1m
kube-proxy-x65lv                 1/1       Running   0          3m
kube-scheduler-master            1/1       Running   0          2m 

但问题是kube-dns似乎分配了错误的服务端点地址,这可以通过以下命令看到:

# kubectl get ep kube-dns --namespace=kube-system            
NAME       ENDPOINTS                     AGE
kube-dns   172.17.0.2:53,172.17.0.2:53   3m
root@master:~# kubectl describe service kube-dns -n kube-system           
Name:              kube-dns
Namespace:         kube-system
Labels:            k8s-app=kube-dns
                   kubernetes.io/cluster-service=true
                   kubernetes.io/name=KubeDNS
Annotations:       <none>
Selector:          k8s-app=kube-dns
Type:              ClusterIP
IP:                10.96.0.10
Port:              dns  53/UDP
TargetPort:        53/UDP
Endpoints:         172.17.0.2:53
Port:              dns-tcp  53/TCP
TargetPort:        53/TCP
Endpoints:         172.17.0.2:53
Session Affinity:  None
Events:            <none>

172.17.0.2是docker bridge(docker0)为kube-dns容器分配的IP地址。在使用k8s网络设置时,kube-dns的端点应具有podSubnet10.244.0.0/16)的地址。

当前设置的效果是当IP通信正常时,所有pod都没有功能DNS。

我尝试删除kube-dns pod以查看新的kube-dns容器可以从podSubnet获取端点,但他们不会。

从3 kube-dns个容器的启动日志中,没有任何错误消息。

1 个答案:

答案 0 :(得分:0)

我想我已经找到了根本原因。前一个kubeadm reset未删除cniflannel.1接口。因此,下一个kubeadm init使kube-dns认为在应用法兰绒纱线之前,Kubernetes网络插件已经到位。

在拆除kubernetes群集后检查并删除由flannel插件创建的任何虚拟NIC后,下一个kubeadm init可以成功,不再出现此问题。

同样适用于需要运行weave reset以删除剩余虚拟编织网卡的 Weave Net