AWS 中的 Docker - 多个弹性网络接口

AWS 中的 Docker - 多个弹性网络接口

我有一个运行 Web 服务器的 Docker 容器,它正在监听端口 80 (jenkins/jenkins:lts)

我在主机上有 2 个接口,一个专用于容器(一旦启用,它将被锁定,仅允许 HTTP/HTTPS

这是实例上的 NIC 配置(这是 AWS,因此它们是弹性网络接口):

  • 网关:10.10.20.1
  • eth0 ip 10.10.20.200
  • eth1 ip 10.10.20.111

路由配置,因为这是非对称路由:

  • ip route 添加默认通过 10.10.20.1 dev eth0 tab 1
  • ip route 通过 10.10.20.1 dev eth1 tab 2 添加默认
  • ip 规则从 10.10.20.111/32 选项卡 2 添加优先级 500
  • ip 规则从 10.10.20.200/32 选项卡 1 添加优先级 600

以下是设置上述路由规则后的一些输出:

root@docker01:/home/ubuntu#ip route show tab 1 
default via 10.10.20.1 dev eth0 

root@docker01:/home/ubuntu# ip route show tab 2 
default via 10.10.20.1 dev eth1 

root@docker01:/home/ubuntu# ip rule 
0:  from all lookup local 
500:    from 10.10.20.111 lookup 2 
600:    from 10.10.20.200 lookup 1 
32766:  from all lookup main 
32767:  from all lookup default

Docker 容器正在监听 0.0.0.0:80

尝试访问时,结果如下:

  • http://10.10.20.200— 工作正常(加载 Jenkins 界面)
  • http://10.10.20.111— 不起作用
  • ping 10.10.20.200 — 成功
  • ping 10.10.20.111 — 成功
  • ssh 10.10.20.200 — 有效
  • ssh 10.10.20.111 — 有效

由于 ping 和 ssh 可以工作,我感觉这与 docker 有特别的关系。

以下是端口的“docker ps”输出:

0.0.0.0:443->443/tcp, 0.0.0.0:50000->50000/tcp, 0.0.0.0:80->8080/tcp

我已经检查过的内容:

  • 防火墙/安全组 — 两个 ENI 都允许端口 80 和 ICMP,并且所有内容都允许不受限制的出站。除了 docker 自动创建的规则外,没有其他 Iptables 规则
  • 使用明确的监听 IP 运行容器(例如:-p 10.10.20.111:80:80)虽然没有什么区别,但是它显然破坏了通过其他地址访问它的能力。
  • netstat 显示端口 80 开放并在全球范围内监听

相关内容