Azure 无法从pod内通过cidr 10.0.x.0/24与网络中的机器(k8s群集外部)通信

Azure 无法从pod内通过cidr 10.0.x.0/24与网络中的机器(k8s群集外部)通信,azure,kubernetes,acs,azure-container-service,Azure,Kubernetes,Acs,Azure Container Service,在我的网络中有两台机器,我想通过pod进行通信 IP地址如下: 10.0.1.23 - Lets call it X 13.0.1.12 - Lets call it Y 当我ssh到主节点或代理节点,然后对X或Y执行ping时,ping成功。 因此,机器是可以到达的 现在我创建了一个部署,我使用(kubectl exec-it pod_NAME-/bin/sh)登录到pod的外壳 Ping to Y是成功的。但是ping-to-X失败了 CIDR详细信息: Master Node : 1

在我的网络中有两台机器,我想通过pod进行通信

IP地址如下:

10.0.1.23 - Lets call it X

13.0.1.12  - Lets call it Y
当我ssh到主节点或代理节点,然后对X或Y执行ping时,ping成功。 因此,机器是可以到达的

现在我创建了一个部署,我使用(
kubectl exec-it pod_NAME-/bin/sh
)登录到pod的外壳

Ping to Y是成功的。但是ping-to-X失败了

CIDR详细信息:

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引擎已使用10.0.0.0/16设置服务网络的kube代理 如果这是问题所在,如何更改kube代理cidr

其他信息:

我正在使用acs引擎部署集群

ip路由的输出

默认通过10.244.1.1 dev eth0
10.244.1.0/24开发eth0 src 10.244.1.13

另一个嫌疑犯:在运行
iptables save
时,我明白了

-一个后路由-d 10.0.0.0/8-m注释--注释“kubenet:SNAT用于集群的出站流量”-m addrtype--dst型局部-j伪装

您无法ping kubernetes服务。更多信息请点击此处:。要测试连接性,您可以在一个端口上公开一个简单的web服务器,并从容器内部或外部确认使用curl。

根据您的问题,听起来好像您已经向与ACS Kubernetes群集一起部署的k8虚拟网络添加了另一个子网

事实证明,我在我们的项目中遇到了完全相同的问题。Azure容器服务为代理节点使用非常特定的路由规则。部署k8集群时,它们会在与所有集群实体相同的资源组中创建路由表资源。所以,如果你

  • 在Azure门户中打开k8路由表
  • 转到子网部分
  • +与其他VM/PaaS服务所在的子网关联

  • …这将创建k8代理在路由出站Pod集装箱流量时正在寻找的路由。

    我有完全相同的问题,在谷歌搜索了这么多之后,我找到了一个可行的解决方案:

    使用ip masq代理对目标CIDR进行伪装,以伪装该目标

    一些类似的例子:


    您的意思是您通过SSH连接到kubernetes master并能够ping
    10.0.1.22
    ?此IP是群集IP?默认情况下,我们无法从主机ping群集IP,请运行此命令检查iptables
    iptables save
    。您的意思是pod无法ping出k8s的IP地址吗?是的。Pod无法完成,但主节点或代理节点可以完成。k8s使用iptables将网络流量转发到容器,我正在检查查询,并将很快就此与您联系。我正在使用一台外部机器(k8s群集外部)。与外部世界的机器进行ping将起作用。但不是从吊舱里