22.5. 使用负载均衡器配置集群入口流量
OpenShift Container Platform 提供了从集群外部与集群中运行的服务进行通信的方法。此方法使用了负载均衡器。
22.5.1. 使用负载均衡器使流量进入集群
如果不需要具体的外部 IP 地址,您可以配置负载均衡器服务,以便从外部访问 OpenShift Container Platform 集群。
负载均衡器服务分配唯一 IP。负载均衡器有单一边缘路由器 IP,它可以是虚拟 IP (VIP),但仍然是一台用于初始负载均衡的计算机。
如果配置了池,则会在基础架构一级进行,而不是由集群管理员完成。
这部分中的流程需要由集群管理员执行先决条件。
22.5.2. 先决条件
在开始以下流程前,管理员必须:
- 设置集群联网环境的外部端口,使请求能够到达集群。
- 确定至少有一个用户具有集群管理员角色。要将此角色添加到用户,请运行以下命令: - oc adm policy add-cluster-role-to-user cluster-admin username - $ oc adm policy add-cluster-role-to-user cluster-admin username- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 有一个 OpenShift Container Platform 集群,其至少有一个 master 和至少一个节点,并且集群外有一个对集群具有网络访问权限的系统。此流程假设外部系统与集群位于同一个子网。不同子网上外部系统所需要的额外联网不在本主题的讨论范围内。
22.5.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 地址。 
22.5.4. 通过创建路由公开服务
					您可以使用 oc expose 命令,将服务公开为路由。
				
先决条件
- 已登陆到 OpenShift Container Platform。
流程
- 登录您想公开的服务所在的项目: - oc project <project_name> - $ oc project <project_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行 - oc expose service命令以公开路由:- oc expose service nodejs-ex - $ oc expose service nodejs-ex- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - route.route.openshift.io/nodejs-ex exposed - route.route.openshift.io/nodejs-ex exposed- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 要验证该服务是否已公开,您可以使用 - curl等工具来检查该服务是否可从集群外部访问。- 要查找路由的主机名,请输入以下命令: - oc get route - $ oc get route- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-myproject.example.com nodejs-ex 8080-tcp None - NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-myproject.example.com nodejs-ex 8080-tcp None- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 要检查主机是否响应 GET 请求,请输入以下命令: - curl命令示例- curl --head nodejs-ex-myproject.example.com - $ curl --head nodejs-ex-myproject.example.com- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - HTTP/1.1 200 OK ... - HTTP/1.1 200 OK ...- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
22.5.5. 创建负载均衡器服务
使用以下流程来创建负载均衡器服务。
先决条件
- 确保您要公开的项目和服务已经存在。
- 您的云供应商支持负载均衡器。
流程
创建负载均衡器服务:
- 登录 OpenShift Container Platform。
- 加载您要公开的服务所在的项目。 - oc project project1 - $ oc project project1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在 control plane 节点上打开文本文件并粘贴以下文本,根据需要编辑该文件: - 负载均衡器配置文件示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 要将通过负载均衡器的流量限制到特定的 IP 地址,建议使用 Ingress Controller 字段 - spec.endpointPublishingStrategy.loadBalancer.allowedSourceRanges。不要设置- loadBalancerSourceRanges字段。
- 保存并退出 文件。
- 运行以下命令来创建服务: - oc create -f <file-name> - $ oc create -f <file-name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 例如: - oc create -f mysql-lb.yaml - $ oc create -f mysql-lb.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 执行以下命令以查看新服务: - oc get svc - $ oc get svc- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE egress-2 LoadBalancer 172.30.22.226 ad42f5d8b303045-487804948.example.com 3306:30357/TCP 15m - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE egress-2 LoadBalancer 172.30.22.226 ad42f5d8b303045-487804948.example.com 3306:30357/TCP 15m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果启用了云供应商,该服务会自动分配到一个外部 IP 地址。 
- 在 master 上,使用 cURL 等工具来确保您可以通过公共 IP 地址访问该服务: - curl <public-ip>:<port> - $ curl <public-ip>:<port>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 例如: - curl 172.29.121.74:3306 - $ curl 172.29.121.74:3306- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 此部分中的示例使用 MySQL 服务,这需要客户端应用程序。如果您得到一串字符并看到 - Got packets out of order消息,则您已连接到该服务:- 如果您有 MySQL 客户端,请使用标准 CLI 命令登录: - mysql -h 172.30.131.89 -u admin -p - $ mysql -h 172.30.131.89 -u admin -p- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]> - Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow