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是要怎么配置才能访问
7 个回复
ɡōōd洋
赞同来自: maxwell92
cluster ip本来就不可以访问,这是虚拟IP,
ns208
赞同来自:
我的也访问不了,不知道为什么,只能映射成node端口才能访问。
zhuyanyan
赞同来自:
service的cluster-ip是k8s系统中的虚拟ip地址,只能在内部访问。
如果需要在外部访问的话,可以通过NodePort或者LoadBalancer的方式,具体可以百度一下。
刘兴旺
赞同来自:
直接使用ifconfig eth0 clusterIP/24 这样的方式将IP指定到集群内任意主机即可实现外部访问。
前提是你的集群IP要是外部能访问的网段(只要要有路由指向这些节点)
liyingke112
赞同来自:
请看这个http://blog.csdn.net/liyingke1 ... 22267
silenceshell - ieevee.com
赞同来自:
service 的 clusterIP,这个所谓的 虚地址, 其实是若干条iptables规则:
&amp;lt;pre&amp;gt;
-A KUBE-SERVICES -d 10.11.97.177/32 -p tcp -m comment --comment &amp;amp;amp;amp;amp;quot;default/my-nginx: cluster IP&amp;amp;amp;amp;amp;quot; -m tcp --dport 80 -j KUBE-SVC-BEPXDJBUHFCSYIC3
-A KUBE-SVC-BEPXDJBUHFCSYIC3 -m comment --comment &amp;amp;amp;amp;amp;quot;default/my-nginx:&amp;amp;amp;amp;amp;quot; -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-U4UWLP4OR3LOJBXU
-A KUBE-SVC-BEPXDJBUHFCSYIC3 -m comment --comment &amp;amp;amp;amp;amp;quot;default/my-nginx:&amp;amp;amp;amp;amp;quot; -j KUBE-SEP-QHRWSLKOO5YUPI7O
-A KUBE-SEP-U4UWLP4OR3LOJBXU -s 10.244.1.10/32 -m comment --comment &amp;amp;amp;amp;amp;quot;default/my-nginx:&amp;amp;amp;amp;amp;quot; -j KUBE-MARK-MASQ
-A KUBE-SEP-U4UWLP4OR3LOJBXU -p tcp -m comment --comment &amp;amp;amp;amp;amp;quot;default/my-nginx:&amp;amp;amp;amp;amp;quot; -m tcp -j DNAT --to-destination 10.244.1.10:80
-A KUBE-SEP-QHRWSLKOO5YUPI7O -s 10.244.2.10/32 -m comment --comment &amp;amp;amp;amp;amp;quot;default/my-nginx:&amp;amp;amp;amp;amp;quot; -j KUBE-MARK-MASQ
-A KUBE-SEP-QHRWSLKOO5YUPI7O -p tcp -m comment --comment &amp;amp;amp;amp;amp;quot;default/my-nginx:&amp;amp;amp;amp;amp;quot; -m tcp -j DNAT --to-destination 10.244.2.10:80
&amp;lt;/pre&amp;gt;
通过上面这条规则,你用浏览器访问这个clusterIP:8080的时候,通过这些iptables规则,转到了容器中实际的server。
由于你没有设置过针对clusterIP的ICMP的iptables规则,所以ping该clusterIP也就不能通了。
更详细的,可以参考这篇文章
(https://ieevee.com/tech/2017/01/20/k8s-service.html)
x7lovelin
赞同来自:
兄弟,你解决了么 ,我也有这问题 集群内只有其中一台机器可以访问 clusterip 其他节点访问不了。。。