你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 运营商 Nexus Kubernetes 服务中配置服务负载均衡器

本文介绍如何在 Nexus Kubernetes 群集中配置服务负载均衡器。 负载均衡器允许外部服务访问群集中运行的服务。 本指南的重点是配置方面,提供示例来帮助你了解该过程。 按照本指南作,可以在 Nexus Kubernetes 群集中有效地配置服务负载均衡器。

先决条件

在继续执行本操作指南之前,建议:

  • 有关全面概述和涉及的步骤,请参阅关系 Kubernetes 群集快速入门指南
  • 确保满足概述的先决条件,以确保指南的顺利实施。
  • 了解 Kubernetes 概念,包括部署和服务。
  • 请与网络管理员联系,获取可用于负载均衡器 IP 池的 IP 地址范围。

局限性

  • IP 池配置不可变:设置后,无法在 Nexus Kubernetes 群集中修改它。
  • IP 池名称必须以小写字母或数字开头,以小写字母或数字结尾。
  • IP 池名称不应超过 63 个字符,以避免潜在的问题或限制。
  • IP 地址池不应与现有的 POD CIDR、服务 CIDR 或 CNI 前缀重叠,以防止群集中的冲突和网络问题。

重要

这些说明用于创建新的 Nexus Kubernetes 群集。 避免将 Bicep 文件应用到现有群集,因为 IP 池配置是不可变的。 使用 IP 池配置创建群集后,无法对其进行修改。

配置选项

在为服务负载均衡器配置 IP 地址池之前,请务必了解可用的各种配置选项。 通过这些选项,可以根据特定要求定义 IP 地址池的行为和参数。

让我们浏览 IP 地址池的配置选项。

必需的参数

IP 地址池配置需要存在两个字段: addressesname。 这些字段对于定义 IP 地址范围和标识池至关重要。

  • addresses 字段指定可用于池中分配的 IP 地址范围列表。 可以将每个范围定义为 CIDR 格式的子网。 避免使用单个 IP 地址,例如用于 IPv4 的 /32 和 IPv6 的 /128。
  • name 字段充当 IP 地址池的唯一标识符。 它有助于将池与 BGP(边界网关协议)播发相关联,从而在群集中实现有效通信。

注释

若要使 Kubernetes LoadBalancer 服务具有双堆栈地址,请确保 IP 池配置包括 IPv4 和 IPv6 CIDR。

可选参数

除了必填字段,还有一些可选字段可用于进一步自定义 IP 地址池配置。

  • autoAssign 字段决定是否自动从池中分配 IP 地址。 此字段是string类型,默认值为True。 您可以根据自己的偏好将其设置为 TrueFalse
  • onlyUseHostIps 字段控制 IP 地址的使用,这些地址在池中以 .0.255 结尾。 启用此选项会将使用限制为介于 .1.254 之间的 IP 地址(含),不包括保留的网络地址和广播地址。

IP 地址池配置的 Bicep 文件参数

以下 JSON 代码片段显示了在 Bicep 文件中配置 IP 地址池所需的参数。

"ipAddressPools": {
  "value": [
    {
      "addresses": ["<IP>/<CIDR>"],
      "name": "<pool-name>",
      "autoAssign": "True",  /* "True"/"False" */
      "onlyUseHostIps": "True"  /* "True"/"False" */
    }
  ]
}

若要将 IP 池配置添加到群集,需要更新kubernetes-deploy-parameters.json在快速入门期间创建的文件。 根据所需的设置将此文件中的 IP 池配置包括在内。

将 IP 池配置添加到参数文件后,可以继续部署 Bicep 文件。 此操作使用指定的 IP 地址池配置来设置您的新群集,使您能够按预期使用 IP 地址池。

按照这些说明作,可以使用所需的 IP 池配置创建新的 Nexus Kubernetes 群集,并利用群集服务的 IP 地址池。

示例参数

此参数文件旨在与 快速入门指南 Bicep 文件一起使用,用于创建启用了 BGP 负载均衡器的群集。 它包含设置具有 BGP 负载均衡器功能的群集所需的配置设置。 通过将此参数文件与 Bicep 文件结合使用,可以创建具有所需 BGP 负载均衡器功能的群集。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "kubernetesClusterName":{
      "value": "lb-test-cluster"
    },
    "adminGroupObjectIds": {
      "value": [
        "00000000-0000-0000-0000-000000000000"
      ]
    },
    "cniNetworkId": {
      "value": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/l3Networks/<l3Network-name>"
    },
    "cloudServicesNetworkId": {
      "value": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/cloudServicesNetworks/<csn-name>"
    },
    "extendedLocation": {
      "value": "/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-___location-name>"
    },
    "___location": {
      "value": "eastus"
    },
    "sshPublicKeys": {
      "value": [
        {
          "keyData": "ssh-rsa AAAAB..."
        },
        {
          "keyData": "ssh-rsa AAAAC..."
        }
      ]
    },
    "ipAddressPools": {
      "value": [
        {
          "addresses": ["<IP>/<CIDR>"],
          "name": "<pool-name>",
          "autoAssign": "True",
          "onlyUseHostIps": "True"
        }
      ]
    }
  }
}

注释

如果要创建 DualStack 服务,请确保地址池包含 IPv4 CIDR 和 IPv6 CIDR。 这允许同时支持负载均衡器配置中的 IPv4 和 IPv6 地址。

示例:服务的静态 IP 地址分配

若要为服务分配静态 IP 地址,可以使用以下命令。

创建部署

kubectl create deployment nginx --image=nginx --port 80

静态 IP 分配 (LoadBalancerIP)

kubectl expose deployment nginx \
    --name nginx-loadbalancer-pool1-static \
    --type LoadBalancer \
    --load-balancer-ip <IP from pool-1>

<IP from pool-1> 替换为 IP 池中的所需 IP 地址。

静态 IP 分配 (ExternalIP)

kubectl expose deployment nginx \
    --name nginx-clusterip-pool1-static \
    --type ClusterIP \
    --external-ip <IP from pool-1>

<IP from pool-1> 替换为 IP 池中的所需 IP 地址。

示例:来自特定 IP 池的服务的 IP 地址分配

若要从特定 IP 池为服务分配 IP 地址,可以使用以下命令。

kubectl expose deployment nginx \
    --name nginx-loadbalancer-pool2-auto \
    --type LoadBalancer \
    --overrides '{"metadata":{"annotations":{"metallb.universe.tf/address-pool":"pool-2"}}}'

此命令从 IP 池 pool-2向服务分配 IP 地址。 根据需要调整池名称。 在尝试这些示例之前,请确保已创建具有两个不同的 IP 地址池的 Nexus Kubernetes 群集。 如果尚未这样做,请按照必要的步骤创建群集并相应地配置 IP 池。

注释

IP 地址池名称区分大小写。 请确保在指定池名称时使用正确的大小写。

后续步骤

可以使用新配置的负载均衡器在 Nexus Kubernetes 群集中尝试部署网络函数(NF)。 此配置允许你测试负载均衡功能,并观察流量如何在 NF 实例之间分布。