本文介绍如何使用 API 服务器授权 IP 地址范围来限制哪些 IP 地址和 CIDR 可以访问 Azure Kubernetes 服务(AKS)工作负荷的访问控制平面终结点。
先决条件
- Azure CLI版本 2.0.76 或更高版本。 若要检查版本,请运行
az --version。 如果需要进行安装或升级,请参阅安装 Azure CLI。 - 若要了解将 AKS 群集与 Azure DevOps 集成时要包括的 IP 地址,请参阅允许的 IP 地址和域 URL。
限制和注意事项
- AKS 仅支持标准 SKU 负载均衡器的此功能。 AKS 不再支持基本 SKU 负载均衡器。 如果有使用基本 SKU 的现有群集, 请迁移到标准 SKU。 迁移需要停机,并且还需要满足其他前提条件。
- 不能将此功能用于 专用群集。
- 对于使用 节点公共 IP 的群集,具有公共 IP 的每个节点池都必须使用公共 IP 前缀。 将这些前缀添加为授权范围。
API 服务器已授权 IP 范围的概述
Kubernetes API 服务器提供对底层 Kubernetes API 的访问。 管理工具(如 kubectl Kubernetes 仪表板)通过此 API 服务器与群集交互。 AKS 提供具有专用 API 服务器的单租户控制平面,并默认为服务器分配公共 IP 地址。 可以使用 Kubernetes 基于角色的访问控制(Kubernetes RBAC)或 Azure RBAC 来控制访问。
若要保护其他可公开访问的 AKS 控制平面 API 服务器,请启用授权的 IP 范围。 经过授权的 IP 范围仅允许定义的 IP 地址范围与 API 服务器通信。 API 服务器阻止来自未包含在授权范围内的 IP 地址的请求。 规则最多可能需要两分钟才生效。 在测试连接之前,请等待最多两分钟。
推荐允许的 IP 范围
建议在 API 服务器授权 IP 范围配置中包含以下 IP 地址范围:
- 群集出口 IP 地址 (防火墙、NAT 网关或其他地址,具体取决于出站类型)。
- 用于管理群集的网络的 IP 地址范围。
创建启用了 API 服务器授权 IP 范围的 AKS 群集
注意
在创建群集期间启用 API 服务器授权 IP 范围时,AKS 会默认将 API 服务器公共 IP 和 标准 SKU 负载均衡器 的出站公共 IP 添加到已授权 IP 范围列表,以及指定的任何范围。
特殊情况 - 0.0.0.0/32:0.0.0.0/32 占位符指示 AKS 仅允许标准 SKU 负载均衡器的出站公网 IP 访问 API 服务器。 占位符具有以下行为:
| 行为 | Description |
|---|---|
| 额外的客户端 IP 范围 | 禁用允许额外的客户端 IP 范围的默认行为。 |
| API 服务器访问 | 仅将 API 服务器访问限制为群集自己的出站 IP。 |
| 自我管理 | 允许群集在阻止外部访问时进行自我管理。 |
若要创建启用了 API 服务器授权 IP 范围的群集,请提供授权的公共 IP 地址范围列表。 对于 CIDR 范围,请使用网络地址,该地址是该区域中的第一个 IP 地址。 例如,若要允许范围137.117.106.88137.117.106.95,请指定137.117.106.88/29。
使用带有 --api-server-authorized-ip-ranges 参数的 az aks create 命令创建已启用 API 服务器授权 IP 范围的 AKS 群集。 以下示例在名为 myResourceGroup 的资源组中创建名为 myAKSCluster 的群集,并允许 IP 地址范围73.140.245.0/24访问 API 服务器:
az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --generate-ssh-keys
使用 New-AzAksCluster cmdlet 并配合 -ApiServerAccessAuthorizedIpRange 参数创建启用了 API 服务器授权 IP 范围的 AKS 群集。 以下示例在名为 myResourceGroup 的资源组中创建名为 myAKSCluster 的群集,并允许 IP 地址范围73.140.245.0/24访问 API 服务器:
New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeVmSetType VirtualMachineScaleSets -LoadBalancerSku Standard -ApiServerAccessAuthorizedIpRange '73.140.245.0/24' -GenerateSshKey
- 在 Azure 门户主页中,选择“创建资源”>“容器”>“Azure Kubernetes 服务(AKS)”。
- 根据需要配置群集设置。
- 在“公共访问”下的“网络”部分中,选择“设置授权 IP 范围”。
- 对于“指定 IP 范围”,请输入要授权访问 API 服务器的 IP 地址范围。
- 根据需要配置其余群集设置。
- 准备就绪后,选择“查看 + 创建>创建”以创建群集。
使用 Azure CLI 为标准 SKU 负载均衡器指定出站 IP
创建启用了 API 服务器授权 IP 范围的群集时,还可以使用 --load-balancer-outbound-ips 或 --load-balancer-outbound-ip-prefixes 参数指定其出站 IP 地址或前缀。 除了参数中的 --api-server-authorized-ip-ranges IP 地址外,AKS 还允许这些 IP 地址。
使用 --load-balancer-outbound-ips 参数创建启用了 API 服务器授权 IP 范围的 AKS 群集,并为标准 SKU 负载均衡器指定出站 IP 地址。 以下示例在名为 myResourceGroup 的资源组中创建名为 myAKSCluster 的群集,允许73.140.245.0/24访问 API 服务器,并为标准 SKU 负载均衡器指定两个出站 IP 地址。 将 <public-ip-id-1> 和 <public-ip-id-2> 替换为您的公共 IP 地址的资源 ID。
az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --load-balancer-outbound-ips <public-ip-id-1>,<public-ip-id-2> --generate-ssh-keys
仅允许标准 SKU 负载均衡器的出站公共 IP 地址
使用 --api-server-authorized-ip-ranges 参数创建一个 AKS 群集,该群集仅允许标准 SKU 负载均衡器的出站公共 IP 访问 API 服务器。 以下示例在名为 myResourceGroup 的资源组中创建名为 myAKSCluster 的群集:
az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 0.0.0.0/32 --generate-ssh-keys
使用 -ApiServerAccessAuthorizedIpRange 参数创建一个 AKS 群集,该群集仅允许标准 SKU 负载均衡器的出站公共 IP 访问 API 服务器。 以下示例在名为 myResourceGroup 的资源组中创建名为 myAKSCluster 的群集:
New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeVmSetType VirtualMachineScaleSets -LoadBalancerSku Standard -ApiServerAccessAuthorizedIpRange '0.0.0.0/32' -GenerateSshKey
- 在 Azure 门户主页中,选择“创建资源”>“容器”>“Azure Kubernetes 服务(AKS)”。
- 根据需要配置群集设置。
- 在“公共访问”下的“网络”部分中,选择“设置授权 IP 范围”。
- 对于 “指定 IP 范围”,请输入
0.0.0.0/32。 此设置仅允许标准 SKU 负载均衡器的出站公共 IP。 - 根据需要配置其余群集设置。
- 准备就绪后,选择“查看 + 创建>创建”以创建群集。
更新现有群集上的 API 服务器授权 IP 范围
将 az aks update 命令与参数一起使用 --api-server-authorized-ip-ranges ,以更新群集的 API 服务器授权 IP 范围。 以下示例将名为 myResourceGroup 的资源组中名为 myAKSCluster 的群集的授权范围设置为 73.140.245.0/24:
az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24
使用 Azure CLI 允许多个 IP 地址范围
若要允许多个 IP 地址范围,请用逗号分隔它们。
将 az aks update 命令与参数一起使用 --api-server-authorized-ip-ranges ,以授权多个 IP 地址范围。 以下示例在名为 myResourceGroup 的资源组中更新名为 myAKSCluster 的群集:
az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24,193.168.1.0/24,194.168.1.0/24
使用带有 -ApiServerAccessAuthorizedIpRange 参数的 Set-AzAksCluster cmdlet 来更新群集的 API 服务器授权 IP 范围。 以下示例将名为 myResourceGroup 的资源组中名为 myAKSCluster 的群集的授权范围设置为 73.140.245.0/24:
Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange '73.140.245.0/24'
- 导航到 Azure 门户,选择要更新的 AKS 群集。
- 在服务菜单中的 “设置”下,选择“ 网络”。
- 在“资源设置”下,选择“管理”。
- 在授权 IP 范围页上,根据需要更新授权 IP 范围。
- 完成后,选择“保存”。
在现有群集上禁用 API 服务器授权 IP 范围
若要禁用 API 服务器授权 IP 范围,请使用az aks update命令并为参数指定空范围""--api-server-authorized-ip-ranges。
az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""
若要禁用 API 服务器授权 IP 范围,请使用 Set-AzAksCluster cmdlet 并为参数指定空范围''-ApiServerAccessAuthorizedIpRange。
Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange ''
- 导航到 Azure 门户,选择要更新的 AKS 群集。
- 在服务菜单中的 “设置”下,选择“ 网络”。
- 在“资源设置”下,选择“管理”。
- 在“授权 IP 范围”页上,取消选中“设置授权 IP 范围”复选框。
- 选择“保存”。
查找现有的 API 服务器授权 IP 范围
若要查找现有的 API 服务器授权 IP 范围,请使用 az aks show 命令,并将 --query 参数设置为 apiServerAccessProfile.authorizedIpRanges。
az aks show --resource-group myResourceGroup --name myAKSCluster --query apiServerAccessProfile.authorizedIpRanges
示例输出:
[
"73.140.245.0/24"
]
若要查找现有的 API 服务器授权 IP 范围,请使用 Get-AzAksCluster cmdlet。
Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster | Select-Object -ExpandProperty ApiServerAccessProfile
示例输出:
AuthorizedIPRanges: {73.140.245.0/24}
...
导航到 Azure 门户并选择 AKS 群集。
在服务菜单中的 “设置”下,选择“ 网络”。
“网络”页上的“资源设置”部分显示当前配置的授权 IP 范围。
从开发环境、开发工具或自动化系统访问 API 服务器
若要从开发计算机、工具或自动化系统访问 API 服务器,请将其公共 IP 地址添加到群集的授权 IP 范围。
或者,在防火墙虚拟网络中的单独子网内配置一台装有所需工具的跳板机,并将防火墙 IP 地址添加到允许的地址范围。 如果 AKS 群集子网配置了经由防火墙的强制隧道,则可改为将该跳转主机放置在 AKS 群集子网内。
注意
以下示例保留现有的授权范围并添加另一个 IP 地址。 如果省略现有 IP 地址,该命令会将它替换为新范围。
运行以下命令以检索 IP 地址并将其设置为环境变量:
# Retrieve your IP address CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")将
az aks update命令与--api-server-authorized-ip-ranges参数结合使用,将 IP 地址添加到授权范围。 以下示例将当前 IP 地址添加到名为 myResourceGroup 的资源组中名为 myAKSCluster 的群集上的现有范围:az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges $CURRENT_IP/32,73.140.245.0/24
运行以下命令以检索 IP 地址并将其设置为环境变量:
# Retrieve your IP address $CURRENT_IP = (Invoke-RestMethod -Uri 'https://ipinfo.io/json').ip将
Set-AzAksClustercmdlet 与-ApiServerAccessAuthorizedIpRange参数结合使用,将 IP 地址添加到授权范围。 以下示例将当前 IP 地址添加到资源组 myResourceGroup 中名为 myAKSCluster 的群集的现有 IP 范围中:Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange "$CURRENT_IP/32", '73.140.245.0/24'
有关标识 IP 地址的另一种方法,请参阅在 Web 浏览器中查找 IP 地址或搜索我的 IP 地址。
相关内容
若要详细了解 AKS 中的安全性,请参阅以下文章: