为kubernetes静态Pod创建服务IP的时间和地点

时间:2018-08-29 04:33:43

标签: kubernetes

我正在使用kubernetes 1.6.7集群,将3个节点作为主节点(node1,node2和node3)。

apiserver群集ip如下:

root@node1:/etc/kubernetes/manifests# kubectl get svc 
NAME                     CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes               10.233.0.1      <none>        443/TCP        14d

root@node1:/etc/kubernetes/manifests# kubectl get endpoints
kubernetes               172.16.10.11:6443,172.16.10.12:6443,172.16.10.13:6443            14d

问题是,当node2发生故障时,分pod荚无法访问10.233.0.1:443,日志如下:

[storage] 2018/08/28 06:46:34 listing all releases with filter
[storage/driver] 2018/08/28 06:46:34 list: failed to list: Get https://10.233.0.1:443/api/v1/namespaces/kube-system/configmaps?labelSelector=OWNER%3DTILLER: dial tcp 10.233.0.1:443: connect: no route to host

并且服务kubernetes仍然具有3个端点,但是我认为应该从端点列表中删除172.16.10.12。 iptables如下:

-A KUBE-SVC-LRLUS54FOYJDJ5GT -m comment --comment "default/wangxj35-nginx:nginx" -j KUBE-SEP-GGIOR777CPKVSIB7
-A KUBE-SVC-NPX46M4PTMTKRN6Y -m comment --comment "default/kubernetes:https" -m recent --rcheck --seconds 10800 --reap --name KUBE-SEP-CS4Z4M5BFAAWBFXQ --mask 255.255.255.255 --rsource -j KUBE-SEP-CS4Z4M5BFAAWBFXQ
-A KUBE-SVC-NPX46M4PTMTKRN6Y -m comment --comment "default/kubernetes:https" -m recent --rcheck --seconds 10800 --reap --name KUBE-SEP-MQZA2ZXHX6GRRY22 --mask 255.255.255.255 --rsource -j KUBE-SEP-MQZA2ZXHX6GRRY22
-A KUBE-SVC-NPX46M4PTMTKRN6Y -m comment --comment "default/kubernetes:https" -m recent --rcheck --seconds 10800 --reap --name KUBE-SEP-ZX77NMWHNJWLXYWF --mask 255.255.255.255 --rsource -j KUBE-SEP-ZX77NMWHNJWLXYWF
-A KUBE-SVC-NPX46M4PTMTKRN6Y -m comment --comment "default/kubernetes:https" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-CS4Z4M5BFAAWBFXQ
-A KUBE-SVC-NPX46M4PTMTKRN6Y -m comment --comment "default/kubernetes:https" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-MQZA2ZXHX6GRRY22
-A KUBE-SVC-NPX46M4PTMTKRN6Y -m comment --comment "default/kubernetes:https" -j KUBE-SEP-ZX77NMWHNJWLXYWF

-A KUBE-SEP-CS4Z4M5BFAAWBFXQ -p tcp -m comment --comment "default/kubernetes:https" -m recent --set --name KUBE-SEP-CS4Z4M5BFAAWBFXQ --mask 255.255.255.255 --rsource -m tcp -j DNAT --to-destination 172.16.10.11:6443
-A KUBE-SEP-MQZA2ZXHX6GRRY22 -p tcp -m comment --comment "default/kubernetes:https" -m recent --set --name KUBE-SEP-MQZA2ZXHX6GRRY22 --mask 255.255.255.255 --rsource -m tcp -j DNAT --to-destination 172.16.10.12:6443
-A KUBE-SEP-ZX77NMWHNJWLXYWF -p tcp -m comment --comment "default/kubernetes:https" -m recent --set --name KUBE-SEP-ZX77NMWHNJWLXYWF --mask 255.255.255.255 --rsource -m tcp -j DNAT --to-destination 172.16.10.13:6443

有人可以帮助我kubernetes源代码创建的静态pod服务吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

Controller.go创建kubernetes服务:

 // UpdateKubernetesService attempts to update the default Kube service. 
 func (c *Controller) UpdateKubernetesService(reconcile bool)> error { 
       // Update service & endpoint records.

此外,为解决此问题,kubernetes1.9.0添加了--endpoint-reconciler-type=lease以允许apiserver跟踪活动的apiserver,请参见issue51698,而对于低于1.9.0的发行版,您可以取消设置{ {1}}标志可让活动的apiserver抢占唯一的一个端点位置。