AKS 中的静态出口网关提供了一种简化的解决方案,用于为来自 AKS 工作负载的出站流量配置固定源 IP 地址。 借助此功能,可以通过专用的“网关节点池”路由出口流量。 通过使用静态出口网关,可以有效地管理和控制出站 IP 地址,并确保 AKS 工作负载可以使用预定义 IP 安全且一致地与外部系统通信。
本文提供了在 AKS 群集中设置静态出口网关节点池的分步说明,支持你为 Kubernetes 工作负载的出站流量配置固定源 IP 地址。
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
带有 Azure CNI Pod 子网的群集不支持静态出口网关。
Kubernetes 网络策略不适用于通过网关节点池离开群集的流量。
- 这不应影响群集流量控制,因为只有从带批注的 Pod 路由到网关节点池的出口流量才会受到影响。
网关节点池不适用于常规用途工作负载,并且应仅用于出口流量。
不能将 Windows 节点池用作网关节点池。
不能向 hostNetwork Pod 添加注释以使用网关节点池。
如果 Pod 与
StaticGatewayConfiguration
资源位于同一命名空间,则它们只能使用网关节点池。
- 如果使用 Azure CLI,则需要
aks-preview
扩展。 请参阅安装aks-preview
Azure CLI 扩展。
使用
aks-preview
命令安装az extension add
扩展。az extension add --name aks-preview
使用
az extension update
命令更新到扩展的最新版本。az extension update --name aks-preview
使用
StaticEgressGatewayPreview
命令注册az feature register
功能标志。az feature register --namespace "Microsoft.ContainerService" --name "StaticEgressGatewayPreview"
状态显示为“已注册”需要几分钟时间。
使用
az feature show
命令验证注册状态。az feature show --namespace "Microsoft.ContainerService" --name "StaticEgressGatewayPreview"
当状态反映为已注册时,使用 命令刷新
az provider register
资源提供程序的注册。az provider register --namespace Microsoft.ContainerService
必须先为 AKS 群集启用静态出口网关功能,然后才能创建和管理网关节点池。 可以在创建新群集或使用 az aks update
更新现有群集时执行此操作。
az aks create -n <cluster-name> -g <resource-group> --enable-static-egress-gateway
启用该功能后,请创建专用网关节点池。 此节点池回通过指定的公共 IP 前缀处理出口流量。
--gateway-prefix-size
是要应用于网关节点池节点的公共 IP 前缀的大小。 允许的范围为 28
-31
。
az aks nodepool add --cluster-name <cluster-name> \
--name <nodepool-name> \
--resource-group <resource-group> \
--mode gateway \
--node-count <number-of-nodes> \
--gateway-prefix-size <prefix-size>
备注
- 节点数必须符合所选前缀大小允许的容量。 例如,/30 前缀最多支持 4 个节点,并且至少需要 2 个节点才能实现高可用性。 由于无法动态调整节点计数,因此请根据由前缀大小设置的固定限制规划节点。
- 可以使用
--vm-size
参数定义要在网关节点池中使用的 VM 的 SKU。 应了解具体的需求并相应地进行计划,以确保适当的性能和成本平衡。
如有必要,可以在前缀大小定义的限制内调整网关节点池的大小,但它不支持自动缩放。
az aks nodepool scale --cluster-name <cluster-name> -n <nodepool-name> --node-count <desired-node-count>
通过创建 StaticGatewayConfiguration
自定义资源定义网关配置。 此配置指定了要使用的节点池和公共 IP 前缀。
apiVersion: egressgateway.kubernetes.azure.com/v1alpha1
kind: StaticGatewayConfiguration
metadata:
name: <gateway-config-name>
namespace: <namespace>
spec:
gatewayNodepoolName: <nodepool-name>
excludeCidrs: # Optional
- 10.0.0.0/8
- 172.16.0.0/12
- 169.254.169.254/32
publicIpPrefixId: /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Network/publicIPPrefixes/<prefix-name> # Optional
提示
如果未设置 publicIpPrefixId
,将会自动创建公共 IP 前缀。 运行 kubectl describe StaticGatewayConfiguration <gateway-config-name> -n <namespace>
时,可以在状态中看到“出口 IP 前缀”。 这是新创建的公共 IP 前缀。 还可以通过在 publicIpPrefixId
参数中指定现有公共 IP 前缀的资源 ID 来使用现有公共 IP 前缀。 在这种情况下,需要向 AKS 群集的标识授予“网络参与者”角色。
要通过网关节点池路由来自特定 Pod 的流量,请批注部署配置中的 Pod 模板。
apiVersion: apps/v1
kind: Deployment
metadata:
name: <deployment-name>
namespace: <namespace>
spec:
template:
metadata:
annotations:
kubernetes.azure.com/static-gateway-configuration: <gateway-config-name>
备注
每个节点上的 CNI 插件将自动配置 Pod,以通过所选网关节点池路由其流量。
部署后,可以通过 AKS 群集监视网关配置的状态。
StaticGatewayConfiguration
资源中的状态部分会进行更新,以包括分配的 IP 和 WireGuard 配置等详细信息。
要移除网关节点池,请确保在删除之前对所有关联配置进行相应的处理。
az aks nodepool delete --cluster-name <cluster-name> -n <nodepool-name>
如果不再需要静态出口网关,则可以禁用该功能并卸载操作员。 请务必首先删除所有网关节点池。
az aks update -n <cluster-name> -g <resource-group> --disable-static-egress-gateway
通过执行这些步骤,可以在 AKS 群集中有效地设置和管理静态出口网关配置,从而实现来自工作负载的受控且一致的出口流量。