Docker Swarm:如何检查入口 - 端点容器



当我检查入口时,我会获取有关容器的信息:

 $docker inspect ingress
"Containers": {
            "1234567890": {
                "Name": "gateway.1.qwertyuiop",
                "EndpointID": "12345678990",
                "MacAddress": "00:11:22:33:44:55",
                "IPv4Address": "10.255.0.11/16",
                "IPv6Address": ""
            },
            "ingress-sbox": {
                "Name": "ingress-endpoint",
                "EndpointID": "1234567890",
                "MacAddress": "00:11:22:33:44:55",
                "IPv4Address": "10.255.0.3/16",
                "IPv6Address": ""
            }
        },

然后我可以检查第一个容器,但是检查ingress-endpoint返回什么都没有返回

$ docker inspect ingress-endpoint
[]

我要找到的是群节点中入口 - 端点的本地IP。

不确定为什么需要那个,但是如果您正在寻找将传入的数据包路由到达的位置,则可以查看iptables。

iptables -n -t nat -L DOCKER-INGRESS

在我的设置(其中一项服务发布端口80)上,我将遵循输出:

Chain DOCKER-INGRESS (2 references)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.18.0.2:80
RETURN     all  --  0.0.0.0/0            0.0.0.0/0  

所以172.18.0.2是入口容器的IP地址

请注意,此ingress-sbox容器是为您创建的两个网络的一部分:

  • 入口
  • docker_gwbridge

这是Linux网络名称空间的所有一部分,如此非常好的文章所述:https://neuvector.com/network-security/docker-swarm-container-networking/,我建议阅读。

# cd /var/run/
# ln -s docker/netns .
# ip netns exec ingress_sbox ip addr

这给出(在我的系统上):

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:ff:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.255.0.2/16 brd 10.255.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.255.0.4/32 brd 10.255.0.4 scope global eth0
       valid_lft forever preferred_lft forever
10: eth1@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth1
       valid_lft forever preferred_lft forever

您还可以从这些网络名称空间内运行iptables命令,以尝试关注数据包 magally 路由...

作为运行docker inspect ingress-endpoint给出[]的输出,这很可能意味着这种端点是一个过时的容器,它仍然挂接ingress网络。您可能需要断开网络,卸下此类容器,然后通过执行

重新连接群集群

docker network disconnect ingress --force ingress-endpoint

docker network rm ingess

最新更新