26.3. 配置 MetalLB 地址池
作为集群管理员,您可以添加、修改和删除地址池。MetalLB Operator 使用地址池自定义资源来设置 MetalLB 可分配给服务的 IP 地址。
26.3.1. 关于地址池自定义资源
下表中描述了地址池自定义资源的字段。
字段 | 类型 | 描述 |
---|---|---|
|
|
指定地址池的名称。添加服务时,您可以在 |
|
| 指定地址池的命名空间。指定 MetalLB Operator 使用的同一命名空间。 |
|
|
指定向对等节点发布负载均衡器 IP 地址的协议。指定 |
|
|
可选:指定 MetalLB 是否从这个池自动分配 IP 地址。如果要使用 |
|
| 指定分配给服务的 MetalLB 的 IP 地址列表。您可以在单个池中指定多个范围。以 CIDR 表示法指定每个范围,或者指定为以连字符隔开的起始和结束 IP 地址。 |
|
|
可选:默认情况下,BGP 模式向配置的对等点公告每个分配的负载均衡器 IP 地址,且没有额外的 BGP 属性。对等路由器收到每个服务 IP 地址的一个 |
bgpAdvertisements
对象的字段在下表中定义:
字段 | 类型 | 描述 |
---|---|---|
|
|
可选:指定 32 位 CIDR 掩码中包含的位数。为了聚合发言人向 BGP 对等者公告的路由,掩码将应用于多个服务 IP 地址的路由,speaker 会公告聚合的路由。例如,聚合长度为 |
|
|
可选:指定 128 位 CIDR 掩码中包含的位数。例如,在聚合长度为 |
|
| 可选:指定一个或多个 BGP 社区。每个社区都被指定为两个 16 位值,用冒号字符分隔。知名的社区必须指定为 16 位值:
|
|
| 可选:指定这个广播的本地首选项。此 BGP 属性适用于 Autonomous System 中的 BGP 会话。 |
26.3.2. 配置地址池
作为集群管理员,您可以在集群中添加地址池来控制 MetalLB 可分配给负载均衡器服务的 IP 地址。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建一个包含类似以下示例内容的文件,如
addresspool.yaml
:apiVersion: metallb.io/v1alpha1 kind: AddressPool metadata: namespace: metallb-system name: doc-example spec: protocol: layer2 addresses: - 203.0.113.1-203.0.113.10 - 203.0.113.65-203.0.113.75
为地址池应用配置:
$ oc apply -f addresspool.yaml
验证
查看地址池:
$ oc describe -n metallb-system addresspool doc-example
输出示例
Name: doc-example Namespace: metallb-system Labels: <none> Annotations: <none> API Version: metallb.io/v1alpha1 Kind: AddressPool Metadata: ... Spec: Addresses: 203.0.113.1-203.0.113.10 203.0.113.65-203.0.113.75 Auto Assign: true Protocol: layer2 Events: <none>
确认输出中显示了地址池名称,如 doc-example
,并且 IP 地址范围显示在输出中。
26.3.3. 地址池配置示例
26.3.3.1. 示例:IPv4 和 CIDR 范围
您可以使用 CIDR 表示法指定 IP 地址范围。您可以将 CIDR 表示法与使用连字符分隔下限和上限的表示法合并。
apiVersion: metallb.io/v1beta1 kind: AddressPool metadata: name: doc-example-cidr namespace: metallb-system spec: protocol: layer2 addresses: - 192.168.100.0/24 - 192.168.200.0/24 - 192.168.255.1-192.168.255.5
26.3.3.2. 示例:保留 IP 地址
您可以将 autoAssign
字段设置为 false
,以防止 MetalLB 自动从池中分配 IP 地址。添加服务时,您可以从池中请求特定的 IP 地址,或者在注解中指定池名称从池中请求任何 IP 地址。
apiVersion: metallb.io/v1beta1 kind: AddressPool metadata: name: doc-example-reserved namespace: metallb-system spec: protocol: layer2 addresses: - 10.0.100.0/28 autoAssign: false
26.3.3.3. 示例:IPv4 和 IPv6 地址
您可以添加使用 IPv4 和 IPv6 的地址池。您可以像几个 IPv4 示例一样在 地址
列表中指定多个范围。
无论服务被分配一个 IPv4 地址、一个 IPv6 地址,还是由您添加该服务来确定。spec.ipFamilies
和 spec.ipFamilyPolicy
字段控制 IP 地址如何分配给该服务。
apiVersion: metallb.io/v1beta1 kind: AddressPool metadata: name: doc-example-combined namespace: metallb-system spec: protocol: layer2 addresses: - 10.0.100.0/28 - 2002:2:2::1-2002:2:2::100
26.3.3.4. 示例:使用 BGP 模式的简单地址池
对于 BGP 模式,您必须将 protocol
字段设置为 bgp
。其他地址池自定义资源字段(如 autoAssign
)也适用于 BGP 模式。
在以下示例中,对等的 BGP 路由器接收一个 203.0.113.200/32
路由,以及一个 fc00:f853:ccd:e799::1/128
路由,每个 load-balancer IP 地址分配给服务。因为没有指定 localPref
和 community
字段,所以路由会公告,并将 localPref
设置为 0,且没有 BGP 社区。
apiVersion: metallb.io/v1beta1 kind: AddressPool metadata: name: doc-example-bgp namespace: metallb-system spec: protocol: bgp addresses: - 203.0.113.200/30 - fc00:f853:ccd:e799::/124
26.3.3.5. 示例:带有自定义公告的 BGP 模式
您可以指定复杂的自定义公告。
apiVersion: metallb.io/v1beta1 kind: AddressPool metadata: name: doc-example-bgp-adv namespace: metallb-system spec: protocol: bgp addresses: - 203.0.113.200/30 - fc00:f853:ccd:e799::/124 bgpAdvertisements: - communities: - 65535:65282 aggregationLength: 32 localPref: 100 - communities: - 8000:800 aggregationLength: 30 aggregationLengthV6: 124
在前面的示例中,MetalLB 分配 IP 地址到 203.0.113.200
和 203.0.113.203
之间的范围中的负载均衡服务,并在 fc00:f853:ccd:e799::0
和 fc00:f853:ccd:e799::f
之间。
为了说明两个 BGP 公告,在 MetalLB 分配 IP 地址 203.0.113.200
时,请考虑实例。以该 IP 地址为例,发言人向 BGP 对等点公告两个路由:
-
203.0.113.200/32
,localPref
设置为100
,并且社区设置为知名NO_ADVERTISE
社区的数字值。此规范指示它们可以使用此路由的对等路由器,但它们不应将有关此路由的信息传播到 BGP 对等点。 -
203.0.113.200/30
将 MetalLB 分配的负载均衡器 IP 地址聚合到一个路由中。MetalLB 公告到 BGP 对等点的聚合路由,并将 community 属性设置为8000:800
。BGP 同行将203.0.113.200/30
个路由传播到其他 BGP 同级服务器。当流量通过发言人路由到节点时,使用203.0.113.200/32
路由将流量转发到集群以及与该服务关联的 pod。
当添加更多服务和 MetalLB 从池中分配更多负载均衡器 IP 地址时,对等路由器收到一个本地路由,203.0.113.20x/32
,以及 203.0.113.200/30
聚合路由。您添加的每个服务都会生成 /30
路由,但 MetalLB 会将路由重复数据删除到一个 BGP 公告,然后再与对等路由器通信。
26.3.4. 后续步骤
- 对于 BGP 模式,请参阅 配置 MetalLB BGP peer。
- 配置服务以使用 MetalLB。