×

OpenShift Container Platform提供了与集群外部通信的方法,这些方法用于在集群中运行的服务。此方法使用NodePort

使用NodePort将流量引入集群

使用NodePort类型的Service资源在集群中所有节点上的特定端口上公开服务。端口在Service资源的.spec.ports[*].nodePort字段中指定。

使用节点端口需要额外的端口资源。

NodePort在节点的IP地址上的静态端口上公开服务。NodePort默认在3000032767范围内,这意味着NodePort不太可能与服务的预期端口匹配。例如,端口8080可能在节点上显示为端口31020

管理员必须确保外部IP地址被路由到节点。

NodePort和外部IP是独立的,两者可以同时使用。

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

先决条件

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

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

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

    $ oc adm policy add-cluster-role-to-user cluster-admin <user_name>
  • 需要一个至少包含一个主节点和一个工作节点的 OpenShift Container Platform 集群,以及一个可以访问该集群网络的外部系统。本步骤假设外部系统与集群位于同一子网。对于位于不同子网的外部系统所需的额外网络配置,不在本主题讨论范围内。

创建项目和服务

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

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

先决条件
  • 安装 OpenShift 命令行工具 (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. 要为应用程序公开节点端口,请通过输入以下命令修改服务的自定义资源定义 (CRD):

    $ oc edit svc <service_name>
    示例输出
    spec:
      ports:
      - name: 8443-tcp
        nodePort: 30327 (1)
        port: 8443
        protocol: TCP
        targetPort: 8443
      sessionAffinity: None
      type: NodePort (2)
    1 可选:指定应用程序的节点端口范围。默认情况下,OpenShift Container Platform 会在 30000-32767 范围内选择一个可用的端口。
    2 定义服务类型。
  3. 可选:要确认服务是否已公开节点端口并可用,请输入以下命令:

    $ oc get svc -n myproject
    示例输出
    NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    nodejs-ex           ClusterIP   172.30.217.127   <none>        3306/TCP         9m44s
    nodejs-ex-ingress   NodePort    172.30.107.72    <none>        3306:31345/TCP   39s
  4. 可选:要删除 oc new-app 命令自动创建的服务,请输入以下命令:

    $ oc delete svc nodejs-ex
验证
  • 要检查服务节点端口是否已更新为 30000-32767 范围内的端口,请输入以下命令:

    $ oc get svc

    在以下示例输出中,更新后的端口为 30327

    示例输出
    NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    httpd   NodePort   172.xx.xx.xx    <none>        8443:30327/TCP   109s