越来越多的网站开始支持 IPv6,即使是哪些只提供 api 服务的站点也需要支持 IPv6,比如苹果应用商店中的 app 早就强制要求服务器端支持 IPv6 了。
笔者在前文《Azure Load Balancer : 简介》中介绍了通过 Azure 门户站点创建基础的 Azure Load Balancer 配置,本文将接着介绍如何创建支持 IPv6 的 Azure Load Balancer。
让我们先来了解一下 Azure Load Balancer 在 IPv6 支持方面的一些限制(完整的限制列表请参考):
无法在 Azure 门户中添加 IPv6 负载均衡规则。 只能通过模板、CLI 或 PowerShell 创建规则。
无法将现有 VM 升级为使用 IPv6 地址。 为此必须部署新 VM。
无法将公共 IPv6 地址分配给 VM, 只能分配给负载均衡器。
这三条限制看起来让人很沮丧!其中第一条意味着我们没办法通过 UI 简单的创建支持 IPv6 的 Load Balancer;第二条则让老机器失去了升级的机会;第三条则把 IPv6 的支持完全绑死到了 Load Balancer 上!
换个角度看问题也许能让人心情愉快些:
不支持 UI 操作就是逼着我们写脚本,刚好可以朝着基础架构即代码的方向前进!
不支持现有虚机的升级,可以抛掉历史的包袱轻装上阵!
不支持将公共 IPv6 地址分配给 VM,那就只用在 Load Balancer 上维护 IPv6 的配置!
既然无法通过 Azure 门户站点上的 UI 创建支持 IPv6 的 Load Balancer,笔者就选择通过 PowerShell 脚本完成这个任务, 我们来创建一个具有两台后端虚机的 Load Balancer,下面是脚本中的主要逻辑。
定义脚本中所需的变量
为了能更好的重用该脚本,笔者把所需的变量都定义到了脚本的开头处,虽然变量的数目很多,但是只要修改 prodNamePrefix、userName、sshPublicKey 和 location 等几个关键变量的值脚本就可以工作了:
# 资源名称的前缀 $prodNamePrefix = "Nick" $lowerProdNamePrefix = $prodNamePrefix.ToLower() # vm user name $userName = "nick" # vm user public key $sshPublicKey = "xxxxxxxxxx" # resource loacation $location = "japaneast" # resource group name $rgName = $prodNamePrefix + "LBGroup" ...