Azure Service Fabric集群IPv4/IPv6双栈部署问题咨询
我团队在部署Azure Service Fabric集群以同时支持IPv4和IPv6流量时遇到了瓶颈。我们的应用服务于iOS和Android移动客户端,通过HTTP和TCP Socket与集群通信,而苹果App Store的强制要求让我们必须实现IPv6支持。
我们选择用ARM模板部署,因为目前Azure门户还不支持为虚拟机规模集(VMSS)配置带IPv6的负载均衡器。虽然官方文档提到IPv6的一些限制(比如私有IPv6地址无法部署到VMSS),但有预览文档显示该功能早在2017年7月就进入预览阶段了。
为了简化问题排查,我们基于一个基础无安全配置的Service Fabric集群ARM模板进行修改,主要做了以下几处关键调整:
1. 配置负载均衡器双栈前端IP与后端池
修改了负载均衡器的frontendIPConfigurations和backendAddressPools,同时关联IPv4和IPv6的公网IP及对应的后端地址池:
"frontendIPConfigurations": [ { "name": "LoadBalancerIPv4Config", "properties": { "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPv4Name'),'-','0'))]" } } }, { "name": "LoadBalancerIPv6Config", "properties": { "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPv6Name'),'-','0'))]" } } } ], "backendAddressPools": [ { "name": "LoadBalancerIPv4BEAddressPool", "properties": {} }, { "name": "LoadBalancerIPv6BEAddressPool", "properties": {} } ],
2. 配置双栈负载均衡规则
针对HTTP的80端口和TCP Socket的5607端口,我们分别配置了IPv4和IPv6的负载均衡规则(共4条)。特别说明:为了区分双栈流量,我们将IPv6规则的后端端口做了映射调整——前端80端口对应后端8081,前端5607端口对应后端8517:
{ "name": "AppPortLBRule1Ipv4", "properties": { "backendAddressPool": { "id": "[variables('lbIPv4PoolID0')]" }, "backendPort": "[parameters('loadBalancedAppPort1')]", "enableFloatingIP": "false", "frontendIPConfiguration": { "id": "[variables('lbIPv4Config0')]" }, "frontendPort": "[parameters('loadBalancedAppPort1')]", "idleTimeoutInMinutes": "5", "probe": { "id": "[concat(variables('lbID0'),'/probes/AppPortProbe1')]" }, "protocol": "tcp" } }, { "name": "AppPortLBRule1Ipv6", "properties": { "backendAddressPool": { "id": "[variables('lbIPv6PoolID0')]" }, "backendPort": 8081, "enableFloatingIP": "false", "frontendIPConfiguration": { "id": "[variables('lbIPv6Config0')]" }, "frontendPort": "[parameters('loadBalancedAppPort1')]", "probe": { "id": "[concat(variables('lbID0'),'/probes/AppPortProbe1')]" }, "protocol": "tcp" } }, { "name": "AppPortLBRule2Ipv4", "properties": { "backendAddressPool": { "id": "[variables('lbIPv4PoolID0')]" }, "backendPort": "[parameters('loadBalancedAppPort2')]", "enableFloatingIP": "false", "frontendIPConfiguration": { "id": "[variables('lbIPv4Config0')]" }, "frontendPort": "[parameters('loadBalancedAppPort2')]", "idleTimeoutInMinutes": "5", "probe": { "id": "[concat(variables('lbID0'),'/probes/AppPortProbe2')]" }, "protocol": "tcp" } }, { "name": "AppPortLBRule2Ipv6", "properties": { "backendAddressPool": { "id": "[variables('lbIPv6PoolID0')]" }, "backendPort": 8517, "enableFloatingIP": "false", "frontendIPConfiguration": { "id": "[variables('lbIPv6Config0')]" }, "frontendPort": "[parameters('loadBalancedAppPort2')]", "probe": { "id": "[concat(variables('lbID0'),'/probes/AppPortProbe2')]" }, "protocol": "tcp" } }
另外,我们已经为每条负载均衡规则配置了对应的健康探测(代码为简洁起见省略),同时按照预览文档的建议将VMSS的apiVersion设置为"2017-03-30",也完成了网络接口的相关配置,但部署始终无法成功。
有没有朋友遇到过类似的问题?或者能帮忙排查下部署失败的可能原因?
内容的提问来源于Stack Exchange,提问作者Thomas Winger

