10.4. 使用服务外部 IP 配置集群入口流量

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

10.4.1. 使用服务外部 IP 使流量进入集群

若要公开服务,一种方法是将外部 IP 地址直接分配给您想从集群外访问的服务。

必须在您的基础架构平台中置备您要使用的外部 IP 地址,并附加到集群节点。

通过对服务使用外部 IP,OpenShift Container Platform 会设置 NAT 规则,允许到达附加到该 IP 地址的任何集群节点的流量发送到其中一个内部 Pod。这与内部服务 IP 地址类似,但外部 IP 会告知 OpenShift Container Platform 此服务也应通过给定的 IP 对外部公开。管理员必须将该 IP 地址分配给集群中某一节点上的主机(节点)接口。另外,该地址也可用作虚拟 IP (VIP)。

这些 IP 地址不由 OpenShift Container Platform 管理,管理员负责确保流量能通过此 IP 到达节点。

注意

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

先决条件

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

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

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

10.4.2. 创建项目和服务

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

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

先决条件

  • 按照 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 地址。

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

您可以使用 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)]>