防止直接调用托管在 docker 容器中的微服务的最佳方法
Best way to prevent direct calls to a microservice hosted in a docker container
我有一个简单的概念验证系统,它有 2 个 API:一个用作网关,另一个是微服务。我已经为两者创建了 docker 容器,并使用 docker 组合文件将它们 运行 一起创建。
一切正常,除了我不确定如何限制微服务被直接调用。
这是我的撰写文件:
version: '3.4'
services:
apigateway:
image: apigateway
container_name: api-gateway
build:
context: .
dockerfile: api_gateway/Dockerfile
ports:
- 7500:7500
networks:
- api-local
apiadmin:
image: apiadmin
container_name: api-admin
build:
context: .
dockerfile: api_admin/Dockerfile
ports:
- 7501:7501
networks:
- api-local
networks:
api-local:
external: true
我可以打电话给 localhost:7500/some_url,我会得到回复。我也可以调用 localhost:7501/some_url,我也会收到回复。但是,我想阻止客户端直接调用 7501 微服务。我希望所有流量仅通过网关。
我可以过滤微服务中的 IP,如果不是来自网关 IP,则拒绝连接,但我想知道是否有更好的方法。
您可以尽量不要在 docker-compose 文件中将微服务端口暴露给主机,它应该仍然可以在 docker 网络中访问并且可以访问网关:
version: '3.4'
services:
apigateway:
image: apigateway
container_name: api-gateway
build:
context: .
dockerfile: api_gateway/Dockerfile
ports:
- 7500:7500
networks:
- api-local
apiadmin:
image: apiadmin
container_name: api-admin
build:
context: .
dockerfile: api_admin/Dockerfile
networks:
- api-local
networks:
api-local:
external: true
请注意,我删除了 apiadmin
服务的端口映射。
我有一个简单的概念验证系统,它有 2 个 API:一个用作网关,另一个是微服务。我已经为两者创建了 docker 容器,并使用 docker 组合文件将它们 运行 一起创建。
一切正常,除了我不确定如何限制微服务被直接调用。
这是我的撰写文件:
version: '3.4'
services:
apigateway:
image: apigateway
container_name: api-gateway
build:
context: .
dockerfile: api_gateway/Dockerfile
ports:
- 7500:7500
networks:
- api-local
apiadmin:
image: apiadmin
container_name: api-admin
build:
context: .
dockerfile: api_admin/Dockerfile
ports:
- 7501:7501
networks:
- api-local
networks:
api-local:
external: true
我可以打电话给 localhost:7500/some_url,我会得到回复。我也可以调用 localhost:7501/some_url,我也会收到回复。但是,我想阻止客户端直接调用 7501 微服务。我希望所有流量仅通过网关。
我可以过滤微服务中的 IP,如果不是来自网关 IP,则拒绝连接,但我想知道是否有更好的方法。
您可以尽量不要在 docker-compose 文件中将微服务端口暴露给主机,它应该仍然可以在 docker 网络中访问并且可以访问网关:
version: '3.4'
services:
apigateway:
image: apigateway
container_name: api-gateway
build:
context: .
dockerfile: api_gateway/Dockerfile
ports:
- 7500:7500
networks:
- api-local
apiadmin:
image: apiadmin
container_name: api-admin
build:
context: .
dockerfile: api_admin/Dockerfile
networks:
- api-local
networks:
api-local:
external: true
请注意,我删除了 apiadmin
服务的端口映射。