当我检查入口时,我会获取有关容器的信息:
$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