Docker Compose 实现多租户微服务通信安全的核心是网络层逻辑隔离与精准连通:为各租户定义独立 bridge 网络(如 tenant-a-network),服务仅接入必需网络,共享服务通过 external 网络有节制暴露,天然实现 DNS 与二层隔离。

用 Docker Compose 实现多租户微服务通信安全,核心不是靠“加密”或“认证”,而是靠网络层的逻辑隔离 + 精准连通。每个租户的服务应运行在专属网络空间中,跨租户访问必须显式声明、不可默认穿透。
为每个租户定义独立 bridge 网络
避免所有服务挤在默认 network 下。在 docker-compose.yml 中显式声明租户专属网络,例如:
- tenant-a-network、tenant-b-network、shared-auth-network —— 名称需语义清晰
- 全部使用
driver: bridge,不依赖 host 或 overlay(除非跨主机) - 可加
attachable: true方便调试容器临时接入,但生产环境建议设为false
服务只连该连的网络,不“广撒网”
一个服务通常只需接入 1–2 个网络:自己租户的私有网络 + 共享基础设施网络(如日志、配置中心)。例如:
- tenant-a-web 只连
tenant-a-network和shared-logging-network - tenant-a-api 同样只连这两个,不连
tenant-b-network或default - 共享服务(如 auth-service)可同时接入多个租户网络,但必须明确列出,不能靠“全连”实现
用网络边界替代防火墙规则
Docker 的自定义 bridge 天然具备 DNS 隔离和二层隔离能力:
- tenant-a-web 无法通过
ping tenant-b-db或curl http://tenant-b-api:8080访问——根本解析不到,也不在同一个子网 - 即使两个租户都用了 PostgreSQL 镜像,端口、密码、数据卷完全独立,无共享风险
- 不需要额外配 iptables 或 ufw 规则,网络平面本身已形成可信边界
共享服务要“有节制地开放”
像统一认证、消息队列、配置中心这类服务,需被多个租户调用,但不能变成“全局通道”:
- 单独定义
shared-services-network,只让 auth、config、mq 这类服务加入 - 各租户服务通过
external: true引用该网络,而非直接连到租户网络里 - 租户服务调用 auth 时,走的是
auth:9000(DNS 名),而不是auth.tenant-b-network:9000—— 避免命名污染与路径混淆

















