根据这个问题的说法,容器不能同时连接到内部桥和主机网络。然而,这正是我所需要的;我希望将一组容器连接到用于容器间通信的群集覆盖网络(如果需要的话,可以使用另一种解决方案,比如Weave),并连接到主机的网络,而不是NAT,以公开服务。因此,对于容器公开其服务,我知道的唯一选项是使用macvlan网络。
附带注意:在没有路由网格的情况下使用群集服务(每个主机只有一个容器/服务,对该主机的请求应该始终由该主机上的容器/服务来处理),但我的理解是,发布的端口将通过NAT。这是不可取的。
看来,通过macvlan网络公开的容器是完全公开的,不能被防火墙隔离(我读到macvlan网络不依赖于主机的网络堆栈,并且不能由主机防火墙--如果您有此源,请链接它)。可以使用最小的图像来限制攻击面,并且要非常小心地设置容器上服务的绑定地址,但这并不能取代防火墙。
因此,假设前三段不完全正确,那么在macvlan网络上安全公开容器的推荐方法是什么?
发布于 2022-07-18 14:07:48
所引用的问题涉及同时连接到桥和主机网络的码头集装箱。
但是,为了公开一个服务,您通常通过dockers入口发布服务,而不是宿主大多数网络,所以这很少是一个问题。
也就是说,以下组成片段是合法的:
services:
my-api:
image: foo
networks:
- overlay1
- bridge1
ports:
- 9090:8080因为这些碎片是非法的:
services:
my-api:
image: foo
# docker compose host mode networking.
network_mode: host
networks:
- overlay1
- bridge1
- hostent
ports:
# docker swarm can publish a port on a host. This should work
- target: 80
published: 8080
protocol: tcp
mode: host
networks:
# A different swarm compatible take on --net:host
# Also can't be mixed with ingress networking.
hostnet:
external: true
name: hosthttps://devops.stackexchange.com/questions/16007
复制相似问题