Menu Close

22.4. 将服务配置为使用 MetalLB

作为集群管理员,当添加类型为 LoadBalancer 的服务时,您可以控制 MetalLB 如何分配 IP 地址。

22.4.1. 请求特定 IP 地址

与其他一些负载均衡器实施一样,MetalLB 接受服务规格中的 spec.loadBalancerIP 字段。

如果请求的 IP 地址位于任何地址池中,MetalLB 会分配请求的 IP 地址。如果请求的 IP 地址不在任何范围内,MetalLB 会报告警告。

特定 IP 地址的服务 YAML 示例

apiVersion: v1
kind: Service
metadata:
  name: <service_name>
  annotations:
    metallb.universe.tf/address-pool: <address_pool_name>
spec:
  selector:
    <label_key>: <label_value>
  ports:
    - port: 8080
      targetPort: 8080
      protocol: TCP
  type: LoadBalancer
  loadBalancerIP: <ip_address>

如果 MetalLB 无法分配请求的 IP 地址,服务报告的 EXTERNAL-IP 会报告 <pending>,运行 oc describe service <service_name> 会包括一个类似以下示例的事件。

当 MetalLB 无法分配请求的 IP 地址时的示例

  ...
Events:
  Type     Reason            Age    From                Message
  ----     ------            ----   ----                -------
  Warning  AllocationFailed  3m16s  metallb-controller  Failed to allocate IP for "default/invalid-request": "4.3.2.1" is not allowed in config