×

OpenShift Container Platform 提供了与集群外部与集群中运行的服务进行通信的方法。此方法使用负载均衡器。

使用负载均衡器将流量引入集群

如果不需要特定的外部 IP 地址,您可以配置负载均衡器服务以允许外部访问 OpenShift Container Platform 集群。

负载均衡器服务分配唯一的 IP。负载均衡器具有单个边缘路由器 IP,它可以是虚拟 IP (VIP),但在初始负载均衡时仍然是单个机器。

如果配置了池,则是在基础架构级别完成的,而不是由集群管理员完成的。

本节中的步骤需要由集群管理员执行的先决条件。

先决条件

在开始以下步骤之前,管理员必须

  • 将外部端口设置为集群网络环境,以便请求可以到达集群。

  • 确保至少有一个具有集群管理员角色的用户。要将此角色添加到用户,请运行以下命令

    $ oc adm policy add-cluster-role-to-user cluster-admin username
  • 拥有至少一个主节点和至少一个节点的 OpenShift Container Platform 集群,以及具有对集群的网络访问权限的集群外部系统。此过程假设外部系统与集群位于同一子网中。对于不同子网上的外部系统所需的额外网络配置超出了本主题的范围。

创建项目和服务

如果要公开的项目和服务不存在,请创建项目,然后创建服务。

如果项目和服务已存在,请跳到关于公开服务以创建路由的步骤。

先决条件
  • 安装 OpenShift CLI (oc) 并以集群管理员身份登录。

步骤
  1. 通过运行 oc new-project 命令创建一个新的项目

    $ oc new-project <project_name>
  2. 使用 oc new-app 命令创建您的服务

    $ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
  3. 要验证服务是否已创建,请运行以下命令

    $ oc get svc -n <project_name>
    示例输出
    NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    nodejs-ex   ClusterIP   172.30.197.157   <none>        8080/TCP   70s

    默认情况下,新服务没有外部 IP 地址。

通过创建路由公开服务

您可以使用 oc expose 命令将服务公开为路由。

先决条件
  • 您已登录到 OpenShift Container Platform。

步骤
  1. 登录到您要公开的服务所在的项目

    $ oc project <project_name>
  2. 运行 oc expose service 命令以公开路由

    $ oc expose service nodejs-ex
    示例输出
    route.route.openshift.io/nodejs-ex exposed
  3. 要验证服务是否已公开,您可以使用诸如 curl 之类的工具来检查从集群外部是否可以访问该服务。

    1. 要查找路由的主机名,请输入以下命令

      $ oc get route
      示例输出
      NAME        HOST/PORT                        PATH   SERVICES    PORT       TERMINATION   WILDCARD
      nodejs-ex   nodejs-ex-myproject.example.com         nodejs-ex   8080-tcp                 None
    2. 要检查主机是否响应 GET 请求,请输入以下命令

      示例 curl 命令
      $ curl --head nodejs-ex-myproject.example.com
      示例输出
      HTTP/1.1 200 OK
      ...

创建负载均衡器服务

使用以下步骤创建负载均衡器服务。

先决条件
  • 确保您要公开的项目和服务存在。

  • 您的云提供商支持负载均衡器。

步骤

要创建负载均衡器服务

  1. 登录到 OpenShift Container Platform。

  2. 加载您要公开的服务所在的项目。

    $ oc project project1
  3. 在控制平面节点上打开一个文本文件,粘贴以下文本,并根据需要编辑文件

    负载均衡器配置示例文件
    apiVersion: v1
    kind: Service
    metadata:
      name: egress-2 (1)
    spec:
      ports:
      - name: db
        port: 3306 (2)
      loadBalancerIP:
      loadBalancerSourceRanges: (3)
      - 10.0.0.0/8
      - 192.168.0.0/16
      type: LoadBalancer (4)
      selector:
        name: mysql (5)
    1 输入负载均衡器服务的描述性名称。
    2 输入要公开的服务正在监听的相同端口。
    3 输入要限制通过负载均衡器流量的特定IP地址列表。如果云提供商不支持此功能,则忽略此字段。
    4 输入Loadbalancer作为类型。
    5 输入服务的名称。

    要将通过负载均衡器的流量限制为特定IP地址,建议使用 Ingress Controller 字段spec.endpointPublishingStrategy.loadBalancer.allowedSourceRanges。请勿设置loadBalancerSourceRanges字段。

  4. 保存并退出文件。

  5. 运行以下命令创建服务

    $ oc create -f <file-name>

    例如

    $ oc create -f mysql-lb.yaml
  6. 执行以下命令查看新服务

    $ oc get svc
    示例输出
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP                             PORT(S)          AGE
    egress-2   LoadBalancer   172.30.22.226   ad42f5d8b303045-487804948.example.com   3306:30357/TCP   15m

    如果启用了云提供商,则服务会自动分配一个外部IP地址。

  7. 在主节点上,使用 cURL 等工具,确保您可以使用公网 IP 地址访问该服务

    $ curl <public-ip>:<port>

    例如

    $ curl 172.29.121.74:3306

    本节中的示例使用 MySQL 服务,这需要一个客户端应用程序。如果您收到包含Got packets out of order消息的字符字符串,则表示您已连接到服务。

    如果您有 MySQL 客户端,请使用标准 CLI 命令登录

    $ mysql -h 172.30.131.89 -u admin -p
    示例输出
    Enter password:
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    
    MySQL [(none)]>