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

在 Azure 操作员 Nexus Kubernetes 服务中配置服务负载均衡器

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

先决条件

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

  • 有关涉及的全面概述和步骤,请参阅 Nexus 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 池中结束。 启用此选项会将使用限制为 IP 地址之间的 .1 IP 地址( .254 含),不包括保留的网络和广播地址。

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 实例之间分布。