Google compute engine 无法从docker容器内部连接到默认网络

Google compute engine 无法从docker容器内部连接到默认网络,google-compute-engine,aerospike,Google Compute Engine,Aerospike,我试图在google compute上部署一个应用程序,但遇到了一个网络问题,该应用程序由前端(运行在使用复制控制器部署的docker容器中)和aerospike节点的后端组成 aerospike节点不是部分或容器集群,但它们位于同一项目中,并且容器集群和aerospike节点都在默认网络中运行 aerospike节点以默认配置运行 从docker容器内部,我正在尝试这样做 var client = aerospike.connect(internal-ip-of-aerospike-node,

我试图在google compute上部署一个应用程序,但遇到了一个网络问题,该应用程序由前端(运行在使用复制控制器部署的docker容器中)和aerospike节点的后端组成

aerospike节点不是部分或容器集群,但它们位于同一项目中,并且容器集群和aerospike节点都在默认网络中运行

aerospike节点以默认配置运行

从docker容器内部,我正在尝试这样做

var client = aerospike.connect(internal-ip-of-aerospike-node, 3000)

但是连接失败了,我做错了什么?

我对docker容器是如何在GCE上运行的(或者你是如何准确地运行的)有点粗略,但是IIRC建立了一个覆盖网络,以便容器可以在自己的地址空间中寻址。这通常是通过在主机和容器之间创建虚拟网络接口对来完成的。要退出覆盖网络,在主机系统上添加如下(from)的伪装规则:

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  172.17.0.0/16       !172.17.0.0/16
覆盖网络的选择应确保不会与主机网络冲突,但如果该覆盖网络与GCE内部网络重叠,则从容器到覆盖网络的连接将无法工作

我无法回答为什么它不起作用的问题,但我可以建议尝试:

  • 为aerospike节点提供一个外部地址,然后尝试连接到该节点。如果有效,则表明问题出在容器网络中
  • 启动一个无关的测试虚拟机,并尝试从连接到aerospike节点
  • GCE默认网络中是否有任何防火墙可能会造成阻碍?尝试添加显式规则以允许流量
调试这些问题的常用方法是运行创建(失败)请求流的程序,然后尝试查看每个步骤上的数据包流:

while :; do nc -w1 -n -v -z <aerospike-ip> 3000; sleep 1; done"
然后,tcpdump查看是否存在连接尝试以及数据包的外观:

  • ip链接显示和/或ip地址显示(查找接口)
  • tcpdump-n-v-c 10-i tcp端口3000
并以以下方式执行此操作:

  • 容器中(应为eth0)
  • 在docker主机上,在容器虚拟接口(veth)上
  • 在docker主机上,在主机网络接口(eth0)上
  • 在aerospike主机(eth0)上

这将有助于确定问题发生的位置,数据包转储也可能揭示问题发生的原因。

我认为问题在于kubernetes、来自另一个VM的ping或来自我自己创建的docker容器内部的ping