共用方式為

在 Azure Kubernetes 服务 (AKS) 中配置静态出口网关

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 群集中有效地设置和管理静态出口网关配置,从而实现来自工作负载的受控且一致的出口流量。

后续步骤