Kubernetes `kube dns`使用flannel获取错误的端点地址导致POD dns服务失败
我在Ubuntu 16.04上设置了一个3节点的kubernetes(Kubernetes `kube dns`使用flannel获取错误的端点地址导致POD dns服务失败,kubernetes,kube-dns,Kubernetes,Kube Dns,我在Ubuntu 16.04上设置了一个3节点的kubernetes(v1.9.3)集群 在安装之前,我清除了iptables规则,并使用以下命令遵循k8s documents for 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
v1.9.3
)集群
在安装之前,我清除了iptables规则,并使用以下命令遵循k8s documents for 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>
#kubectl get ep kube dns--namespace=kube system
姓名端点年龄
kube dns 172.17.0.2:53172.17.0.2:53 3m
root@master:~#kubectl描述服务kube dns-n kube系统
名称:kube dns
名称空间:kube系统
标签:k8s app=kube dns
kubernetes.io/cluster service=true
kubernetes.io/name=KubeDNS
注释:
选择器:k8s app=kube dns
类型:集群
IP:10.96.0.10
端口:dns 53/UDP
目标端口:53/UDP
终点:172.17.0.2:53
端口:dns tcp 53/tcp
目标端口:53/TCP
终点:172.17.0.2:53
会话关联:无
活动:
172.17.0.2
是docker bridge(docker0
)为kube dns
容器分配的IP地址。在进行k8s网络设置时,kube dns
应具有地址来自podSubnet
(10.244.0.0/16
)的端点
当前设置的效果是,当IP通信正常时,所有POD将不具有DNS功能
我试图删除kube-dns
pod,以查看新的kube-dns
容器可以从podSubnet
拾取端点,但它们没有
从3
kube dns
容器的启动日志中,没有任何错误消息 我想我已经找到了根本原因。先前的kubeadm重置
没有同时删除cni
和flannel.1
接口。因此,下一个kubeadm init
makeskube dns
相信在我应用法兰绒yaml之前,Kubernetes网络插件已经就位
当我在拆除kubernetes集群时检查并删除由flannel插件创建的任何虚拟NIC后,下一个kubeadm init
可以成功,不再出现此问题
同样的情况也适用于需要运行
Weave reset
以移除剩余虚拟编织NIC的编织网 您能否运行kubectl描述pod kube dns-n kube system
并向我们提供结果。您是否启用了到iptables的桥接通信?尝试sysctl net.bridge.bridge nf call iptables
查看它是否已启用。是的,description
正常。并且sysctl
设置都是根据文档完成的。