1

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

ips如下:

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 的 shell 。

Ping 到 Y 成功。但是 ping 到 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-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

4

3 回答 3

1

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

使用 ip-masq-agent 屏蔽目标 CIDR 以伪装该目标

https://kubernetes.io/docs/tasks/administer-cluster/ip-masq-agent/

一些类似的例子:

http://madorn.com/kubernetes-non-masquerade-cidr.html#.XMDGI-H0nb0

于 2019-04-24T21:09:12.743 回答
1

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

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

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

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

于 2017-07-15T07:39:20.637 回答
0

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

于 2017-04-19T22:01:14.323 回答