$ oc adm policy add-cluster-role-to-user cluster-admin <user_name>
OpenShift Container Platform提供了与集群外部通信的方法,这些方法用于在集群中运行的服务。此方法使用NodePort
。
使用NodePort
类型的Service
资源在集群中所有节点上的特定端口上公开服务。端口在Service
资源的.spec.ports[*].nodePort
字段中指定。
使用节点端口需要额外的端口资源。 |
NodePort
在节点的IP地址上的静态端口上公开服务。NodePort
默认在30000
到32767
范围内,这意味着NodePort
不太可能与服务的预期端口匹配。例如,端口8080
可能在节点上显示为端口31020
。
管理员必须确保外部IP地址被路由到节点。
NodePort
和外部IP是独立的,两者可以同时使用。
本节中的步骤需要集群管理员执行的先决条件。 |
在开始以下步骤之前,管理员必须
将外部端口设置到集群网络环境,以便请求可以到达集群。
确保至少有一个具有集群管理员角色的用户。要将此角色添加到用户,请运行以下命令
$ oc adm policy add-cluster-role-to-user cluster-admin <user_name>
需要一个至少包含一个主节点和一个工作节点的 OpenShift Container Platform 集群,以及一个可以访问该集群网络的外部系统。本步骤假设外部系统与集群位于同一子网。对于位于不同子网的外部系统所需的额外网络配置,不在本主题讨论范围内。
如果要公开的项目和服务不存在,请先创建项目,然后再创建服务。
如果项目和服务已存在,请跳过创建服务的步骤,直接到创建路由以公开服务。
安装 OpenShift 命令行工具 (oc
) 并以集群管理员身份登录。
运行 oc new-project
命令创建一个新的项目。
$ oc new-project <project_name>
使用 oc new-app
命令创建服务。
$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
要验证服务是否已创建,请运行以下命令:
$ 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。
登录到包含要公开服务的项目的项目。
$ oc project <project_name>
要为应用程序公开节点端口,请通过输入以下命令修改服务的自定义资源定义 (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 | 定义服务类型。 |
可选:要确认服务是否已公开节点端口并可用,请输入以下命令:
$ 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
可选:要删除 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