13.4. 使用负载均衡器配置集群入口流量

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

13.4.1. 使用负载均衡器使流量进入集群

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

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

注意

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

注意

这部分中的流程需要由集群管理员执行先决条件。

13.4.2. 先决条件

在开始以下流程前,管理员必须:

  • 设置集群联网环境的外部端口,使请求能够到达集群。
  • 确定至少有一个用户具有集群管理员角色。要将此角色添加到用户,请运行以下命令:

    oc adm policy add-cluster-role-to-user cluster-admin username
  • 有一个 OpenShift Container Platform 集群,其至少有一个 master 和至少一个节点,并且集群外有一个对集群具有网络访问权限的系统。此流程假设外部系统与集群位于同一个子网。不同子网上外部系统所需要的额外联网不在本主题的讨论范围内。

13.4.3. 创建项目和服务

如果您要公开的项目和服务尚不存在,请首先创建项目,再创建服务。

如果项目和服务都已存在,跳到公开服务以创建路由这一步。

先决条件

  • 按照 oc CLI 并以一个集群管理员身份登陆。

流程

  1. 为您的服务创建一个新项目:

    $ oc new-project <project_name>

    例如:

    $ oc new-project myproject
  2. 使用 oc new-app 命令来创建服务。例如:

    $ oc new-app \
        -e MYSQL_USER=admin \
        -e MYSQL_PASSWORD=redhat \
        -e MYSQL_DATABASE=mysqldb \
        registry.redhat.io/rhscl/mysql-80-rhel7
  3. 运行以下命令,以查看新服务是否已创建:

    $ oc get svc -n myproject

    输出示例

    NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    mysql-80-rhel7   ClusterIP   172.30.63.31   <none>        3306/TCP   4m55s

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

13.4.4. 通过创建路由公开服务

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

流程

公开服务:

  1. 登录 OpenShift Container Platform。
  2. 登录您想公开的服务所在的项目。

    $ oc project project1
  3. 运行以下命令以公开路由:

    $ oc expose service <service_name>

    例如:

    $ oc expose service mysql-80-rhel7

    输出示例

    route "mysql-80-rhel7" exposed

  4. 使用 cURL 等工具来确保您可以使用服务的集群 IP 地址来访问该服务:

    $ curl <pod_ip>:<port>

    例如:

    $ curl 172.30.131.89: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)]>

13.4.5. 创建负载均衡器服务

使用以下流程来创建负载均衡器服务。

先决条件

  • 确保您要公开的项目和服务已经存在。

流程

创建负载均衡器服务:

  1. 登录 OpenShift Container Platform。
  2. 加载您要公开的服务所在的项目。

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

    负载均衡器配置文件示例

    apiVersion: v1
    kind: Service
    metadata:
      name: egress-2 1
    spec:
      ports:
      - name: db
        port: 3306 2
      loadBalancerIP:
      type: LoadBalancer 3
      selector:
        name: mysql 4

    1
    为负载均衡器服务输入一个描述性名称。
    2
    输入您要公开的服务所侦听的同一个端口
    3
    输入 loadbalancer 作为类型。
    4
    输入服务的名称。
  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. 在 master 上,使用 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)]>