使用路由方式创建专用网络负载均衡器
虚拟网络功能 (VNF) 设备是在虚拟机上运行的虚拟化网络服务 (例如路由器和防火墙)。 通过 IBM Cloud VPC,您可以供应 VNF 设备,以获得比购买物理网络设备更好的,更经济实惠的可伸缩性。
必须将发往 IBM Cloud VPC 中服务器的流量传递到运行正常的 VNF 设备; 否则,将发生流量中断。 您可以使用具有路由方式的网络负载均衡器来执行运行状况检查,并确保工作负载仅通过运行状况正常的 VNF 设备。 因此,具有路由方式的网络负载均衡器仅支持 VNF 设备作为后端目标。
有关以路由方式部署 NLB 的各种方法的详细示例,请参阅 HA VNF 部署。
准备工作
要在启用路由方式的情况下配置网络负载均衡器,请确保满足以下先决条件:
-
如果您没有 VPC,请在要创建 NLB 的区域中 创建 VPC。
-
在 VPC 中的首选区域中创建子网。
-
要支持路由方式,必须首先为 NLB 创建服务到服务认证策略。 请按照以下步骤操作:
- 从浏览器中,登录到 IBM Access Management。
- 单击授权,然后单击创建。
- 对于源服务,选择 VPC 基础架构服务。 对于作用域访问,请选择 基于所选属性的资源 > 资源类型 > Load Balancer for VPC。
- 对于目标服务,选择 VPC 基础架构服务。 对于作用域访问,请选择 基于所选属性的资源 > 资源类型 > 虚拟私有云。
- 选中 编辑者 复选框以授予自己“编辑者”访问权,然后单击 授权。
以下列表详细说明了有关启用了路由方式的网络负载均衡器的一些重要注意事项:
- NLB 路由方式具有两个 IP 地址 (活动/备用)。
- NLB 路由方式设计为透明。 发生故障转移时,路由方式会使用备用设备 IP 的
next_hop
更新在同一 VPC 下创建的所有路由规则。 因此,这两个 IP 都可以在具有路由方式的 NLB 的生存期内使用。 - 对于 Transit VPC 配置,您可能想要在
vpc-hub
中部署 NLB 并在vpc-spoke
中配置出口路径。 这将以vpc-hub
中的路由方式强制数据返回到 NLB。 请确保您还添加了vpc-spoke
的等效入口规则和vpc-hub
的等效出口规则,这样出口规则就不需要更改了。 当流量达到vpc-hub
时,入口路由规则将覆盖next_hop
并将其发送到主设备。
使用 UI 创建具有路由方式的网络负载均衡器
要使用 IBM Cloud 控制台通过路由方式创建和配置 Network Load Balancer for VPC,请执行以下步骤:
-
从浏览器打开 IBM Cloud 控制台并登录账户。
-
选择导航菜单
,然后单击基础架构
> 网络 > 负载平衡器。
-
单击页面右上角的 新建负载均衡器 +。
-
在订单中,填写以下信息:
- 输入负载均衡器的唯一名称,然后选择 VPC。
- 选择资源组。 使用缺省组,或者从列表中进行选择 (如果为您的帐户定义)。 创建负载均衡器后,无法更改资源组。
- 选择 网络负载均衡器 (NLB) 磁贴以及要在其中部署负载均衡器的子网。
- 选择私人类型。
- (可选) 添加标记。
-
在路由方式窗口中查看核对表指示信息,然后单击该按钮以将其启用。
完成配置后,无法修改路由方式 NLB 的配置。
-
单击新建池并指定以下信息以创建后端池。
-
为池键入一个名称,如
my-pool
。 -
输入此池中实例的协议。 池的协议必须与其关联侦听器的协议相匹配。 例如,如果监听器是 TCP,则池的协议必须是 TCP。
-
选择方法,即负载均衡算法。 显示了以下选项:
- 循环- 将请求依次转发给每个实例。 所有实例收到的客户机连接数大致相等。
- 加权循环- 按照分配给每个实例的权重比例将请求转发给每个实例。 例如,如果有实例 A、B 和 C,它们的权重分别设置为 60、60 和 30,那么实例 A 和 B 得到的连接数相等,实例 C 得到的连接数是它们的一半。
- 最少连接数- 将请求转发给当前连接数最少的实例。
-
选择会话粘性,然后选择 无。
-
在运行状况检查下,将显示以下选项。
- 健康检查路径 ——仅当您选择 HTTP 作为健康检查方案。 健康检查路径指定负载平衡器用于向池中实例发送 HTTP 健康检查请求的 URL。 默认情况下,健康检查会发送到根路径 (/)。
- 健康协议- 负载平衡器用于向池中实例发送健康检查消息的协议。
- 健康端口- 负载平衡器发送健康检查请求的端口。 默认情况下,健康检查在向实例发送流量的同一端口上发送。
- Interval (间隔 )- 两次连续健康检查尝试之间的间隔(以秒为单位)。 默认情况下,健康检查每 5 秒发送一次。
- 超时(秒)- 系统等待健康检查请求响应的最长时间。 默认情况下,负载平衡器等待响应的时间为 2 秒。
- 最大重试次数-在声明实例运行状况不佳之前,负载均衡器进行的最大运行状况检查尝试次数。 缺省情况下,两次运行状况检查失败后,即不会再认为实例运行状况正常。
虽然负载均衡器停止向运行状况不佳的实例发送连接,但它仍会继续监视这些实例的运行状况,如果发现它们再次运行状况正常 (即,如果它们成功通过了两次连续运行状况检查尝试),那么将继续使用这些实例。
如果池中的实例不健康,而您认为应用程序运行正常,请仔细检查健康协议和健康路径值。 此外,检查附加到实例的任何安全组,确保规则允许负载平衡器和实例之间的流量。
-
-
单击 新建侦听器 并指定此侦听器将流量转发到的后端池。
已为您选择用于接收入局请求的协议以及用于接收请求的侦听端口。
-
订单汇总显示定价估算。 查看云服务条款。 然后,单击 创建 以完成订单。
使用 CLI 创建具有路由方式的网络负载均衡器
要使用 CLI 创建网络负载均衡器,请执行以下步骤:
-
设置 CLI 环境。
-
登录您的账户。 输入密码后,系统会提示您要使用的帐户和区域:
ibmcloud login --sso
-
创建负载均衡器:
ibmcloud is load-balancer-create nlb-test public --subnet 0896-b1f24514-89dc-4afd-b0e2-5489a43cf45c --family network --route-mode true
样本输出:
Creating load balancer vnf under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Name vnf CRN crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Family Network Routing Mode Enabled true Host name c7cadd8e-us-east.lb.appdomain.cloud Subnets ID Name 0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024 nlb-subnet Public IPs Private IPs Provision status create_pending Operating status offline Is public false Listeners Pools ID Name Resource group ID Name 42c4f51adc3147b4b4049ad9826c30a1 Default Created 2021-09-14T17:54:24.584-05:00 Security groups supported false
-
等到 NLB 处于活动状态,然后运行以下命令:
ibmcloud is load-balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512
样本输出:
Getting load balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Name vnf CRN crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Family Network Routing Mode Enabled true Host name c7cadd8e-us-east.lb.appdomain.cloud Subnets ID Name 0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024 nlb-subnet Public IPs Private IPs 10.241.64.16, 10.241.64.17 Provision status active Operating status online Is public false Listeners Pools ID Name Resource group ID Name 42c4f51adc3147b4b4049ad9826c30a1 Default Created 2021-09-14T17:54:24.584-05:00 Security groups supported false
记下专用 IP 中列出的第一个 IP 地址。 在定义自定义路由时需要使用此功能。
-
添加池。
ibmcloud is load-balancer-pool-create example-pool r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 round_robin tcp 20 2 5 tcp
样本输出:
Creating pool example-pool of load balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 under account CNS Development Account - netsvs as user ibm@us.ibm.com ID r014-474dca7d-aece-48a3-a636-fe8c3e654a3b Name example-pool Protocol tcp Algorithm round_robin Instance group ID Name - - Proxy protocol disabled Health monitor Type Port Health monitor URL Delay Retries Timeout tcp - 20 2 5 Session persistence Type Cookie name - - Members Provision status active Created 2021-09-14T18:03:56.274-05:00
-
添加成员。
ibmcloud is load-balancer-pool-member-create r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 r014-474dca7d-aece-48a3-a636-fe8c3e654a3b 200 0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf
样本输出:
Creating member of pool r014-474dca7d-aece-48a3-a636-fe8c3e654a3b under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-1fdb900f-81a4-4204-839a-fcdee6c28e8a Port 200 Target 0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf Weight 50 Health unknown Created 2021-09-14T19:27:11.077-05:00 Provision status create_pending
使用 API 创建具有路由方式的网络负载均衡器
要使用 API 创建具有路由方式的网络负载均衡器,请执行以下步骤:
-
设置 API 环境。
-
使用以下模板创建 API 请求有效内容。 使用您自己的值修改名称和子网。
{ "name": "nlb-vnf", "is_public": false, "profile": { "name": "network-fixed" }, "route_mode": true, "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024" } ] }
将此有效内容保存到 JSON 文件。 在以下示例中,文件名为
create.json
。 -
使用以下命令发出创建 NLB 的请求。 必须首先在有效内容中设置以下属性:
route_mode
是true
is_public
是false
- 资料名称为
network_fixed
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers?version=2021-07-30&generation=2" | jq
jq
jq
可能不会预装在创建实例时可用的所有 VPC 映像 中。 在使用前,您可能需要安装jq
或使用您选择的其他解析器。样本输出:
{ "id": "r014-020f4f34-bb49-4699-98a7-a53384cd649d", "name": "nlb-vnf", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-020f4f34-bb49-4699-98a7-a53384cd649d", "is_public": false, "created_at": "2021-09-14T21:45:06.377862525Z", "hostname": "020f4f34-us-east.lb.appdomain.cloud", "listeners": [], "operating_status": "offline", "pools": [], "private_ips": [], "provisioning_status": "create_pending", "public_ips": [], "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "href": "https://us-east.iaas.cloud.ibm.com/v1/subnets/0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::subnet:0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "name": "nlb-subnet" } ], "resource_group": { "id": "42c4f51adc3147b4b4049ad9826c30a1", "href": "https://resource-controller.cloud.ibm.com/v1/resource_groups/42c4f51adc3147b4b4049ad9826c30a1", "name": "Default" }, "resource_type": "load_balancer", "logging": { "datapath": { "active": false } }, "profile": { "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancer/profiles/network-fixed", "name": "network-fixed", "family": "Network" }, "security_groups": [], "security_group_supported": false, "route_mode": true }
-
在 NLB 处于活动状态后,执行
GET
调用以访存其状态。curl -s -H "Authorization: Bearer $IAM_TOKEN" -X GET "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d?version=2021-07-30&generation=2" | jq
样本输出:
{ "id": "r014-020f4f34-bb49-4699-98a7-a53384cd649d", "name": "nlb-vnf", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-020f4f34-bb49-4699-98a7-a53384cd649d", "is_public": false, "created_at": "2021-09-14T21:45:06.377863Z", "hostname": "020f4f34-us-east.lb.appdomain.cloud", "listeners": [], "operating_status": "online", "pools": [], "private_ips": [ { "address": "10.241.64.13" }, { "address": "10.241.64.14" } ], "provisioning_status": "active", "public_ips": [], "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "href": "https://us-east.iaas.cloud.ibm.com/v1/subnets/0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::subnet:0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "name": "nlb-subnet" } ], "resource_group": { "id": "42c4f51adc3147b4b4049ad9826c30a1", "href": "https://resource-controller.cloud.ibm.com/v1/resource_groups/42c4f51adc3147b4b4049ad9826c30a1", "name": "Default" }, "resource_type": "load_balancer", "logging": { "datapath": { "active": false } }, "profile": { "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancer/profiles/network-fixed", "name": "network-fixed", "family": "Network" }, "security_groups": [], "security_group_supported": false, "route_mode": true }
请注意
Private IPs
中列出的第一个 IP 地址。 在定义自定义路由时需要使用此功能 -
添加池。
首先,使用以下模板创建 API 请求有效内容。
{ "algorithm": "round_robin", "protocol": "tcp", "health_monitor": { "delay": 10, "max_retries": 2, "timeout": 5, "type": "tcp" } }
然后,运行以下命令:
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools?version=2021-07-30&generation=2" | jq
样本输出:
{ "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "name": "flashbulb-marvelous-gainfully-skydiver", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "algorithm": "round_robin", "health_monitor": { "delay": 10, "max_retries": 2, "timeout": 5, "type": "tcp" }, "protocol": "tcp", "created_at": "2021-09-14T21:56:08.202217034Z", "provisioning_status": "active", "proxy_protocol": "disabled" }
-
等到 NLB 处于活动状态,然后添加侦听器。
侦听器的端口范围必须定义如下:
port_min
是1
port_max
是65535
使用以下模板创建 API 请求有效内容:
{ "default_pool": { "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328" }, "port_min": 1, "port_max": 65535, "protocol": "tcp" }
运行以下命令:
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create_vnf.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/listeners?version=2021-07-30&generation=2" | jq
样本输出:
{ "id": "r014-0ce87b15-9530-4624-a574-92495631f75d", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/listeners/r014-0ce87b15-9530-4624-a574-92495631f75d", "protocol": "tcp", "port": 1, "port_min": 1, "port_max": 65535, "default_pool": { "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "name": "flashbulb-marvelous-gainfully-skydiver" }, "provisioning_status": "create_pending", "created_at": "2021-09-14T22:01:13.523172702Z", "accept_proxy_protocol": false, "https_redirect": null }
-
添加池成员。
首先,使用以下模板创建 API 请求有效内容:
{ "port": 90, "target": { "id": "0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf" } }
然后运行以下命令:
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @add_member.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328/members?version=2021-07-30&generation=2" | jq
样本输出:
{ "id": "r014-c625efe0-6f69-4ae7-a2ef-9bf33c811a2c", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328/members/r014-c625efe0-6f69-4ae7-a2ef-9bf33c811a2c", "port": 90, "target": { "id": "0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf", "href": "https://us-east.iaas.cloud.ibm.com/v1/instances/0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::instance:0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf" }, "weight": 50, "health": "unknown", "created_at": "2021-09-14T22:07:46.898295306Z", "provisioning_status": "create_pending" }
后续步骤
在具有路由模式的NLB处于活动状态后,请按照以下步骤完成NLB配置:
-
收集以下信息:
-
配置定制路径,如下所示:
- 对于以后端客户工作负载子网为目标的所有流量,请将下一个中继段设置为 NLB 专用 IP。
- 对于以客户机子网为目标的所有流量,请将下一个中继段设置为 NLB 专用 IP。
-
VNF实例(VNI)必须与NLB位于同一子网中,并且必须作为成员添加到您的池中。