在 Google Cloud 中,您可以采用高度可用、横向扩容的方式集成第三方设备。为此,您需要配置自定义静态路由并将其下一个跃点设置为 Google Cloud 内部直通式网络负载均衡器。这样,负载均衡器可以将目标前缀的流量负载均衡到经过健康检查的第三方虚拟机设备池。
本指南通过一个示例,介绍了如何将内部直通式网络负载均衡器配置为下一个跃点。在按照本指南进行操作之前,请先熟悉以下内容:
权限
要按照本指南进行操作,您需要创建实例并修改项目中的网络。您应该具有项目的 Owner 或 Editor 角色,或者应该具有以下 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建网络、子网和负载均衡器组件 | Network Admin |
添加和移除防火墙规则 | Security Admin |
创建实例 | Compute Instance Admin |
如需了解详情,请参阅以下指南:
针对常见后端将内部直通式网络负载均衡器设置为下一个跃点
本指南介绍如何使用内部直通式网络负载均衡器作为自定义静态路由的下一个跃点,以便集成横向扩容的虚拟设备。
本指南中讨论的解决方案会创建运行 Debian Linux 的设备虚拟机。示例虚拟机不执行任何数据包过滤,但您可以通过修改此示例的网络配置,或者使用不同的数据包过滤或路由软件来添加该功能。
本部分中的步骤介绍了如何配置以下资源:
- 示例 VPC 网络和自定义子网
- 允许目标为后端设备虚拟机的传入连接的 Google Cloud 防火墙规则
- 自定义静态路由
- 两个用于测试连接的客户端虚拟机
- 内部直通式网络负载均衡器组件如下:
- 托管实例组 (MIG) 中的后端虚拟机
- 后端虚拟机健康检查
us-west1
区域的内部后端服务,用于管理后端虚拟机之间的连接分配- 负载均衡器前端的内部转发规则和内部 IP 地址
此示例展示了对多个后端 NIC 执行的负载均衡,如将负载均衡到多个 NIC中所述。
拓扑如下所示:
该图显示了该示例创建的一些资源:
- 内部直通式网络负载均衡器(在此示例中为
fr-ilb1
)后面的应用实例。应用实例仅具有内部 IP 地址。 - 每个应用实例都启用了其
can-ip-forward
标志。如果没有此标志,Compute Engine 虚拟机只能在数据包的来源 IP 地址与虚拟机的内部 IP 地址、别名 IP 范围内的 IP 地址或解析到虚拟机的转发规则的 IP 地址相匹配时才能传输数据包。can-ip-forward
标志会更改此行为,以便虚拟机能够传输包含任何来源 IP 地址的数据包。 - 目标为
10.50.1.0/24
且下一个跃点设置为负载均衡器的转发规则fr-ilb1
的自定义静态路由。
该图还显示了流量:
testing
VPC 网络流量的自定义静态路由指向10.50.1.0/24
子网。此路由会将流量定向到负载均衡器。- 负载均衡器根据配置的会话粘性将流量转发到某个应用实例。(会话亲和性仅影响 TCP 流量。)
如需获取其他用例,请参阅内部 TCP/UDP 负载均衡器作为下一个跃点。
配置网络、区域和子网
此示例使用以下 VPC 网络、区域和子网:
网络:此示例需要两个网络,并且每个网络至少具有一个子网。每个后端第三方设备虚拟机必须具有至少两个网络接口,这些接口的分布情况为每个 VPC 网络中一个。此示例中的网络是名为
testing
和production
的自定义模式 VPC 网络。此示例中的testing
网络包含客户端和负载均衡器。production
网络包含目标目标虚拟机。区域:子网位于
us-west1
区域。由于虚拟机实例是可用区资源,因此子网必须位于同一区域。子网:子网
testing-subnet
和production-subnet
分别使用10.30.1.0/24
和10.50.1.0/24
主要 IP 地址范围。
要创建示例网络和子网,请按以下步骤进行操作。
控制台
创建 testing
网络和 testing-subnet
:
在 Google Cloud Console 中,转到 VPC 网络页面。
点击创建 VPC 网络。
输入
testing
作为名称。在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:
testing-subnet
- 区域:
us-west1
- IP 地址范围:
10.30.1.0/24
- 点击完成。
- 名称:
点击创建。
创建 production
网络和 production-subnet
:
在 Google Cloud Console 中,转到 VPC 网络页面。
点击创建 VPC 网络。
输入
production
作为名称。在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:
production-subnet
- 区域:
us-west1
- IP 地址范围:
10.50.1.0/24
- 点击完成。
- 名称:
点击创建。
gcloud
创建自定义 VPC 网络:
gcloud compute networks create testing --subnet-mode=custom
gcloud compute networks create production --subnet-mode=custom
在
us-west1
区域的testing
和production
网络中创建子网:gcloud compute networks subnets create testing-subnet \ --network=testing \ --range=10.30.1.0/24 \ --region=us-west1
gcloud compute networks subnets create production-subnet \ --network=production \ --range=10.50.1.0/24 \ --region=us-west1
配置防火墙规则
此示例使用以下防火墙规则:
fw-allow-testing-from-both
:一种适用于testing
网络中所有目标的入站规则。此规则允许10.30.1.0/24
和10.50.1.0/24
IP 地址范围中来源的流量。这两个范围涵盖这两个网络中虚拟机的主要内部 IP 地址。fw-allow-production-from-both
:一种适用于production
网络中所有目标的入站规则。此规则允许10.30.1.0/24
和10.50.1.0/24
IP 地址范围中来源的流量。这两个范围涵盖这两个网络中虚拟机的主要内部 IP 地址。fw-allow-testing-ssh
:应用于testing
VPC 网络中的虚拟机实例的入站流量规则。此规则允许从任何地址到 TCP 端口22
的传入 SSH 连接。您可以为此规则选择限制性更强的来源 IP 地址范围;例如,您可以指定计划从中启动 SSH 会话的系统的 IP 地址范围。此示例使用目标标记allow-ssh
来标识防火墙规则应该应用到的虚拟机。fw-allow-production-ssh
:应用于production
VPC 网络中的虚拟机实例的入站流量规则。此规则允许从任何地址到 TCP 端口22
的传入 SSH 连接。与fw-allow-testing-ssh
规则类似,您可以为此规则选择限制性更高的来源 IP 地址范围。fw-allow-health-check
:正在执行负载均衡的第三方设备虚拟机的入站规则。此规则允许来自 Google Cloud 健康检查系统(130.211.0.0/22
和35.191.0.0/16
)的流量。此示例使用目标标记allow-health-check
来标识该规则应该应用到的实例。fw-allow-production-health-check
:正在执行负载均衡的第三方设备虚拟机的入站规则。此规则允许来自 Google Cloud 健康检查系统(130.211.0.0/22
和35.191.0.0/16
)的流量。此示例使用目标标记allow-health-check
来标识该规则应该应用到的实例。
如果没有这些防火墙规则,则默认的拒绝入站规则会阻止到后端实例的传入流量。您必须创建防火墙规则,以允许从 Google Cloud 探测系统的 IP 地址范围进行健康检查。如需了解详情,请参阅探测 IP 地址范围。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙规则并输入以下信息,以创建允许测试虚拟机接收来自测试子网和生产子网的数据包的规则:
- 名称:
fw-allow-testing-from-both
- 网络:
testing
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:网络中的所有实例
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
10.30.1.0/24
、10.50.1.0/24
- 协议和端口:允许全部
- 名称:
点击创建。
点击创建防火墙规则并输入以下信息,以创建允许生产虚拟机接收来自测试子网和生产子网的数据包的规则:
- 名称:
fw-allow-production-from-both
- 网络:
production
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:网络中的所有实例
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
10.30.1.0/24
、10.50.1.0/24
- 协议和端口:允许全部
- 名称:
点击创建。
点击创建防火墙规则,以创建在测试环境中允许传入 SSH 连接的规则:
- 名称:
fw-allow-testing-ssh
- 网络:
testing
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-ssh
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
0.0.0.0/0
- 协议和端口:选择“指定的协议和端口”并输入:
tcp:22
- 名称:
点击创建。
点击创建防火墙规则,以创建在生产环境中允许传入 SSH 连接的规则:
- 名称:
fw-allow-production-ssh
- 网络:
production
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-ssh
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
0.0.0.0/0
- 协议和端口:选择“指定的协议和端口”并输入:
tcp:22
- 名称:
点击创建。
点击创建防火墙规则,以创建在测试环境中允许执行 Google Cloud 健康检查的规则:
- 名称:
fw-allow-health-check
- 网络:
testing
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-health-check
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
130.211.0.0/22
和35.191.0.0/16
- 协议和端口:
tcp
- 名称:
点击创建。
点击创建防火墙规则,以创建在生产环境中允许执行 Google Cloud 健康检查的规则:
- 名称:
fw-allow-production-health-check
- 网络:
production
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-health-check
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
130.211.0.0/22
和35.191.0.0/16
- 协议和端口:
tcp
- 名称:
点击创建。
gcloud
创建
fw-allow-testing-subnet
防火墙规则,允许测试虚拟机接收来自testing
和production
子网的数据包:gcloud compute firewall-rules create fw-allow-testing-from-both \ --network=testing \ --action=allow \ --direction=ingress \ --source-ranges=10.30.1.0/24,10.50.1.0/24 \ --rules=all
创建
fw-allow-production-subnet
防火墙规则,允许生产虚拟机接收来自testing
和production
子网的数据包:gcloud compute firewall-rules create fw-allow-production-from-both \ --network=production \ --action=allow \ --direction=ingress \ --source-ranges=10.30.1.0/24,10.50.1.0/24 \ --rules=all
创建
fw-allow-testing-ssh
防火墙规则,允许通过 SSH 连接到网络标记为allow-ssh
的虚拟机。如果省略source-ranges
,Google Cloud 会将规则解释为表示所有来源。gcloud compute firewall-rules create fw-allow-testing-ssh \ --network=testing \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
创建
fw-allow-production-ssh
防火墙规则,允许通过 SSH 连接到网络标记为allow-ssh
的虚拟机。gcloud compute firewall-rules create fw-allow-production-ssh \ --network=production \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
创建
fw-allow-health-check
规则,允许 Google Cloud 对testing
网络中的第三方设备虚拟机进行健康检查。gcloud compute firewall-rules create fw-allow-testing-health-check \ --network=testing \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp
创建
fw-allow-production-health-check
防火墙规则,允许 Google Cloud 对production
网络中的第三方设备虚拟机进行健康检查。gcloud compute firewall-rules create fw-allow-production-health-check \ --network=production \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp
创建第三方虚拟设备
以下步骤演示了如何创建实例模板和具有多个网络接口的托管式区域实例组。此实例组用作此示例的第三方虚拟设备。
控制台
您必须使用 gcloud
执行此步骤,因为您需要创建具有多个网络接口的实例模板。Google Cloud 控制台目前不支持创建具有多个网络接口的实例模板。
gcloud
创建名为
config.sh
的本地文件并插入以下内容:#!/bin/bash # Enable IP forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/20-example.conf # Read VM network configuration: md_vm="http://metadata.google.internal/computeMetadata/v1/instance/" md_net="$md_vm/network-interfaces" nic0_gw="$(curl $md_net/0/gateway -H "Metadata-Flavor:Google" )" nic0_mask="$(curl $md_net/0/subnetmask -H "Metadata-Flavor:Google")" nic0_addr="$(curl $md_net/0/ip -H "Metadata-Flavor:Google")" nic0_id="$(ip addr show | grep $nic0_addr | awk '{print $NF}')" nic1_gw="$(curl $md_net/1/gateway -H "Metadata-Flavor:Google")" nic1_mask="$(curl $md_net/1/subnetmask -H "Metadata-Flavor:Google")" nic1_addr="$(curl $md_net/1/ip -H "Metadata-Flavor:Google")" nic1_id="$(ip addr show | grep $nic1_addr | awk '{print $NF}')" # Source based policy routing for nic1 echo "100 rt-nic1" >> /etc/iproute2/rt_tables sudo ip rule add pri 32000 from $nic1_gw/$nic1_mask table rt-nic1 sleep 1 sudo ip route add 35.191.0.0/16 via $nic1_gw dev $nic1_id table rt-nic1 sudo ip route add 130.211.0.0/22 via $nic1_gw dev $nic1_id table rt-nic1 # Use a web server to pass the health check for this example. # You should use a more complete test in production. sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl echo "Example web page to pass health check" | \ tee /var/www/html/index.html sudo systemctl restart apache2
为您的第三方虚拟设备创建实例模板。该实例模板必须包含
--can-ip-forward
标志,以便从该模板创建的虚拟机实例能够转发来自testing
和production
网络中其他实例的数据包。gcloud compute instance-templates create third-party-template-multinic \ --region=us-west1 \ --network-interface subnet=testing-subnet,address="" \ --network-interface subnet=production-subnet \ --tags=allow-ssh,allow-health-check,my-network-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --can-ip-forward \ --metadata=startup-script="$(< config.sh)"
为您的第三方虚拟设备创建托管实例组。 此命令会在
us-west1
中创建一个稍后可对其进行自动扩缩的区域托管实例组。gcloud compute instance-groups managed create third-party-instance-group \ --region=us-west1 \ --template=third-party-template-multinic \ --size=3
创建负载均衡资源
以下步骤会配置所有内部直通式网络负载均衡器组件,先配置健康检查和后端服务,然后配置前端组件:
健康检查:在此示例中,HTTP 健康检查会检查 HTTP
200
(OK) 响应。如需了解详情,请参阅内部直通式网络负载均衡器概览的健康检查部分。后端服务:虽然此示例的后端服务指定了 TCP 协议,但当负载均衡器是路由的下一个跃点时,Google Cloud 会转发所有协议(TCP、UDP 和 ICMP)的流量。
转发规则:虽然此示例转发规则指定了 TCP 端口 80,但当负载均衡器是路由的下一个跃点时,任何 TCP 或 UDP 端口上的流量都会发送到负载均衡器的后端。
内部 IP 地址:此示例为转发规则指定了内部 IP 地址
10.30.1.99
。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步。
- 对于代理或直通,选择直通式负载均衡器,然后点击下一步。
- 在公共或内部字段中,选择内部,然后点击下一步。
- 点击配置。
创建第一个负载均衡器
- 将名称设置为
ilb1
。 - 将区域设置为
us-west1
。 - 将网络设置为
testing
。 - 点击后端配置 并进行以下更改:
- 对于后端,在新项部分中,选择
third-party-instance-group
实例组,然后点击完成。 - 对于健康检查,选择另创建一项健康检查,输入以下信息,然后点击保存并继续:
- 名称:
hc-http-80
- 协议:
HTTP
- 端口:
80
- 代理协议:
NONE
- 请求路径:
/
请注意,当您使用 Google Cloud 控制台创建负载均衡器时,健康检查是全球性的。如果要创建区域性健康检查,请使用gcloud
或 API。
- 名称:
- 对于会话亲和性,选择客户端 IP。
- 请先确认后端配置旁边是否有蓝色对勾标记,然后再继续操作。如果没有,请检查此步骤。
- 对于后端,在新项部分中,选择
- 点击前端配置。在新建前端 IP 和端口部分,进行以下更改:
- 名称:
fr-ilb1
- 子网:
testing-subnet
- 在内部 IP 中,选择保留静态内部 IP 地址,输入以下信息,然后点击保留:
- 名称:
ip-ilb
- 静态 IP 地址:让我选择
- 自定义 IP 地址:
10.30.1.99
- 名称:
- 端口:选择单个,然后输入
80
作为端口号。 请记住,为负载均衡器选择协议和端口并不会限制在负载均衡器是路由的下一个跃点时使用的协议和端口。 - 请先确认前端配置旁边是否有蓝色对勾标记,然后再继续操作。如果没有,请检查此步骤。
- 名称:
- 点击检查并最终确定。仔细检查您的设置。
- 点击创建。
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步。
- 对于代理或直通,选择直通式负载均衡器,然后点击下一步。
- 在公共或内部字段中,选择内部,然后点击下一步。
- 点击配置。
创建第二个负载均衡器
- 将名称设置为
ilb2
。 - 将区域设置为
us-west1
。 - 将网络设置为
production
。 - 点击后端配置 并进行以下更改:
- 对于后端,在新项部分中,选择
third-party-instance-group
实例组,然后点击完成。 - 对于健康检查,请选择
hc-http-80
。 - 对于会话亲和性,选择客户端 IP。
- 请先确认后端配置旁边是否有蓝色对勾标记,然后再继续操作。如果没有,请检查此步骤。
- 对于后端,在新项部分中,选择
- 点击前端配置。在新建前端 IP 和端口部分,进行以下更改:
- 名称:
fr-ilb2
- 子网:
production-subnet
- 在内部 IP 中,选择保留静态内部 IP 地址,输入以下信息,然后点击保留:
- 名称:
ip-ilb2
- 静态 IP 地址:让我选择
- 自定义 IP 地址:
10.50.1.99
- 名称:
- 端口:选择单个,然后输入
80
作为端口号。 请记住,为负载均衡器选择协议和端口并不会限制在负载均衡器是路由的下一个跃点时使用的协议和端口。 - 请先确认前端配置旁边是否有蓝色对勾标记,然后再继续操作。如果没有,请检查此步骤。
- 名称:
- 点击检查并最终确定。仔细检查您的设置。
点击创建。
配置
production
VPC 网络中的负载均衡器资源。
gcloud
创建一个新的 HTTP 健康检查,以测试端口 80 上的虚拟机的 TCP 连接。
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
在
us-west1
区域中创建两个内部后端服务。gcloud compute backend-services create ilb1 \ --load-balancing-scheme=internal \ --health-checks-region=us-west1 \ --health-checks=hc-http-80 \ --region=us-west1 \ --network=testing \ --session-affinity=CLIENT_IP
gcloud compute backend-services create ilb2 \ --load-balancing-scheme=internal \ --health-checks-region=us-west1 \ --health-checks=hc-http-80 \ --region=us-west1 \ --network=production \ --session-affinity=CLIENT_IP
添加包含第三方虚拟设备的实例组作为后端服务的后端。
gcloud compute backend-services add-backend ilb1 \ --instance-group=third-party-instance-group \ --instance-group-region=us-west1 \ --region=us-west1
gcloud compute backend-services add-backend ilb2 \ --instance-group=third-party-instance-group \ --instance-group-region=us-west1 \ --region=us-west1
创建内部转发规则并将其连接到后端服务,以完成负载均衡器配置。请记住,当负载均衡器用作路由的下一个跃点时,负载均衡器的协议 (TCP) 和端口 (80) 不会限制转发到后端实例(第三方虚拟设备)的端口和协议。
gcloud compute forwarding-rules create fr-ilb1 \ --load-balancing-scheme=internal \ --ports=80 \ --network=testing \ --subnet=testing-subnet \ --region=us-west1 \ --backend-service=ilb1 \ --address=10.30.1.99
gcloud compute forwarding-rules create fr-ilb2 \ --load-balancing-scheme=internal \ --ports=80 \ --network=production \ --subnet=production-subnet \ --region=us-west1 \ --backend-service=ilb2 \ --address=10.50.1.99
创建将负载均衡器定义为后续跃点的静态路由
创建显示为 next-hop-ilb
的两个自定义静态路由。
控制台
创建第一个路由
在 Google Cloud Console 中,转到路由页面。
点击创建路由。
对于路由名称,输入
ilb-nhop-dest-10-50-1
。选择
testing
网络。对于目标 IP 地址范围,输入
10.50.1.0/24
。对于实例标记,请输入
my-network-tag
。对于路由的下一个跃点,选择指定内部 TCP/UDP 负载均衡器的转发规则。
如需将负载均衡器的 IP 地址指定为下一个跃点,请使用 gcloud CLI 或 API。
指定转发规则名称。对于转发规则名称,选择
fr-ilb1
。点击创建。
创建第二个路由
- 点击创建路由。
- 对于路由名称,输入
ilb-nhop-dest-10-30-1
。 - 选择
testing
网络。 - 对于目标 IP 地址范围,输入
10.30.1.0/24
。 对于路由的下一个跃点,选择指定内部 TCP/UDP 负载均衡器的转发规则。
如需将负载均衡器的 IP 地址指定为下一个跃点,请使用 gcloud CLI 或 API。
对于转发规则名称,选择
fr-ilb2
。点击创建。
gcloud
创建高级路由,将下一个跃点设置为每个负载均衡器的转发规则,并相应地设置每个目标范围。
对于 --next-hop-ilb
标志,您可以指定转发规则名称或 IP 地址。如果指定 IP 地址,则此 IP 地址可以在所有对等体中获知,而无需导出自定义路由。在此示例中,第一个路由使用 IP 地址 10.30.1.99
,而第二个路由使用转发规则名称 fr-ilb12
。
您可以选择指定路由上的一个或多个实例标记。如果您在路由上指定了网络标记,则路由可以应用于特定虚拟机。如果您未指定任何网络标记,则该路由将应用于 VPC 网络中的所有虚拟机。在此示例中,路由将 my-network-tag
用作路由的网络标记。
gcloud compute routes create ilb-nhop-dest-10-50-1 \ --network=testing \ --destination-range=10.50.1.0/24 \ --next-hop-ilb=10.30.1.99 \ --tags=my-network-tag
gcloud compute routes create ilb-nhop-dest-10-30-1 \ --network=production \ --destination-range=10.30.1.0/24 \ --next-hop-ilb=fr-ilb2 \ --next-hop-ilb-region=us-west1
创建 testing
虚拟机实例
此示例会在 testing
VPC 网络的 testing-subnet
(10.30.1.0/24
) 中创建一个 IP 地址为 10.30.1.100
的虚拟机实例。
gcloud
通过运行以下命令来创建
testing-vm
。gcloud compute instances create testing-vm \ --zone=us-west1-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-ssh,my-network-tag \ --subnet=testing-subnet \ --private-network-ip 10.30.1.100 \ --metadata=startup-script='#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sudo systemctl restart apache2'
创建 production
虚拟机实例
此示例会在 production
VPC 网络的 production-subnet
(10.50.1.0/24
) 中创建一个 IP 地址为 10.50.1.100
的虚拟机实例。
gcloud
production-vm
可以位于负载均衡器所在区域的任何可用区中,并且可以使用该区域中的任何子网。在此示例中,production-vm
位于 us-west1-a
可用区。
通过运行以下命令来创建
production-vm
。gcloud compute instances create production-vm \ --zone=us-west1-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=production-subnet \ --private-network-ip 10.50.1.100 \ --metadata=startup-script='#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html sudo systemctl restart apache2'
测试多 NIC 部署的负载均衡
验证负载均衡器后端的运行状况。
gcloud compute backend-services get-health ilb1 --region us-west1
gcloud compute backend-services get-health ilb2 --region us-west1
测试来自
testing
虚拟机的连接。gcloud compute ssh testing-vm --zone=us-west1-a
curl http://10.50.1.99
exit
测试来自
production
虚拟机的连接。gcloud compute ssh production-vm --zone=us-west1-a
curl http://10.30.1.99
exit
启用对称哈希
在计算映射到后端实例的哈希值时,Google Cloud 会忽略 IP 地址和端口的方向。无论数据包源自哪个方向,计算的 TCP/UDP 数据包的一致性哈希值都相同。这称为对称哈希。
如需在现有内部直通式网络负载均衡器上启用此哈希行为,您必须重新创建转发规则和下一个跃点路由。
如需了解详情,请参阅对称哈希。
删除再重新创建转发规则
控制台
删除转发规则并创建新的转发规则
在 Google Cloud 控制台中,转到负载均衡页面。
点击
be-ilb
负载均衡器,然后点击修改。点击前端配置。
将鼠标指针悬停在您的转发规则上,然后点击
删除将其移除。点击添加前端 IP 和端口。
在新建前端 IP 和端口部分,进行以下更改:
- 名称:
FORWARDING_RULE_NAME
- 子网:
SUBNET_NAME
- 从内部 IP 中,选择
IP_ADDRESS
- 端口:
PORT_NUMBER
或ALL
。 - 点击完成。
- 请先确认前端配置旁边是否有蓝色对勾标记,然后再继续操作。如果没有,请检查此步骤。
- 名称:
点击检查并最终确定。仔细检查您的设置。
点击创建。
gcloud
删除现有转发规则。
gcloud compute forwarding-rules delete FORWARDING_RULE_NAME \ --region=REGION
创建具有相同名称的替换转发规则。
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=internal \ --ports=PORT_NUMBER or `ALL` \ --network=NETWORK_NAME \ --subnet=SUBNET_NAME \ --region=REGION \ --backend-service=BACKEND_SERVICE_NAME \ --address=IP_ADDRESS
不需要 SNAT 的情况
如上例所示,当满足以下所有条件时,不需要源网络地址转换 (SNAT):
- 内部直通式网络负载均衡器的转发规则是在 2021 年 6 月 22 日或之后创建的。
- 引用转发规则的自定义静态路由是在 2021 年 6 月 22 日或之后创建的。
- 内部直通式网络负载均衡器的后端服务不使用
NONE
会话亲和性设置。
您可以按照以下步骤将现有下一个跃点内部直通式网络负载均衡器路由转换为使用对称哈希:
确保内部直通式网络负载均衡器的后端服务不使用
NONE
会话亲和性设置创建引用同一后端服务的替换转发规则。替换转发规则使用其他 IP 地址。
创建引用新的转发规则的替换自定义静态路由。确保此替换路由的优先级高于现有路由。
删除优先级较低的现有路由(引用之前的转发规则),然后删除以前的转发规则。
清理
在负载均衡器配置中,从后端服务中移除后端。
gcloud compute backend-services remove-backend ilb1 \ --instance-group=third-party-instance-group \ --instance-group-region=us-west1 \ --region=us-west1
gcloud compute backend-services remove-backend ilb2 \ --instance-group=third-party-instance-group \ --instance-group-region=us-west1 \ --region=us-west1
删除路由。
gcloud compute routes delete ilb-nhop-dest-10-50-1
gcloud compute routes delete ilb-nhop-dest-10-30-1
在负载均衡器配置中,删除转发规则。
gcloud compute forwarding-rules delete fr-ilb1 \ --region=us-west1
gcloud compute forwarding-rules delete fr-ilb2 \ --region=us-west1
在负载均衡器配置中,删除后端服务。
gcloud compute backend-services delete ilb1 \ --region=us-west1
gcloud compute backend-services delete ilb2 \ --region=us-west1
在负载均衡器配置中,删除健康检查。
gcloud compute health-checks delete hc-http-80 \ --region=us-west1
如果您使用 Google Cloud 控制台,则健康检查是全球性的。因此,命令如下所示:
gcloud compute health-checks delete hc-http-80 \ --global
删除托管实例组。
gcloud compute instance-groups managed delete third-party-instance-group \ --region=us-west1
删除实例模板。
gcloud compute instance-templates delete third-party-template
gcloud compute instance-templates delete third-party-template-multinic
删除测试实例和生产实例。
gcloud compute instances delete testing-vm \ --zone=us-west1-a
gcloud compute instances delete production-vm \ --zone=us-west1-a
后续步骤
- 内部直通网络负载均衡器概览
- 内部直通式网络负载均衡器故障切换
- 设置具有虚拟机实例组后端的内部直通网络负载均衡器
- 内部直通式网络负载均衡器日志记录和监控
- 内部直通式网络负载均衡器和连接的网络
- 排查内部直通式网络负载均衡器问题
- 清理负载均衡器设置