指定地址池的名称。添加服务时,您可以在metallb.universe.tf/address-pool
注释中指定此池名称,以从特定池中选择 IP 地址。文档中始终使用doc-example
、silver
和gold
这些名称。
作为集群管理员,您可以添加、修改和删除地址池。MetalLB 运算符使用地址池自定义资源来设置 MetalLB 可以分配给服务的 IP 地址。示例中使用的命名空间假设命名空间为metallb-system
。
有关如何安装 MetalLB 运算符的更多信息,请参阅关于 MetalLB 和 MetalLB 运算符。
下表描述了IPAddressPool
自定义资源的字段。
字段 | 类型 | 描述 |
---|---|---|
|
|
指定地址池的名称。添加服务时,您可以在 |
|
|
指定地址池的命名空间。指定与 MetalLB 运算符使用的命名空间相同的命名空间。 |
|
|
可选:指定分配给 |
|
|
指定 MetalLB 运算符要分配给服务的 IP 地址列表。您可以在单个池中指定多个范围;它们都将共享相同的设置。以 CIDR 表示法指定每个范围,或者以短划线分隔的起始和结束 IP 地址的形式指定。 |
|
|
可选:指定 MetalLB 是否自动从此池分配 IP 地址。如果您想使用 |
|
|
可选:启用此选项可确保不从池中分配以 .0 和 .255 结尾的 IP 地址。默认值为 |
您可以通过配置spec.serviceAllocation
规范将 IP 地址池中的 IP 地址分配给服务和命名空间。
字段 | 类型 | 描述 |
---|---|---|
|
|
可选:当多个 IP 地址池匹配服务或命名空间时,定义 IP 地址池之间的优先级。数字越小,优先级越高。 |
|
|
可选:指定可以将 IP 地址池中的 IP 地址分配到的命名空间列表。 |
|
|
可选:指定可以使用列表格式中的标签选择器从 IP 地址池分配 IP 地址的命名空间标签。 |
|
|
可选:指定可以使用列表格式中的标签选择器从地址池分配 IP 地址的服务标签。 |
作为集群管理员,您可以向集群添加地址池以控制 MetalLB 可以分配给负载均衡器服务的 IP 地址。
安装 OpenShift CLI(oc
)。
以具有cluster-admin
权限的用户身份登录。
创建一个文件(例如ipaddresspool.yaml
),其内容类似于以下示例
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
namespace: metallb-system
name: doc-example
labels: (1)
zone: east
spec:
addresses:
- 203.0.113.1-203.0.113.10
- 203.0.113.65-203.0.113.75
1 | 分配给IPAddressPool 的此标签可以在BGPAdvertisement CRD中的ipAddressPoolSelectors 中引用,以将IPAddressPool 与广告关联起来。 |
应用 IP 地址池的配置
$ oc apply -f ipaddresspool.yaml
查看地址池
$ oc describe -n metallb-system IPAddressPool doc-example
Name: doc-example
Namespace: metallb-system
Labels: zone=east
Annotations: <none>
API Version: metallb.io/v1beta1
Kind: IPAddressPool
Metadata:
...
Spec:
Addresses:
203.0.113.1-203.0.113.10
203.0.113.65-203.0.113.75
Auto Assign: true
Events: <none>
确认地址池名称(例如doc-example
)和 IP 地址范围显示在输出中。
作为集群管理员,您可以向集群添加地址池以控制 MetalLB 可以分配给创建的 VLAN 上负载均衡器服务的 IP 地址。
安装 OpenShift CLI(oc
)。
配置单独的 VLAN。
以具有cluster-admin
权限的用户身份登录。
创建一个文件(例如ipaddresspool-vlan.yaml
),该文件类似于以下示例
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
namespace: metallb-system
name: doc-example-vlan
labels:
zone: east (1)
spec:
addresses:
- 192.168.100.1-192.168.100.254 (2)
1 | 分配给IPAddressPool 的此标签可以在BGPAdvertisement CRD中的ipAddressPoolSelectors 中引用,以将IPAddressPool 与广告关联起来。 |
2 | 此 IP 范围必须与网络上分配给 VLAN 的子网匹配。要支持第 2 层 (L2) 模式,IP 地址范围必须与集群节点位于同一个子网中。 |
应用 IP 地址池的配置
$ oc apply -f ipaddresspool-vlan.yaml
要确保此配置应用于 VLAN,您需要将spec
gatewayConfig.ipForwarding
设置为Global
。
运行以下命令以编辑网络配置自定义资源 (CR)
$ oc edit network.config.openshift/cluster
更新spec.defaultNetwork.ovnKubernetesConfig
部分以包含设置为Global
的gatewayConfig.ipForwarding
。它应该如下所示
...
spec:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
defaultNetwork:
type: OVNKubernetes
ovnKubernetesConfig:
gatewayConfig:
ipForwarding: Global
...
您可以使用 CIDR 表示法指定 IP 地址范围。您可以将 CIDR 表示法与使用连字符分隔上下界的表示法结合使用。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: doc-example-cidr
namespace: metallb-system
spec:
addresses:
- 192.168.100.0/24
- 192.168.200.0/24
- 192.168.255.1-192.168.255.5
您可以将autoAssign
字段设置为false
以阻止 MetalLB 自动分配池中的 IP 地址。添加服务时,您可以请求池中的特定 IP 地址,也可以在注释中指定池名称以请求池中的任何 IP 地址。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: doc-example-reserved
namespace: metallb-system
spec:
addresses:
- 10.0.100.0/28
autoAssign: false
您可以添加使用 IPv4 和 IPv6 的地址池。您可以在addresses
列表中指定多个范围,就像几个 IPv4 示例一样。
服务是否分配单个 IPv4 地址、单个 IPv6 地址或两者兼有取决于您添加服务的方式。spec.ipFamilies
和spec.ipFamilyPolicy
字段控制如何将 IP 地址分配给服务。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: doc-example-combined
namespace: metallb-system
spec:
addresses:
- 10.0.100.0/28
- 2002:2:2::1-2002:2:2::100
您可以将来自IPAddressPool
的 IP 地址分配给您指定的服务和命名空间。
如果您将服务或命名空间分配给多个 IP 地址池,MetalLB 将使用来自优先级较高的 IP 地址池中的可用 IP 地址。如果来自已分配的高优先级 IP 地址池的 IP 地址不可用,MetalLB 将使用来自优先级较低或无优先级的 IP 地址池的可用 IP 地址。
您可以使用 |
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: doc-example-service-allocation
namespace: metallb-system
spec:
addresses:
- 192.168.20.0/24
serviceAllocation:
priority: 50 (1)
namespaces: (2)
- namespace-a
- namespace-b
namespaceSelectors: (3)
- matchLabels:
zone: east
serviceSelectors: (4)
- matchExpressions:
- key: security
operator: In
values:
- S1
1 | 为地址池分配优先级。数字越小,优先级越高。 |
2 | 以列表格式将一个或多个命名空间分配到 IP 地址池。 |
3 | 使用列表格式中的标签选择器将一个或多个命名空间标签分配到 IP 地址池。 |
4 | 使用列表格式中的标签选择器将一个或多个服务标签分配到 IP 地址池。 |