AKS 中的静态出口网关提供了一种简化的解决方案,用于为来自 AKS 工作负载的出站流量配置固定源 IP 地址。 借助此功能,可以通过专用的“网关节点池”路由出口流量。 通过使用静态出口网关,可以有效地管理和控制出站 IP 地址,并确保 AKS 工作负载可以使用预定义 IP 安全且一致地与外部系统通信。
本文提供了在 AKS 群集中设置静态出口网关节点池的分步说明,支持你为 Kubernetes 工作负载的出站流量配置固定源 IP 地址。
限制和注意事项
带有 Azure CNI Pod 子网的群集不支持静态出口网关。
Kubernetes 网络策略不适用于通过网关节点池离开群集的流量。
- 这不应影响群集流量控制,因为只有从带批注的 Pod 路由到网关节点池的出口流量才会受到影响。
网关节点池不适用于常规用途工作负载,并且应仅用于出口流量。
不能将 Windows 节点池用作网关节点池。
不能向 hostNetwork Pod 添加注释以使用网关节点池。
如果 Pod 与
StaticGatewayConfiguration资源位于同一命名空间,则它们只能使用网关节点池。
使用静态出口网关创建或更新 AKS 群集
必须先为 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 群集的标识授予“网络参与者”角色。
静态专用 IP 支持(预览版)
重要
静态私有 IP 支持需要运行 Kubernetes 版本 1.34 或更高版本的群集,以及启用了 Azure 功能曝光控制(AFEC)标志的订阅Microsoft.ContainerService/StaticEgressGatewayPreview。 在创建网关 VirtualMachines 节点池之前,请按照 注册预览功能 请求功能标志。
如果必须在专用地址上保留出口流量,请对网关节点池启用专用 IP 支持。 使用相同的 az aks nodepool add 命令,在禁用公共 IP 预配的情况下,将节点池设置为使用 VirtualMachines VM 设置类型。
az aks nodepool add --cluster-name <cluster-name> \
--name <nodepool-name> \
--resource-group <resource-group> \
--mode gateway \
--node-count <number-of-nodes> \
--vm-set-type VirtualMachines \
--gateway-prefix-size <prefix-size>
在此配置中,provisionPublicIps=false 设置使分配给网关节点的专用 IP 保持存在,直至 StaticGatewayConfiguration 的生命周期结束。 运行 kubectl describe StaticGatewayConfiguration <gateway-config-name> -n <namespace>时,该 egressIpPrefix 字段会显示这些静态专用 IP 的逗号分隔列表。 继续对工作流的其余部分使用相同的 API 和清单,包括 StaticGatewayConfiguration 资源和 Pod 注释。
批注 Pod 以使用网关配置
要通过网关节点池路由来自特定 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 群集中有效地设置和管理静态出口网关配置,从而实现来自工作负载的受控且一致的出口流量。