配置Traefik使ServiceB指定端点仅允许内部访问的方法
配置Traefik IP白名单实现ServiceB关键端点内部访问
要实现ServiceB的/serviceB/criticalEndpoint仅允许内部访问,你需要创建IP白名单中间件,将Docker内部网段、宿主机本地IP纳入白名单,具体操作如下:
1. 定义IP白名单中间件
在Traefik配置中添加middlewares节点,指定允许访问的内部IP范围:
http: middlewares: internal-only: ipWhiteList: sourceRange: - "127.0.0.1/32" # 宿主机本地访问 - "172.17.0.0/16" # Docker默认桥接网段 - "192.168.0.0/16" # 常见自定义Docker网桥网段(按需调整)
- 172.17.0.0/16是Docker默认桥接网络的网段,内部容器间的请求均来自该范围
- 若使用自定义Docker网桥,执行
docker network inspect <你的网桥名称>查看实际网段,替换或补充到sourceRange中 - 127.0.0.1/32用于允许宿主机本地直接访问该端点(按需保留)
2. 关联中间件到目标路由
修改已有的to-admin路由,将中间件指定为上面定义的internal-only:
http: routers: to-admin: rule: "Host(`{{env \"MYHOST\"}}`) && PathPrefix(`/serviceB/criticalEndpoint`)" service: serviceB middlewares: - internal-only
验证配置
配置完成后,外部请求访问该端点会被Traefik返回403拒绝,仅内部容器或白名单IP的请求可正常访问。
内容的提问来源于stack exchange,提问作者Rabid
相关产品推荐
相关产品推荐

