28.8. 使用 NodePort 配置集群入口流量
OpenShift Container Platform 提供了从集群外部与集群中运行的服务进行通信的方法。此方法使用了 NodePort
。
28.8.1. 使用 NodePort 使流量进入集群 复制链接链接已复制到粘贴板!
使用 NodePort
类型的 Service
资源,在集群中所有节点的特定端口上公开服务。端口在 Service
资源的 .spec.ports[*].nodePort
字段中指定。
使用节点端口需要额外的端口资源。
NodePort
在节点 IP 地址的静态端口上公开服务。默认情况下,NodePort
在 30000
到 32767
的范围内,这意味着,NodePort
不可能与服务的预期端口匹配。例如:端口 8080
可能会在节点的端口 31020
中公开。
管理员必须确保外部 IP 地址路由到节点。
NodePort
和外部 IP 地址互相独立,可以同时使用它们。
这部分中的流程需要由集群管理员执行先决条件。
28.8.2. 先决条件 复制链接链接已复制到粘贴板!
在开始以下流程前,管理员必须:
- 设置集群联网环境的外部端口,使请求能够到达集群。
确定至少有一个用户具有集群管理员角色。要将此角色添加到用户,请运行以下命令:
oc adm policy add-cluster-role-to-user cluster-admin <user_name>
$ oc adm policy add-cluster-role-to-user cluster-admin <user_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 有一个 OpenShift Container Platform 集群,其至少有一个 master 和至少一个节点,并且集群外有一个对集群具有网络访问权限的系统。此流程假设外部系统与集群位于同一个子网。不同子网上外部系统所需要的额外联网不在本主题的讨论范围内。
28.8.3. 创建项目和服务 复制链接链接已复制到粘贴板!
如果要公开的项目和服务不存在,请创建项目,然后创建该服务。
如果项目和服务都已存在,跳到公开服务以创建路由这一步。
先决条件
-
安装 OpenShift CLI (
oc
),并以集群管理员身份登录。
流程
运行
oc new-project
命令为您的服务创建一个新项目:oc new-project <project_name>
$ oc new-project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
oc new-app
命令来创建服务:oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证该服务是否已创建,请运行以下命令:
oc get svc -n <project_name>
$ oc get svc -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认情况下,新服务没有外部 IP 地址。
28.8.4. 通过创建路由公开服务 复制链接链接已复制到粘贴板!
您可以使用 oc expose
命令,将服务公开为路由。
先决条件
- 已登陆到 OpenShift Container Platform。
流程
登录您想公开的服务所在的项目:
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为应用程序公开节点端口,请输入以下命令修改服务的自定义资源定义 (CRD):
oc edit svc <service_name>
$ oc edit svc <service_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要使用公开的节点端口确认该服务可用,请输入以下命令:
oc get svc -n myproject
$ oc get svc -n myproject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要删除由
oc new-app
命令自动创建的服务,请输入以下命令:oc delete svc nodejs-ex
$ oc delete svc nodejs-ex
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要检查服务节点端口是否已使用
30000-32767
范围内的端口更新,请输入以下命令:oc get svc
$ oc get svc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例输出中,更新的端口为
30327
:输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpd NodePort 172.xx.xx.xx <none> 8443:30327/TCP 109s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpd NodePort 172.xx.xx.xx <none> 8443:30327/TCP 109s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow