Azure Docker Swarm调用第三方API的IP白名单问题咨询
解决Docker EE for Azure Swarm集群调用第三方API的白名单IP问题
嘿,这个问题我在Azure上部署Docker Swarm集群时也遇到过!当你只加了外部负载均衡器的IP到白名单,但仍间歇性收到未授权提示,说明服务的出站请求源IP不止LB这一个。以下是你需要考虑加入白名单的标准IP地址:
需要加入白名单的IP地址
所有Swarm节点的公网IP
Docker Swarm中,服务任务默认会调度到worker节点(如果没设置约束,manager节点也可能运行任务)。容器的出站流量会通过宿主机(节点VM)的网络栈转发,所以请求的源IP就是节点VM本身的公网IP。你需要把3个manager节点和3个worker节点的公网IP全部加入第三方API的白名单。Azure负载均衡器的SNAT池IP
如果你的Swarm节点没有分配独立的公网IP,或者Azure LB配置了出站SNAT规则,那么出站流量会使用LB的SNAT池IP。你可以通过Azure CLI查看这些IP:az network lb show --resource-group <你的资源组名> --name <LB名称> --query "outboundRules[].frontendIPConfigurations[].publicIPAddress.id"或者直接在Azure门户的负载均衡器“出站规则”里查看对应的公网IP。
Azure VNet NAT网关的公网IP
如果你为Swarm集群所在的VNet配置了NAT网关,那么所有从VNet出站的流量都会统一使用NAT网关的公网IP作为源IP。这种情况下,必须把NAT网关的公网IP加入白名单。
排查验证方法
为了确认实际的出站源IP,你可以在运行服务的容器里执行以下命令,多次运行看返回的IP是否有变化:
docker exec <你的容器ID> curl -s ifconfig.me
或者在容器里安装tcpdump抓包分析出站请求的源IP,这样能精准定位需要加入白名单的地址。
内容的提问来源于stack exchange,提问作者Meitsrik
相关产品推荐
相关产品推荐

