13.2.3. 为一个命名空间配置手动分配出口 IP 地址

在 OpenShift Container Platform 中,您可以将一个或多个出口 IP 与一个项目关联。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 通过使用所需 IP 地址指定以下 JSON 对象来更新 NetNamespace 对象:

    $ oc patch netnamespace <project> --type=merge -p \ 1
      '{
        "egressIPs": [ 2
          "<ip_address>"
          ]
      }'
    1
    指定项目的名称。
    2
    指定一个或多个出口 IP 地址。egressIPs 参数是一个数组。

    例如,将 project1 项目分配给 IP 地址 192.168.1.100

    $ oc patch netnamespace project1 --type=merge \
      -p '{"egressIPs": ["192.168.1.100"]}'

    您可以将 egressIPs 设置为位于不同节点上的两个或多个 IP 地址,以提供高可用性。如果设置了多个出口 IP 地址,Pod 会将列表中的第一个 IP 用于出口,但如果托管该 IP 地址的节点失败,Pod 会在短暂的延迟后切换到使用列表中的下一个 IP。

    注意

    由于 OpenShift SDN 管理 NetNamespace 对象,因此只能通过修改现有的 NetNamespace 对象来进行更改。不要创建新的 NetNamespace 对象。

  2. 手动将出口 IP 分配给节点主机。在节点主机上的 HostSubnet 对象中设置 egressIPs 参数。使用以下 JSON,尽可能纳入您要分配给该节点主机的所有 IP:

    $ oc patch hostsubnet <node_name> --type=merge -p \ 1
      '{
        "egressIPs": [ 2
          "<ip_address_1>",
          "<ip_address_N>"
          ]
      }'
    1
    指定节点的名称。
    2
    指定一个或多个出口 IP 地址。egressIPs 字段是一个数组。

    例如,指定 node1 应具有出口 IP 192.168.1.100192.168.1.101192.168.1.102

    $ oc patch hostsubnet node1 --type=merge -p \
      '{"egressIPs": ["192.168.1.100", "192.168.1.101", "192.168.1.102"]}'

    在上例中,project1 的所有出口流量都会被路由到托管指定出口 IP 地址的节点,然后(使用 NAT)连接到那个 IP 地址。