无法通过pod中的cidr 10.0.x.0 / 24与网络中的计算机(k8s群集外)进行通信

问题描述 投票:1回答:3

我的网络中有两台机器,我想从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

azure kubernetes acs azure-container-service
3个回答
1
投票

根据您的问题,听起来您已经为使用ACS Kubernetes群集部署的k8虚拟网络添加了另一个子网。

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

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

...这将创建路由出站Pod容器流量时k8代理正在查找的路由。


1
投票

我有完全相同的问题,谷歌搜索后,我找到了一个可能的解决方案:

使用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


0
投票

你不能ping一个kubernetes服务。更多信息:https://github.com/kubernetes/kubernetes/issues/7996#issuecomment-100413276。要测试连接性,可以在端口上公开简单的Web服务器,并使用容器内部或外部的curl进行确认。

© www.soinside.com 2019 - 2024. All rights reserved.