我的网络中有两台机器,我想从pod中进行通信。
Ips如下:
10.0.1.23 - Lets call it X
13.0.1.12 - Lets call it Y
当我进入主节点或代理节点然后ping到X或Y时,ping成功。因此机器可以到达。
现在我创建一个部署,我使用(kubectl exec -it POD_NAME — /bin/sh
)登录pod的shell。
Ping到Y成功。但ping到X失败了。
CD的详细信息:
Master Node : 14.1.255.0/24
Agent Node: 14.2.0.0/16
Pod CIDR:
Agent : 10.244.1.0/24
Master: 10.244.0.0/24
我对可能出现的问题的理解:
acs-engine有kube-proxy用10.0.0.0/16设置服务网络如果这是问题,我如何更改kube-proxy cidr?
附加信息:
我正在使用acs-engine来部署集群。
ip route
的输出
default via 10.244.1.1 dev eth0
10.244.1.0/24 dev eth0 src 10.244.1.13
另一个嫌疑人:在运行iptables-save
我看到了
-A POSTROUTING ! -d 10.0.0.0/8 -m comment --comment "kubenet: SNAT for outbound traffic from cluster" -m addrtype ! --dst-type LOCAL -j MASQUERADE
根据您的问题,听起来您已经为使用ACS Kubernetes群集部署的k8虚拟网络添加了另一个子网。
事实证明,我在项目中遇到了同样的问题。 Azure容器服务为代理节点使用非常特定的路由规则。部署k8群集后,它们会在与所有群集实体相同的资源组中创建路由表资源。所以,如果你......
...这将创建路由出站Pod容器流量时k8代理正在查找的路由。
我有完全相同的问题,谷歌搜索后,我找到了一个可能的解决方案:
使用ip-masq-agent来masq目标CIDR以便MASQUERADE该目标
https://kubernetes.io/docs/tasks/administer-cluster/ip-masq-agent/
一些类似的例子:
http://madorn.com/kubernetes-non-masquerade-cidr.html#.XMDGI-H0nb0
你不能ping一个kubernetes服务。更多信息:https://github.com/kubernetes/kubernetes/issues/7996#issuecomment-100413276。要测试连接性,可以在端口上公开简单的Web服务器,并使用容器内部或外部的curl进行确认。