如何在泊坞窗群禁用覆盖网络外部访问
问题描述:
我试图建立一个具有以下服务群:如何在泊坞窗群禁用覆盖网络外部访问
- nginx的反向代理(主要是处理虚拟主机和SSL,尽管这不在nginx.conf中)。
- golang web应用程序。
- redis用于缓存。
- postgresql存储。
这导致类似于码头工人,撰写文件:我使用
version: '3'
services:
proxy:
image: nginx:1.13.5-alpine
ports:
- "80:80"
deploy:
placement:
constraints: [node.role == manager]
depends_on:
- api
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- webnet
api:
image: user/webapp:latest
deploy:
replicas: 4
ports:
- "8000:8000"
depends_on:
- postgres
- redis
networks:
- webnet
postgres:
image: postgres:9.6.5-alpine
ports:
- "5432:5432"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
redis:
image: redis:4.0.2-alpine
ports:
- "6379:6379"
deploy:
placement:
constraints: [node.role == manager]
command: redis-server --appendonly yes
networks:
- webnet
networks:
webnet:
nginx的配置文件是:
upstream api {
server api:8000;
}
server {
listen 80;
location/{
proxy_pass http://api;
}
}
这是所有工作。我可以使用curl和nginx服务代理从另一台机器连接到相应的webapp服务。
问题是,我也可以连接到来自外部机器的redis,api和postgres服务。
我想要的只是使外部接口可访问的代理服务。
我想确保redis,api和postgres服务只能通过swarm访问。 (或者,只能在主机节点的本地网络*问,在这种情况下,主机是CentOS 7设置为swarm管理器)。
我试图创建一个名为backend的覆盖网络,将internal
设置为true
,而不是使用webnet。事情是这样的:
docker network create -d overlay --internal backend
的backend
网络,然后在泊坞窗,compose.yml文件,而不是webnet对Redis的,Postgres的和API服务使用。这似乎没有工作。所有服务在外部IP上仍然可用。
我可以解决此问题是:
- 阻断我不想暴露服务的端口。
- 完成上述操作,并在主机上运行nginx作为代理(而不是容器)。
虽然上面的工作,我真的更喜欢所有这些逻辑在docker-compose级别执行,而不是依靠防火墙或外部进程。
答
如果您不希望外部访问端口,则不需要发布这些端口。容器始终可以通过普通的码头网络将容器与容器对话,而无需公布端口。
version: '3'
services:
proxy:
image: nginx:1.13.5-alpine
ports:
- "80:80"
deploy:
placement:
constraints: [node.role == manager]
depends_on:
- api
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- webnet
api:
image: user/webapp:latest
deploy:
replicas: 4
depends_on:
- postgres
- redis
networks:
- webnet
postgres:
image: postgres:9.6.5-alpine
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
redis:
image: redis:4.0.2-alpine
deploy:
placement:
constraints: [node.role == manager]
command: redis-server --appendonly yes
networks:
- webnet
networks:
webnet: