26.3. 配置 MetalLB 地址池


作为集群管理员,您可以添加、修改和删除地址池。MetalLB Operator 使用地址池自定义资源来设置 MetalLB 可分配给服务的 IP 地址。

26.3.1. 关于地址池自定义资源

下表中描述了地址池自定义资源的字段。

表 26.1. MetalLB 地址池自定义资源
字段类型描述

metadata.name

字符串

指定地址池的名称。添加服务时,您可以在 metallb.universe.tf/address-pool 注解中指定这个池名称,以从特定池中选择 IP 地址。在整个文档中使用名称 doc-example, silver, 和 gold

metadata.namespace

字符串

指定地址池的命名空间。指定 MetalLB Operator 使用的同一命名空间。

spec.protocol

字符串

指定向对等节点发布负载均衡器 IP 地址的协议。指定 layer2bgp

spec.autoAssign

布尔值

可选:指定 MetalLB 是否从这个池自动分配 IP 地址。如果要使用 metallb.universe.tf/address-pool 注解从这个池中明确请求 IP 地址,请指定 false。默认值为 true

spec.addresses

数组

指定分配给服务的 MetalLB 的 IP 地址列表。您可以在单个池中指定多个范围。以 CIDR 表示法指定每个范围,或者指定为以连字符隔开的起始和结束 IP 地址。

spec.bgpAdvertisements

object

可选:默认情况下,BGP 模式向配置的对等点公告每个分配的负载均衡器 IP 地址,且没有额外的 BGP 属性。对等路由器收到每个服务 IP 地址的一个 /32 路由,BGP 本地首选项设置为零,没有 BGP 社区。使用此字段创建自定义广告。

bgpAdvertisements 对象的字段在下表中定义:

表 26.2. BGP 公告配置
字段类型描述

aggregationLength

整数

可选:指定 32 位 CIDR 掩码中包含的位数。为了聚合发言人向 BGP 对等者公告的路由,掩码将应用于多个服务 IP 地址的路由,speaker 会公告聚合的路由。例如,聚合长度为 24,speaker 可以聚合多个 10.0.1.x/32 服务 IP 地址并公告一个 10.0.1.0/24 路由。

aggregationLengthV6

整数

可选:指定 128 位 CIDR 掩码中包含的位数。例如,在聚合长度为 124 时,speaker 可以聚合几个 fc00:f853:0ccd:e799::x/128 服务 IP 地址,并公告一个 fc00:f853:0ccd:e799::0/124 路由。

community

数组

可选:指定一个或多个 BGP 社区。每个社区都被指定为两个 16 位值,用冒号字符分隔。知名的社区必须指定为 16 位值:

  • NO_EXPORT: 65535:65281
  • NO_ADVERTISE: 65535:65282
  • NO_EXPORT_SUBCONFED: 65535:65283

localPref

整数

可选:指定这个广播的本地首选项。此 BGP 属性适用于 Autonomous System 中的 BGP 会话。

26.3.2. 配置地址池

作为集群管理员,您可以在集群中添加地址池来控制 MetalLB 可分配给负载均衡器服务的 IP 地址。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 创建一个包含类似以下示例内容的文件,如 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
  2. 为地址池应用配置:

    $ 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.ipFamiliesspec.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 地址分配给服务。因为没有指定 localPrefcommunity 字段,所以路由会公告,并将 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.200203.0.113.203 之间的范围中的负载均衡服务,并在 fc00:f853:ccd:e799::0fc00:f853:ccd:e799::f 之间。

为了说明两个 BGP 公告,在 MetalLB 分配 IP 地址 203.0.113.200 时,请考虑实例。以该 IP 地址为例,发言人向 BGP 对等点公告两个路由:

  • 203.0.113.200/32localPref 设置为 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. 后续步骤

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.