30.5. 关于 IP 地址池的广告
您可以配置 MetalLB,以便使用第 2 层协议、BGP 协议或两者来广告 IP 地址。通过第 2 层,MetalLB 提供了容错的外部 IP 地址。使用 BGP,MetalLB 为外部 IP 地址和负载均衡提供容错功能。
MetalLB 支持将 L2 和 BGP 用于同一组 IP 地址。
MetalLB 提供了将地址池分配给特定 BGP 对等对象到网络上节点子集的灵活性。这可以实现更复杂的配置,例如促进节点隔离或网络分段。
30.5.1. 关于 BGPAdvertisement 自定义资源
BGPAdvertise
对象的字段在下表中定义:
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 BGP 广告的名称。 |
|
| 指定 BGP 广告的命名空间。指定 MetalLB Operator 使用的同一命名空间。 |
|
|
可选:指定 32 位 CIDR 掩码中包含的位数。为了聚合发言人向 BGP 对等者公告的路由,掩码将应用于多个服务 IP 地址的路由,speaker 会公告聚合的路由。例如,聚合长度为 |
|
|
可选:指定 128 位 CIDR 掩码中包含的位数。例如,在聚合长度为 |
|
| 可选:指定一个或多个 BGP 社区。每个社区都被指定为两个 16 位值,用冒号字符分隔。知名的社区必须指定为 16 位值:
|
|
| 可选:指定这个广播的本地首选项。此 BGP 属性适用于 Autonomous System 中的 BGP 会话。 |
|
|
可选:用于使用这个广告进行广告的 |
|
|
可选:使用这个广告进行广告的 |
|
|
可选: 注意 对这个功能的支持只是一个技术预览。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。 |
|
| 可选: Peers 限制 BGP 对等点来公告所选池的 IP。如果为空,负载均衡器 IP 会声明所有配置了 BGP 对等点。 |
30.5.2. 使用 BGP 公告和基本用例配置 MetalLB
按如下所示配置 MetalLB,使对等 BGP 路由器为每个 MetalLB 分配为服务的负载均衡器 IP 地址接收一个 203.0.113.200/32
路由和一个 fc00:f853:ccd:e799::1/128
路由。因为没有指定 localPref
和 community
字段,所以路由会公告,并将 localPref
设置为 0,且没有 BGP 社区。
30.5.2.1. 示例:使用 BGP 传输基本地址池配置
按如下所示配置 MetalLB,以便使用 BGP 协议公告 IPAddressPool
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-bgp-basic spec: addresses: - 203.0.113.200/30 - fc00:f853:ccd:e799::/124
应用 IP 地址池的配置:
$ oc apply -f ipaddresspool.yaml
创建 BGP 公告。
创建一个文件,如
bgpadvertisement.yaml
,内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-basic namespace: metallb-system spec: ipAddressPools: - doc-example-bgp-basic
应用配置:
$ oc apply -f bgpadvertisement.yaml
30.5.3. 使用 BGP 广告和高级用例配置 MetalLB
按如下所示配置 MetalLB,使得 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 公告,然后再与对等路由器通信。
30.5.3.1. 示例:使用 BGP 传输高级地址池配置
按如下所示配置 MetalLB,以便使用 BGP 协议公告 IPAddressPool
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-bgp-adv labels: zone: east spec: addresses: - 203.0.113.200/30 - fc00:f853:ccd:e799::/124 autoAssign: false
应用 IP 地址池的配置:
$ oc apply -f ipaddresspool.yaml
创建 BGP 公告。
创建一个文件,如
bgpadvertisement1.yaml
,内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-adv-1 namespace: metallb-system spec: ipAddressPools: - doc-example-bgp-adv communities: - 65535:65282 aggregationLength: 32 localPref: 100
应用配置:
$ oc apply -f bgpadvertisement1.yaml
创建一个文件,如
bgpadvertisement2.yaml
,内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-adv-2 namespace: metallb-system spec: ipAddressPools: - doc-example-bgp-adv communities: - 8000:800 aggregationLength: 30 aggregationLengthV6: 124
应用配置:
$ oc apply -f bgpadvertisement2.yaml
30.5.4. 关于 L2Advertisement 自定义资源
l2Advertise
对象的字段在下表中定义:
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 L2 广告的名称。 |
|
| 指定 L2 广告的命名空间。指定 MetalLB Operator 使用的同一命名空间。 |
|
|
可选:用于使用这个广告进行广告的 |
|
|
可选:使用这个广告进行广告的 |
|
|
可选: 重要 限制节点,因为下一跃点只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。 有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。 |
30.5.5. 使用 L2 广告配置 MetalLB
按如下所示配置 MetalLB,以便使用 L2 协议广告 IPAddressPool
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-l2 spec: addresses: - 4.4.4.0/24 autoAssign: false
应用 IP 地址池的配置:
$ oc apply -f ipaddresspool.yaml
创建 L2 广告。
创建一个文件,如
l2advertisement.yaml
,内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2advertisement namespace: metallb-system spec: ipAddressPools: - doc-example-l2
应用配置:
$ oc apply -f l2advertisement.yaml
30.5.6. 使用 L2 广告和标签配置 MetalLB
BGPAdvertisement
和 L2Advertisement
中的 ipAddress
Pools 字段用于根据分配给 IPAddressPool
的标签将 IPAddressPool
与广告相关联。
本例演示了如何配置 MetalLB,以便通过配置 ipAddressPoolSelectors
字段来广告使用 L2 协议的 IPAddressPools
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-l2-label labels: zone: east spec: addresses: - 172.31.249.87/32
应用 IP 地址池的配置:
$ oc apply -f ipaddresspool.yaml
使用
ipAddressPoolSelectors
创建 L2 广告广告 IP。创建一个文件,如
l2advertisement.yaml
,内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2advertisement-label namespace: metallb-system spec: ipAddressPoolSelectors: - matchExpressions: - key: zone operator: In values: - east
应用配置:
$ oc apply -f l2advertisement.yaml