28.5. 使用负载均衡器配置集群入口流量
OpenShift Container Platform 提供了从集群外部与集群中运行的服务进行通信的方法。此方法使用了负载均衡器。
28.5.1. 使用负载均衡器使流量进入集群
如果不需要具体的外部 IP 地址,您可以配置负载均衡器服务,以便从外部访问 OpenShift Container Platform 集群。
负载均衡器服务分配唯一 IP。负载均衡器有单一边缘路由器 IP,它可以是虚拟 IP (VIP),但仍然是一台用于初始负载均衡的计算机。
如果配置了池,则会在基础架构一级进行,而不是由集群管理员完成。
这部分中的流程需要由集群管理员执行先决条件。
28.5.2. 先决条件
在开始以下流程前,管理员必须:
- 设置集群联网环境的外部端口,使请求能够到达集群。
确定至少有一个用户具有集群管理员角色。要将此角色添加到用户,请运行以下命令:
$ oc adm policy add-cluster-role-to-user cluster-admin username
- 有一个 OpenShift Container Platform 集群,其至少有一个 master 和至少一个节点,并且集群外有一个对集群具有网络访问权限的系统。此流程假设外部系统与集群位于同一个子网。不同子网上外部系统所需要的额外联网不在本主题的讨论范围内。
28.5.3. 创建项目和服务
如果要公开的项目和服务不存在,请创建项目,然后创建该服务。
如果项目和服务都已存在,跳到公开服务以创建路由这一步。
先决条件
-
安装 OpenShift CLI (
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 地址。
28.5.4. 通过创建路由公开服务
您可以使用 oc expose
命令,将服务公开为路由。
先决条件
- 已登陆到 OpenShift Container Platform。
流程
登录您想公开的服务所在的项目:
$ oc project <project_name>
运行
oc expose service
命令以公开路由:$ oc expose service nodejs-ex
输出示例
route.route.openshift.io/nodejs-ex exposed
要验证该服务是否已公开,您可以使用
curl
等工具来检查该服务是否可从集群外部访问。要查找路由的主机名,请输入以下命令:
$ oc get route
输出示例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-myproject.example.com nodejs-ex 8080-tcp None
要检查主机是否响应 GET 请求,请输入以下命令:
curl
命令示例$ curl --head nodejs-ex-myproject.example.com
输出示例
HTTP/1.1 200 OK ...
28.5.5. 创建负载均衡器服务
使用以下流程来创建负载均衡器服务。
先决条件
- 确保您要公开的项目和服务已经存在。
- 您的云供应商支持负载均衡器。
流程
创建负载均衡器服务:
- 登录 OpenShift Container Platform。
加载您要公开的服务所在的项目。
$ oc project project1
在 control plane 节点上打开文本文件并粘贴以下文本,根据需要编辑该文件:
负载均衡器配置文件示例
apiVersion: v1 kind: Service metadata: name: egress-2 1 spec: ports: - name: db port: 3306 2 loadBalancerIP: loadBalancerSourceRanges: 3 - 10.0.0.0/8 - 192.168.0.0/16 type: LoadBalancer 4 selector: name: mysql 5
注意要将通过负载均衡器的流量限制到特定的 IP 地址,建议使用 Ingress Controller 字段
spec.endpointPublishingStrategy.loadBalancer.allowedSourceRanges
。不要设置loadBalancerSourceRanges
字段。- 保存并退出 文件。
运行以下命令来创建服务:
$ oc create -f <file-name>
例如:
$ oc create -f mysql-lb.yaml
执行以下命令以查看新服务:
$ oc get svc
输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE egress-2 LoadBalancer 172.30.22.226 ad42f5d8b303045-487804948.example.com 3306:30357/TCP 15m
如果启用了云供应商,该服务会自动分配到一个外部 IP 地址。
在 master 上,使用 cURL 等工具来确保您可以通过公共 IP 地址访问该服务:
$ curl <public-ip>:<port>
例如:
$ curl 172.29.121.74: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)]>