AKS 中的静态出口网关提供了一种简化的解决方案,用于为来自 AKS 工作负载的出站流量配置固定源 IP 地址。 借助此功能,可以通过专用的“网关节点池”路由出口流量。 通过使用静态出口网关,可以有效地管理和控制出站 IP 地址,并确保 AKS 工作负载可以使用预定义 IP 安全且一致地与外部系统通信。
本文提供了在 AKS 群集中设置静态出口网关节点池的分步说明,支持你为 Kubernetes 工作负载的出站流量配置固定源 IP 地址。
限制和注意事项
带有 Azure CNI Pod 子网的群集不支持静态出口网关。
静态出口网关不支持将专用 IP 分配给网关节点池。 网关节点池必须为其分配公共 IP 前缀。
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 群集的标识授予“网络参与者”角色。
批注 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 群集中有效地设置和管理静态出口网关配置,从而实现来自工作负载的受控且一致的出口流量。