kubernetes的service的cluster-ip无法访问


刚初步接触Kubernetes,我通过k8s+etcd+flanneld搭建一个多节点的集群,集群里面的各个pod都是可以访问的,但是没有办法通过cluster-ip访问,我的k8s是v1.2.0版本的
# kubectl get po  --namespace=kube-system -o wide
NAME                         READY     STATUS             RESTARTS   AGE       NODE
app-test-c58ql               1/1       Running            0          3d        10.100.5.50
app-test-ld0z4               1/1       Running            0          3d        10.100.5.51
app-test-ly6it               1/1       Running            0          3d        10.100.5.54


上面的pod是可以相互访问的

# kubectl get svc  --namespace=kube-system -o wide
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE       SELECTOR
k8s-manager            10.254.148.126   <none>        80/TCP          3d        app=k8s-manager
kube-dns               10.254.101.98    <none>        53/UDP,53/TCP   1d        clusterIP=10.254.0.10,k8s-app=kube-dns
kube-ui                10.254.60.90     <none>        80/TCP          14d       k8s-app=kube-ui
kubernetes-dashboard   10.254.225.234   <none>        80/TCP          17d       k8s-app=kubernetes-dashboard

但是上面的svc没有办法访问,我通过curl -sI 10.254.148.126直接超时了,但是我通过网页是可以访问k8s-manager这个应用的,所有我有点不明白这个cluster-ip是要怎么配置才能访问
已邀请:

ɡōōd洋

赞同来自: maxwell92


cluster ip本来就不可以访问,这是虚拟IP,

ns208

赞同来自:


我的也访问不了,不知道为什么,只能映射成node端口才能访问。

zhuyanyan

赞同来自:


service的cluster-ip是k8s系统中的虚拟ip地址,只能在内部访问。
如果需要在外部访问的话,可以通过NodePort或者LoadBalancer的方式,具体可以百度一下。

刘兴旺

赞同来自:


直接使用ifconfig eth0 clusterIP/24 这样的方式将IP指定到集群内任意主机即可实现外部访问。
前提是你的集群IP要是外部能访问的网段(只要要有路由指向这些节点)

silenceshell - ieevee.com

赞同来自:


service 的 clusterIP,这个所谓的 虚地址, 其实是若干条iptables规则:
-A KUBE-SERVICES -d 10.11.97.177/32 -p tcp -m comment --comment "default/my-nginx: cluster IP" -m tcp --dport 80 -j KUBE-SVC-BEPXDJBUHFCSYIC3

-A KUBE-SVC-BEPXDJBUHFCSYIC3 -m comment --comment "default/my-nginx:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-U4UWLP4OR3LOJBXU
-A KUBE-SVC-BEPXDJBUHFCSYIC3 -m comment --comment "default/my-nginx:" -j KUBE-SEP-QHRWSLKOO5YUPI7O

-A KUBE-SEP-U4UWLP4OR3LOJBXU -s 10.244.1.10/32 -m comment --comment "default/my-nginx:" -j KUBE-MARK-MASQ
-A KUBE-SEP-U4UWLP4OR3LOJBXU -p tcp -m comment --comment "default/my-nginx:" -m tcp -j DNAT --to-destination 10.244.1.10:80

-A KUBE-SEP-QHRWSLKOO5YUPI7O -s 10.244.2.10/32 -m comment --comment "default/my-nginx:" -j KUBE-MARK-MASQ
-A KUBE-SEP-QHRWSLKOO5YUPI7O -p tcp -m comment --comment "default/my-nginx:" -m tcp -j DNAT --to-destination 10.244.2.10:80


通过上面这条规则,你用浏览器访问这个clusterIP:8080的时候,通过这些iptables规则,转到了容器中实际的server。

由于你没有设置过针对clusterIP的ICMP的iptables规则,所以ping该clusterIP也就不能通了。

更详细的,可以参考这篇文章
谈谈kubernets的service组件的Virtual IP

要回复问题请先登录注册