33.6. 配置 MetalLB BGP peer

作为集群管理员,您可以添加、修改和删除边框网关协议(BGP)对等点。MetalLB Operator 使用 BGP peer 自定义资源来标识 MetalLB speaker pod 联系的对等者启动 BGP 会话。对等点接收 MetalLB 分配给服务的负载均衡器 IP 地址的路由公告。

33.6.1. 关于 BGP peer 自定义资源

下表中描述了 BGP peer 自定义资源的字段。

表 33.4. MetalLB BGP peer 自定义资源

字段类型描述

metadata.name

string

指定 BGP peer 自定义资源的名称。

metadata.namespace

string

指定 BGP peer 自定义资源的命名空间。

spec.myASN

整数

为 BGP 会话的本地末尾指定 Autonomous System 号。在您添加的所有 BGP peer 自定义资源中指定相同的值。范围是从 04294967295

spec.peerASN

整数

为 BGP 会话的远程端指定 Autonomous System 号。范围是从 04294967295

spec.peerAddress

string

指定建立 BGP 会话的对等点的 IP 地址。

spec.sourceAddress

string

可选:指定建立 BGP 会话时要使用的 IP 地址。该值必须是 IPv4 地址。

spec.peerPort

整数

可选:指定用来建立 BGP 会话的对等端口。范围为 016384

spec.holdTime

string

可选:指定到 BGP 对等点的保留时间。最小值为 3 秒(3s)。常见的单位是秒和分钟,如 3s1m5m30s。要更快地检测路径失败,还要配置 BFD。

spec.keepaliveTime

string

可选:指定向 BGP 对等发送保留消息之间的最大间隔。如果指定此字段,还必须为 holdTime 字段指定一个值。指定的值必须小于 holdTime 字段的值。

spec.routerID

string

可选:指定要公告到 BGP peer 的路由器 ID。如果指定了此字段,则必须在添加的每个 BGP peer 自定义资源中指定相同的值。

spec.password

string

可选:指定 MD5 密码,以发送到执行 TCP MD5 经过身份验证的 BGP 会话的路由器的对等点。

spec.passwordSecret

string

可选:指定 BGP Peer 的身份验证 secret 的名称。secret 必须存在于 metallb 命名空间中,且类型为 basic-auth。

spec.bfdProfile

string

可选:指定 BFD 配置集的名称。

spec.nodeSelectors

object[]

可选:使用匹配表达式和匹配标签指定选择器,以控制哪些节点可以连接到 BGP 对等点。

spec.ebgpMultiHop

布尔值

可选:指定 BGP peer 是否有多个网络跃点。如果 BGP peer 没有直接连接到同一网络,则 speaker 无法建立 BGP 会话,除非此字段设置为 true。此字段适用于 外部 BGP。外部 BGP 是用来描述当 BGP 对等点属于不同的自治系统的术语。

注意

passwordSecret 字段与 password 字段相互排斥,包含对包含要使用的密码的 secret 的引用。设置这两个字段会导致解析失败。

33.6.2. 配置 BGP peer

作为集群管理员,您可以添加 BGP peer 自定义资源来与网络路由器交换路由信息,并为服务公告 IP 地址。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 以具有 cluster-admin 权限的用户身份登录。
  • 使用 BGP 公告配置 MetalLB。

流程

  1. 创建一个文件,如 bgppeer.yaml,其内容类似以下示例:

    apiVersion: metallb.io/v1beta2
    kind: BGPPeer
    metadata:
      namespace: metallb-system
      name: doc-example-peer
    spec:
      peerAddress: 10.0.0.1
      peerASN: 64501
      myASN: 64500
      routerID: 10.10.10.10
  2. 应用 BGP peer 的配置:

    $ oc apply -f bgppeer.yaml

33.6.3. 为给定地址池配置一组特定的 BGP 对等组

此流程演示了如何:

  • 配置一组地址池(pool1pool2)。
  • 配置一组 BGP 对等点(pe1peer2)。
  • 配置 BGP 广告,将 pool1 分配给 peer1,将 pool2 分配给 peer2

先决条件

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

流程

  1. 创建地址池 pool1

    1. 创建一个文件,如 ipaddresspool1.yaml,其内容类似以下示例:

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: pool1
      spec:
        addresses:
          - 4.4.4.100-4.4.4.200
          - 2001:100:4::200-2001:100:4::400
    2. 为 IP 地址池 pool1 应用配置:

      $ oc apply -f ipaddresspool1.yaml
  2. 创建地址池 pool2

    1. 创建一个文件,如 ipaddresspool2.yaml,其内容类似以下示例:

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: pool2
      spec:
        addresses:
          - 5.5.5.100-5.5.5.200
          - 2001:100:5::200-2001:100:5::400
    2. 为 IP 地址池 pool2 应用配置:

      $ oc apply -f ipaddresspool2.yaml
  3. 创建 BGP peer1

    1. 创建一个文件,如 bgppeer1.yaml,内容类似以下示例:

      apiVersion: metallb.io/v1beta2
      kind: BGPPeer
      metadata:
        namespace: metallb-system
        name: peer1
      spec:
        peerAddress: 10.0.0.1
        peerASN: 64501
        myASN: 64500
        routerID: 10.10.10.10
    2. 应用 BGP peer 的配置:

      $ oc apply -f bgppeer1.yaml
  4. 创建 BGP peer2

    1. 创建一个文件,如 bgppeer2.yaml,其内容类似以下示例:

      apiVersion: metallb.io/v1beta2
      kind: BGPPeer
      metadata:
        namespace: metallb-system
        name: peer2
      spec:
        peerAddress: 10.0.0.2
        peerASN: 64501
        myASN: 64500
        routerID: 10.10.10.10
    2. 应用 BGP peer2 的配置:

      $ oc apply -f bgppeer2.yaml
  5. 创建 BGP 广告 1。

    1. 创建一个文件,如 bgpadvertisement1.yaml,内容类似以下示例:

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: bgpadvertisement-1
        namespace: metallb-system
      spec:
        ipAddressPools:
          - pool1
        peers:
          - peer1
        communities:
          - 65535:65282
        aggregationLength: 32
        aggregationLengthV6: 128
        localPref: 100
    2. 应用配置:

      $ oc apply -f bgpadvertisement1.yaml
  6. 创建 BGP 广告 2。

    1. 创建一个文件,如 bgpadvertisement2.yaml,内容类似以下示例:

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: bgpadvertisement-2
        namespace: metallb-system
      spec:
        ipAddressPools:
          - pool2
        peers:
          - peer2
        communities:
          - 65535:65282
        aggregationLength: 32
        aggregationLengthV6: 128
        localPref: 100
    2. 应用配置:

      $ oc apply -f bgpadvertisement2.yaml

33.6.4. BGP 对等配置示例

33.6.4.1. 示例:限制节点连接到 BGP peer

您可以指定节点选择器字段来控制哪些节点可以连接到 BGP 对等点。

apiVersion: metallb.io/v1beta2
kind: BGPPeer
metadata:
  name: doc-example-nodesel
  namespace: metallb-system
spec:
  peerAddress: 10.0.20.1
  peerASN: 64501
  myASN: 64500
  nodeSelectors:
  - matchExpressions:
    - key: kubernetes.io/hostname
      operator: In
      values: [compute-1.example.com, compute-2.example.com]

33.6.4.2. 示例:为 BGP peer 指定 BFD 配置集

您可以指定一个 BFD 配置集,以与 BGP 对等点关联。BFD 复杂的 BGP 通过单独提供与 BGP 间通信故障的更快速检测。

apiVersion: metallb.io/v1beta2
kind: BGPPeer
metadata:
  name: doc-example-peer-bfd
  namespace: metallb-system
spec:
  peerAddress: 10.0.20.1
  peerASN: 64501
  myASN: 64500
  holdTime: "10s"
  bfdProfile: doc-example-bfd-profile-full
注意

删除双向转发检测 (BFD) 配置集并删除添加到边框网关协议 (BGP) 对等资源中的 bfdProfile 不会禁用 BFD。相反,BGP 对等点开始使用默认的 BFD 配置集。要从 BGP peer 资源禁用 BFD,请删除 BGP 对等配置,并在没有 BFD 配置集的情况下重新创建它。如需更多信息,请参阅 BZ#2050824

33.6.4.3. 示例:为双栈网络指定 BGP 对等点

要支持双栈网络,请为 IPv4 添加一个 BGP peer 自定义资源,并为 IPv6 添加一个 BGP peer 自定义资源。

apiVersion: metallb.io/v1beta2
kind: BGPPeer
metadata:
  name: doc-example-dual-stack-ipv4
  namespace: metallb-system
spec:
  peerAddress: 10.0.20.1
  peerASN: 64500
  myASN: 64500
---
apiVersion: metallb.io/v1beta2
kind: BGPPeer
metadata:
  name: doc-example-dual-stack-ipv6
  namespace: metallb-system
spec:
  peerAddress: 2620:52:0:88::104
  peerASN: 64500
  myASN: 64500

33.6.5. 后续步骤