你当前正在访问 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 地址池配置需要存在两个字段: addresses
和 name
。 这些字段对于定义 IP 地址范围和标识池至关重要。
- 该
addresses
字段指定可用于池中分配的 IP 地址范围列表。 可以将每个范围定义为 CIDR 格式的子网。 避免使用单个 IP 地址,例如用于 IPv4 的 /32 和 IPv6 的 /128。 - 该
name
字段充当 IP 地址池的唯一标识符。 它有助于将池与 BGP(边界网关协议)播发相关联,从而在群集中实现有效的通信。
注意
若要使 Kubernetes LoadBalancer
服务具有双堆栈地址,请确保 IP 池配置包括 IPv4 和 IPv6 CIDR。
可选参数
除了必填字段,还有一些可选字段可用于进一步自定义 IP 地址池配置。
- 该
autoAssign
字段确定是否从池中自动分配 IP 地址。 此字段是string
默认值为 .True
. 可以将它设置为任一True
或False
基于偏好。 - 该
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 实例之间分布。