×

您可以使用 MetalLB 实现或 IP 故障转移部署将 ExternalIP 资源附加到服务,以便服务可用于 OpenShift Container Platform 集群外部的流量。这种方式托管外部 IP 地址仅适用于在裸机硬件上安装的集群。

您必须确保正确配置外部网络基础设施以将流量路由到服务。

前提条件

  • 您的集群已配置启用 ExternalIPs。有关更多信息,请阅读 为服务配置 ExternalIPs

    不要将相同的 ExternalIP 用作出口 IP。

将 ExternalIP 附加到服务

您可以将 ExternalIP 资源附加到服务。如果您已将集群配置为自动将资源附加到服务,则可能无需手动将 ExternalIP 附加到服务。

此过程中的示例使用了一种场景,该场景在具有 IP 故障转移配置的集群中手动将 ExternalIP 资源附加到服务。

步骤
  1. 通过在您的 CLI 中输入以下命令来确认 ExternalIP 资源的兼容 IP 地址范围

    $ oc get networks.config cluster -o jsonpath='{.spec.externalIP}{"\n"}'

    如果设置了autoAssignCIDRs并且您未在 ExternalIP 资源中为spec.externalIPs指定值,则 OpenShift Container Platform 会自动将 ExternalIP 分配给新的Service对象。

  2. 选择以下选项之一将 ExternalIP 资源附加到服务

    1. 如果您正在创建新的服务,请在spec.externalIPs字段和allowedCIDRs参数中指定一个或多个有效 IP 地址的值。

      支持 ExternalIP 资源的服务 YAML 配置文件示例
      apiVersion: v1
      kind: Service
      metadata:
        name: svc-with-externalip
      spec:
        externalIPs:
          policy:
            allowedCIDRs:
            - 192.168.123.0/28
    2. 如果您要将 ExternalIP 附加到现有服务,请输入以下命令。将<name>替换为服务名称。将<ip_address>替换为有效的 ExternalIP 地址。您可以提供用逗号分隔的多个 IP 地址。

      $ oc patch svc <name> -p \
        '{
          "spec": {
            "externalIPs": [ "<ip_address>" ]
          }
        }'

      例如

      $ oc patch svc mysql-55-rhel7 -p '{"spec":{"externalIPs":["192.174.120.10"]}}'
      示例输出
      "mysql-55-rhel7" patched
  3. 要确认 ExternalIP 地址已附加到服务,请输入以下命令。如果您为新服务指定了 ExternalIP,则必须先创建该服务。

    $ oc get svc
    示例输出
    NAME               CLUSTER-IP      EXTERNAL-IP     PORT(S)    AGE
    mysql-55-rhel7     172.30.131.89   192.174.120.10  3306/TCP   13m