本页面介绍了如何创建内部直通网络负载均衡器以对多个协议的流量进行负载均衡。
如需为多个协议(包括 TCP 和 UDP)配置负载均衡器,您需要创建将协议设置为 L3_DEFAULT
的转发规则。此转发规则指向将协议设置为 UNSPECIFIED
的后端服务。
在此示例中,我们使用一个内部直通网络负载均衡器在 us-west1
区域的后端虚拟机之间分配流量。负载均衡器具有使用 L3_DEFAULT
协议的转发规则来处理 TCP、UDP、ICMP、ICMPv6、SCTP、ESP、AH 和 GRE。
须知事项
- 安装 Google Cloud CLI。如需全面了解此工具,请参阅 gcloud CLI 概览。您可以在 API 和 gcloud CLI 参考文档中找到与负载均衡相关的命令。如果您之前未运行过 gcloud CLI,请先运行
gcloud init
命令进行身份验证。 - 了解 bash。
权限
如需获得完成本指南所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
创建负载均衡器资源:Compute Load Balancer Admin (
roles/compute.loadBalancerAdmin
) -
创建 Compute Engine 实例和实例组:Compute Instance Admin (
roles/compute.instanceAdmin.v1
) -
创建网络组建和管理组件:Compute Network Admin (
roles/compute.networkAdmin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
为 L3_DEFAULT 流量设置负载均衡器
此部分中的步骤介绍了以下配置:
- 使用名为
lb-network
的自定义模式 VPC 网络的示例。如果您只想处理 IPv4 流量,则可以使用自动模式网络。但是,IPv6 流量需要自定义模式子网。 - 单栈子网(
stack-type
设置为IPv4
),IPv4 流量需要该子网。在自定义模式 VPC 网络中创建单栈子网时,您可以为子网选择 IPv4 子网范围。对于 IPv6 流量,我们需要双栈子网(stack-type
设置为IPv4_IPv6
)。在自定义模式 VPC 网络上创建双栈子网时,您可以为子网选择 IPv6 访问类型。在此示例中,我们将子网的ipv6-access-type
参数设置为INTERNAL
。这意味着此子网上的新虚拟机可以同时分配有内部 IPv4 地址和内部 IPv6 地址。 - 允许后端虚拟机的传入连接的防火墙规则。
- 用于此示例的后端实例组和负载均衡器组件位于以下区域和子网中:
- 地区:
us-west1
- 子网:
lb-subnet
,其主要 IPv4 地址范围为10.1.2.0/24
。虽然您可以选择在子网上配置哪个 IPv4 地址范围,但系统会自动分配 IPv6 地址范围。Google 提供固定大小 (/64) 的 IPv6 CIDR 地址块。
- 地区:
us-west1-a
可用区的托管式实例组中的后端虚拟机。- 用于测试与后端的连接的客户端虚拟机。
- 包含以下组件的内部直通网络负载均衡器:
- 后端服务健康检查。
us-west1
区域中协议设置为UNSPECIFIED
的后端服务,用于管理到可用区实例组的连接分布。- 将协议设置为
L3_DEFAULT
且将端口设置为ALL
的转发规则。
配置网络、区域和子网
如需配置具有内部 IPv6 范围的子网,请启用 Virtual Private Cloud (VPC) 网络 ULA 内部 IPv6 范围。内部 IPv6 子网范围是从此范围分配的。 如需创建示例网络和子网,请按照以下步骤操作:
控制台
如需同时支持 IPv4 和 IPv6 流量,请按照以下步骤操作:
在 Google Cloud 控制台中,转到 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
lb-network
。如果您要在此网络中的子网上配置内部 IPv6 地址范围,请完成以下步骤:
- 对于 VPC 网络 ULA 内部 IPv6 范围,选择已启用。
- 对于分配内部 IPv6 范围,选择自动或手动。
对于子网创建模式,选择自定义。
在新子网部分,为子网指定以下配置参数:
- 对于名称,输入
lb-subnet
。 - 对于区域,请选择
us-west1
。 - 如需创建双栈子网,对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)。
- 对于 IPv4 范围,输入
10.1.2.0/24
。 - 在 IPv6 访问权限类型字段中,选择内部。
- 对于名称,输入
点击完成。
点击创建。
如需支持 IPv4 流量,请按以下步骤操作:
在 Google Cloud 控制台中,转到 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
lb-network
。在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:
lb-subnet
- 区域:
us-west1
- IP 栈类型:IPv4(单栈)
- IP 地址范围:
10.1.2.0/24
- 名称:
- 点击完成。
点击创建。
gcloud
对于 IPv4 和 IPv6 流量,请使用以下命令:
如需创建新的自定义模式 VPC 网络,请运行
gcloud compute networks create
命令。如需在此网络中的任何子网上配置内部 IPv6 范围,请使用
--enable-ula-internal-ipv6
标志。此选项会分配 Google Cloud 用于内部 IPv6 子网范围的fd20::/20
范围内的/48
ULA 前缀。gcloud compute networks create lb-network \ --subnet-mode=custom \ --enable-ula-internal-ipv6
在
lb-network
中,为us-west1
区域中的后端创建子网。如需创建子网,请运行
gcloud compute networks subnets create
命令:gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1 \ --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL
对于仅限 IPv4 流量,请使用以下命令:
如需创建自定义 VPC 网络,请使用
gcloud compute networks create
命令:gcloud compute networks create lb-network --subnet-mode=custom
如需在
lb-network
网络中为us-west1
区域中的后端创建子网,请使用gcloud compute networks subnets create
命令。gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
API
对于 IPv4 和 IPv6 流量,请使用以下命令:
创建一个新的自定义模式 VPC 网络。 向
networks.insert
方法发出POST
请求。如需在此网络中的任何子网上配置内部 IPv6 范围,请将
enableUlaInternalIpv6
设置为true
。此选项会分配 Google 用于内部 IPv6 子网范围的fd20::/20
范围内的/48
范围。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "lb-network", "mtu": MTU, "enableUlaInternalIpv6": true, }
请替换以下内容:
PROJECT_ID
:在其中创建 VPC 网络的项目的 ID。MTU
:该网络的最大传输单元。MTU 可以是1460
(默认值)或1500
。在将 MTU 设置为1500
之前,请查看最大传输单元概览。
向
subnetworks.insert
方法发出POST
请求。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "10.1.2.0/24", "network": "lb-network", "name": "lb-subnet" "stackType": IPV4_IPV6, "ipv6AccessType": Internal }
对于仅限 IPv4 流量,请执行以下步骤:
向
networks.insert
方法发出POST
请求。将PROJECT_ID
替换为您的 Google Cloud 项目的 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "name": "lb-network", "autoCreateSubnetworks": false }
向
subnetworks.insert
方法发出两个POST
请求:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "privateIpGoogleAccess": false }
配置防火墙规则
此示例使用以下防火墙规则:
fw-allow-lb-access
:入站流量规则,它适用于 VPC 网络中的所有目标,允许来自10.1.2.0/24
范围内来源的流量。此规则允许来自该子网的任何客户端的传入流量。fw-allow-lb-access-ipv6
:入站流量规则,它适用于 VPC 网络中的所有目标,允许来自子网中配置的 IPv6 范围内来源的流量。此规则允许来自该子网的任何客户端的传入 IPv6 流量。fw-allow-ssh
:入站流量规则,它适用于负载均衡实例,允许从任何地址到 TCP 端口 22 的传入 SSH 连接。您可以为此规则选择限制性更高的来源 IP 地址范围;例如,您可以仅指定要从中启动 SSH 会话的系统的 IP 地址范围。此示例使用目标标记allow-ssh
来标识应该应用这项规则的虚拟机。fw-allow-health-check
:入站流量规则,它适用于负载均衡实例,允许来自 Google Cloud 健康检查系统(130.211.0.0/22
和35.191.0.0/16
)的流量。此示例使用目标标记allow-health-check
来标识应该应用该规则的实例。fw-allow-health-check-ipv6
:入站流量规则,它适用于负载均衡实例,允许来自 Google Cloud 健康检查系统 (2600:2d00:1:b029::/64
) 的流量。此示例使用目标标记allow-health-check-ipv6
来标识应该应用该规则的实例。
如果不使用上述防火墙规则,则默认拒绝入站规则会阻止传入后端实例的流量。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
如需允许 IPv4 TCP、UDP 和 ICMP 流量到达后端实例组
ig-a
,请执行以下操作:- 点击创建防火墙规则。
- 名称:
fw-allow-lb-access
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 匹配时执行的操作:允许
- 目标:网络中的所有实例
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
10.1.2.0/24
- 协议和端口:选择指定的协议和端口。
- 选择 TCP,然后输入
ALL
。 - 选择 UDP。
- 选择其他,然后输入
ICMP
。
- 选择 TCP,然后输入
点击创建。
如需允许传入 SSH 连接,请执行以下操作:
- 点击创建防火墙规则。
- 名称:
fw-allow-ssh
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 匹配时执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-ssh
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
0.0.0.0/0
- 协议和端口:选择指定的协议和端口,然后输入
tcp:22
。
点击创建。
如需允许 IPv6 TCP、UDP 和 ICMP 流量到达后端实例组
ig-a
,请执行以下操作:- 点击创建防火墙规则。
- 名称:
fw-allow-lb-access-ipv6
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 匹配时执行的操作:允许
- 目标:网络中的所有实例
- 来源过滤条件:IPv6 范围
- 来源 IPv6 范围:在
lb-subnet
中分配的 IPV6_ADDRESS - 协议和端口:选择指定的协议和端口。
- 选择 TCP,然后输入
0-65535
。 - 选择 UDP。
- 选择其他,对于 ICMPv6 协议,输入
58
。
- 选择 TCP,然后输入
点击创建。
如需允许 Google Cloud IPv6 健康检查,请执行以下操作:
- 点击创建防火墙规则。
- 名称:
fw-allow-health-check-ipv6
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 匹配时执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-health-check-ipv6
- 来源过滤条件:IPv6 范围
- 来源 IPv6 范围:
2600:2d00:1:b029::/64
- 协议和端口:允许全部
点击创建。
如需允许 Google Cloud IPv4 健康检查,请执行以下操作:
- 点击创建防火墙规则
- 名称:
fw-allow-health-check
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 匹配时执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-health-check
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
130.211.0.0/22
和35.191.0.0/16
- 协议和端口:允许全部
点击创建。
gcloud
如需允许 IPv4 TCP 流量到达后端实例组
ig-a
,请创建以下规则:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24 \ --rules=tcp,udp,icmp
创建
fw-allow-ssh
防火墙规则,以允许使用网络标记allow-ssh
通过 SSH 连接到虚拟机。如果省略source-ranges
,Google Cloud 会将规则解释为表示所有来源。gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
如需允许 IPv6 流量到达后端实例组
ig-a
,请创建以下规则:gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=IPV6_ADDRESS \ --rules=all
将
IPV6_ADDRESS
替换为在lb-subnet
中分配的 IPv6 地址。创建
fw-allow-health-check
防火墙规则以允许 Google Cloud 健康检查。gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
创建
fw-allow-health-check-ipv6
规则以允许 Google Cloud IPv6 健康检查。gcloud compute firewall-rules create fw-allow-health-check-ipv6 \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udp,icmp
API
如需创建
fw-allow-lb-access
防火墙规则,请向firewalls.insert
方法发出POST
请求。将PROJECT_ID
替换为您的 Google Cloud 项目的 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "10.1.2.0/24" ], "allPorts": true, "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
向
firewalls.insert
方法发出POST
请求,以创建fw-allow-lb-access-ipv6
防火墙规则。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "IPV6_ADDRESS" ], "allPorts": true, "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "58" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
将 IPV6_ADDRESS 替换为在
lb-subnet
中分配的 IPv6 地址。如需创建
fw-allow-ssh
防火墙规则,请向firewalls.insert
方法发出POST
请求:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
如需创建
fw-allow-health-check
防火墙规则,请向firewalls.insert
方法发出POST
请求:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
向
firewalls.insert
方法发出POST
请求,以创建fw-allow-health-check-ipv6
防火墙规则。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "2600:2d00:1:b029::/64" ], "targetTags": [ "allow-health-check-ipv6" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
创建后端虚拟机和实例组
对于此负载均衡场景,您要创建一个 Compute Engine 可用区托管式实例组并安装 Apache Web 服务器。
要同时处理 IPv4 和 IPv6 流量,请将后端虚拟机配置为双栈。将虚拟机的 stack-type
设置为 IPv4_IPv6
。虚拟机还会从子网继承 ipv6-access-type
设置(在此示例中为 INTERNAL
)。 如需详细了解 IPv6 要求,请参阅内部直通式网络负载均衡器概览:转发规则。
如果要将现有虚拟机用作后端,请使用 gcloud compute instances network-interfaces update 命令将虚拟机更新为双栈。
作为内部直通式网络负载均衡器的后端虚拟机参与的实例必须运行相应的 Linux 客机环境、Windows 客机环境或提供同等功能的其他进程。
为便于说明,这些后端虚拟机均运行 Debian GNU/Linux 10。
创建实例组
控制台
如需同时支持 IPv4 和 IPv6 流量,请按照以下步骤操作:
创建实例模板。在 Google Cloud 控制台中,进入实例模板页面。
- 点击创建实例模板。
- 为名称输入
vm-a1
。 - 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。 - 展开高级选项部分。
展开管理部分,然后将以下脚本复制到启动脚本字段中。启动脚本还会将 Apache 服务器配置为侦听端口
8080
,而不是端口80
。#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl 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 sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf systemctl restart apache2
展开网络部分,然后指定以下内容:
- 在网络标记字段中,添加
allow-ssh
和allow-health-check-ipv6
。 - 对于网络接口,请点击默认接口并配置以下字段:
- 网络:
lb-network
- 子网:
lb-subnet
- IP 栈类型:IPv4 和 IPv6(双栈)
- 网络:
- 在网络标记字段中,添加
点击创建。
如需支持 IPv4 流量,请按以下步骤操作:
创建实例模板。在 Google Cloud 控制台中,进入实例模板页面。
点击创建实例模板。
- 为名称输入
vm-a1
。 - 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。本文中的说明使用仅 Debian 支持的命令,例如
apt-get
。 - 展开高级选项部分。
展开管理部分,然后将以下脚本复制到启动脚本字段中。启动脚本还会将 Apache 服务器配置为侦听端口
8080
,而不是端口80
。#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl 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 sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf systemctl restart apache2
展开网络部分,然后指定以下内容:
- 在网络标记字段中,添加
allow-ssh
和allow-health-check
。 - 对于网络接口,请点击默认接口并配置以下字段:
- 网络:
lb-network
- 子网:
lb-subnet
- IP 栈类型:IPv4(单栈)
- 网络:
- 在网络标记字段中,添加
点击创建。
- 为名称输入
创建托管式实例组。转到 Google Cloud 控制台中的实例组页面。
- 点击创建实例组。
- 选择新的托管式实例组(无状态)。如需了解详情,请参阅无状态或有状态 MIG。
- 对于名称,请输入
ig-a
。 - 对于位置,选择单个可用区。
- 对于区域,请选择
us-west1
。 - 对于可用区,请选择
us-west1-a
。 - 对于实例模板,请选择
vm-a1
。 指定要在组中创建的实例数。
对于此示例,请在自动扩缩下指定以下选项:
- 对于自动扩缩模式,请选择
Off:do not autoscale
。 - 对于实例数上限,请输入
2
。
- 对于自动扩缩模式,请选择
点击创建。
gcloud
本指南中的 gcloud
说明假定您使用的是 Cloud Shell 或安装了 bash 的其他环境。
使用
gcloud compute instance-templates create
命令创建含有 HTTP 服务器的虚拟机实例模板。启动脚本还会将 Apache 服务器配置为侦听端口
8080
,而不是端口80
。如需同时处理 IPv4 和 IPv6 流量,请使用以下命令。
gcloud compute instance-templates create vm-a1 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet \ --ipv6-network-tier=PREMIUM \ --stack-type=IPv4_IPv6 \ --tags=allow-ssh \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl 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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
或者,如果您只想处理 IPv4 流量,请使用以下命令。
gcloud compute instance-templates create vm-a1 \ --region=us-west1 \ --network=lb-network \ --subnet=lb-subnet \ --tags=allow-ssh \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl 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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
使用
gcloud compute instance-groups managed create
命令在相应可用区中创建一个托管式实例组。gcloud compute instance-groups managed create ig-a \ --zone us-west1-a \ --size 2 \ --template vm-a1
api
如需同时处理 IPv4 和 IPv6 流量,请执行以下步骤:
向
instances.insert
方法发出POST
请求来创建虚拟机:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "vm-a1", "tags": { "items": [ "allow-health-check-ipv6", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-a1", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME", "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
如需处理 IPv4 流量,请按以下步骤操作。
向
instances.insert
方法发出POST
请求来创建虚拟机:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "vm-a1", "tags": { "items": [ "allow-health-check", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-a1", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME", "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
向
instanceGroups.insert
方法发出POST
请求来创建实例组。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups { "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
向
instanceGroups.addInstances
方法发出一个POST
请求,为每个实例组添加实例。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1" } ] }
创建客户端虚拟机
此示例在后端(服务器)虚拟机所在的同一区域创建一个客户端虚拟机。该客户端用于验证负载均衡器的配置,并演示测试部分中所述的预期行为。
对于 IPv4 和 IPv6 流量:
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击创建实例。
将名称设置为
vm-client-ipv6
。将可用区设置为
us-west1-a
。展开高级选项部分,然后进行以下更改:
- 展开网络,然后将
allow-ssh
添加到网络标记。 - 在网络接口下,点击修改,进行以下更改,然后点击完成:
- 网络:
lb-network
- 子网:
lb-subnet
- IP 栈类型:IPv4 和 IPv6(双栈)
- 主要内部 IP:临时(自动)
- 外部 IP:临时
- 网络:
- 展开网络,然后将
点击创建。
gcloud
客户端虚拟机可以位于负载均衡器所在的同一区域的任何可用区中,并且可以使用该区域中的任何子网。在此示例中,客户端位于 us-west1-a
可用区,并使用与后端虚拟机相同的子网。
gcloud compute instances create vm-client-ipv6 \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --stack-type=IPV4_IPV6 \ --tags=allow-ssh \ --subnet=lb-subnet
api
向 instances.insert
方法发出 POST
请求。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client-ipv6", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
对于 IPv4 流量:
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击创建实例。
对于名称,输入
vm-client
。在可用区字段中,输入
us-west1-a
。展开高级选项部分。
展开网络,并配置以下字段:
- 对于网络标记,请输入
allow-ssh
。 - 对于网络接口,请选择以下内容:
- 网络:
lb-network
- 子网:
lb-subnet
- 网络:
- 对于网络标记,请输入
点击创建。
gcloud
客户端虚拟机可以位于负载均衡器所在的同一区域的任何可用区中,并且可以使用该区域中的任何子网。在此示例中,客户端位于 us-west1-a
区域,并使用与后端虚拟机相同的子网。
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
API
向 instances.insert
方法发出 POST
请求。
将 PROJECT_ID
替换为您的 Google Cloud 项目的 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
配置负载均衡器组件
为多个协议创建负载均衡器。
gcloud
为端口 80 创建 HTTP 健康检查。此健康检查用于验证
ig-a
实例组中的后端的健康状况。gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
创建后端服务,并将协议设置为
UNSPECIFIED
:gcloud compute backend-services create be-ilb-l3-default \ --load-balancing-scheme=internal \ --protocol=UNSPECIFIED \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
将实例组添加到后端服务:
gcloud compute backend-services add-backend be-ilb-l3-default \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
对于 IPv6 流量:创建协议设置为
L3_DEFAULT
的转发规则,以处理所有受支持的 IPv6 协议流量。所有端口都必须配置有L3_DEFAULT
转发规则。gcloud compute forwarding-rules create fr-ilb-ipv6 \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --ip-protocol=L3_DEFAULT \ --ports=ALL \ --backend-service=be-ilb-l3-default \ --backend-service-region=us-west1 \ --ip-version=IPV6
对于 IPv4 流量:创建协议设置为
L3_DEFAULT
的转发规则,以处理所有受支持的 IPv4 协议流量。所有端口都必须配置有L3_DEFAULT
转发规则。使用10.1.2.99
作为内部 IP 地址。gcloud compute forwarding-rules create fr-ilb-l3-default \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=L3_DEFAULT \ --ports=ALL \ --backend-service=be-ilb-l3-default \ --backend-service-region=us-west1
API
向
regionHealthChecks.insert
方法发出POST
请求,以创建健康检查。将PROJECT_ID
替换为您的 Google Cloud 项目的 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks { "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
向
regionBackendServices.insert
方法发出POST
请求,以创建区域后端服务。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb-l3-default", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "protocol": "UNSPECIFIED", "connectionDraining": { "drainingTimeoutSec": 0 } }
对于 IPv6 流量:通过向
forwardingRules.insert
方法发出POST
请求来创建转发规则。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-ipv6", "IPProtocol": "L3_DEFAULT", "allPorts": true, "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default", "ipVersion": "IPV6", "networkTier": "PREMIUM" }
对于 IPv4 流量:通过向
forwardingRules.insert
方法发出POST
请求来创建转发规则:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-l3-default", "IPAddress": "10.1.2.99", "IPProtocol": "L3_DEFAULT", "allPorts": true, "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default", "networkTier": "PREMIUM" }
测试负载均衡器
以下测试展示了如何验证负载均衡器配置并了解其预期行为。
测试来自客户端虚拟机的连接
此测试通过单独的客户端虚拟机连接负载均衡器;也就是说,并非使用负载均衡器的后端虚拟机。
gcloud:IPv6
连接到客户端虚拟机实例。
gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
描述 IPv6 转发规则
fr-ilb-ipv6
。请注意说明中的IPV6_ADDRESS
。gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
从具有 IPv6 连接的客户端,运行以下命令。将
IPV6_ADDRESS
替换为fr-ilb-ipv6
转发规则中的临时 IPv6 地址。curl -m 10 -s http://IPV6_ADDRESS:80
比方说,如果分配的 IPv6 地址为
[fd20:1db0:b882:802:0:46:0:0/96]:80
,则该命令应如下所示:curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
gcloud:IPv4
连接到客户端虚拟机实例。
gcloud compute ssh vm-client --zone=us-west1-a
描述 IPv4 转发规则
fr-ilb
。gcloud compute forwarding-rules describe fr-ilb --region=us-west1
使用
curl
连接负载均衡器的 IP 地址,通过这种方式向负载均衡器发送 Web 请求。重复该请求,您可以看到响应来自不同的后端虚拟机。根据每个后端虚拟机上/var/www/html/index.html
的内容,生成响应的虚拟机的名称会显示在 HTML 响应的文本中。预期响应如Page served from: vm-a1
所示。curl http://10.1.2.99
转发规则配置为提供端口
80
和53
。如需向这些端口发送流量,请在 IP 地址后附加英文冒号 (:
) 和端口号,如下所示:curl http://10.1.2.99:80
对负载均衡器的 IP 地址执行 ping 操作
此测试演示了预期的行为:您可以对负载均衡器的 IP 地址执行 ping 操作。
gcloud:IPv6
连接到客户端虚拟机实例。
gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
尝试对负载均衡器的 IPv6 地址执行 ping 操作。将
IPV6_ADDRESS
替换为fr-ilb-ipv6
转发规则中的临时 IPv6 地址。请注意,在此示例中,您收到了响应,并且
ping
命令有效。ping6 IPV6_ADDRESS
例如,如果分配的 IPv6 地址为
[2001:db8:1:1:1:1:1:1/96]
,则该命令如下所示:ping6 2001:db8:1:1:1:1:1:1
输出类似于以下内容:
@vm-client: ping
IPV6_ADDRESS
PINGIPV6_ADDRESS
(IPV6_ADDRESS
) 56(84) bytes of data. 64 bytes fromIPV6_ADDRESS
: icmp_seq=1 ttl=64 time=1.58 ms
gcloud:IPv4
连接到客户端虚拟机实例。
gcloud compute ssh vm-client --zone=us-west1-a
尝试对负载均衡器的 IPv4 地址执行 ping 操作。请注意,在此示例中,您收到了响应,并且
ping
命令有效。ping 10.1.2.99
输出如下所示:
@vm-client: ping 10.1.2.99 PING 10.1.2.99 (10.1.2.99) 56(84) bytes of data. 64 bytes from 10.1.2.99: icmp_seq=1 ttl=64 time=1.58 ms 64 bytes from 10.1.2.99: icmp_seq=2 ttl=64 time=0.242 ms 64 bytes from 10.1.2.99: icmp_seq=3 ttl=64 time=0.295 ms
其他配置选项
本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。
您可以为示例预留静态内部 IP 地址。此配置允许多个内部转发规则将同一 IP 地址用于不同的协议和不同的端口。示例负载均衡器的后端仍必须位于区域 us-west1
中。
下图展示了此示例的架构。
您还可以考虑使用以下转发规则配置:
使用多个端口的转发规则:
- 协议为
TCP
,端口为80,8080
- 协议为
L3_DEFAULT
,端口为ALL
- 协议为
使用所有端口的转发规则:
- 协议为
TCP
,端口为ALL
- 协议为
L3_DEFAULT
,端口为ALL
- 协议为
预留静态内部 IPv4 地址
为 10.1.2.99
预留静态内部 IP 地址,并将其 --purpose
标志设置为 SHARED_LOADBALANCER_VIP
。必须使用 --purpose
标志,以便多条转发规则可以使用同一内部 IP 地址。
gcloud
使用 gcloud compute addresses create
命令:
gcloud compute addresses create internal-lb-ipv4 \ --region us-west1 \ --subnet lb-subnet \ --purpose SHARED_LOADBALANCER_VIP \ --addresses 10.1.2.99
API
调用 addresses.insert
方法。
将 PROJECT_ID
替换为您的 Google Cloud 项目的 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses
请求正文必须包含 addressType
(应为 INTERNAL
)、地址的 name
以及 IP 地址所属的 subnetwork
。您必须将 address
指定为 10.1.2.99
。
{ "addressType": "INTERNAL", "name": "internal-lb-ipv4", "subnetwork": "regions/us-west1/subnetworks/lb-subnet", "purpose": "SHARED_LOADBALANCER_VIP", "address": "10.1.2.99" }
配置负载均衡器组件
使用以下组件配置三个负载均衡器:
- 第一个负载均衡器具有使用协议
TCP
和端口80
的转发规则。到达端口80
上的内部 IP 地址的 TCP 流量由TCP
转发规则处理。 - 第二个负载均衡器的转发规则具有协议
UDP
和端口53
。到达端口53
上的内部 IP 地址的 UDP 流量由UDP
转发规则处理。 - 第三个负载均衡器具有协议为
L3_DEFAULT
和端口ALL
的转发规则。与TCP
或UDP
转发规则不匹配的所有其他流量都由L3_DEFAULT
转发规则处理。 - 所有三个负载均衡器的转发规则都共享相同的静态内部 IP 地址 (
internal-lb-ipv4
)。
创建第一个负载均衡器
为端口 80
上的 TCP 流量创建第一个负载均衡器。
gcloud
为 TCP 流量创建后端服务:
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
将实例组添加到后端服务:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
为后端服务创建转发规则。使用预留的静态内部 IP 地址 (
internal-lb-ipv4
) 作为内部 IP 地址。gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=internal-lb-ipv4 \ --ip-protocol=TCP \ --ports=80 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
向
regionBackendServices.insert
方法发出POST
请求,以创建区域后端服务。将PROJECT_ID
替换为您的 Google Cloud 项目的 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "protocol": "TCP", "connectionDraining": { "drainingTimeoutSec": 0 } }
Create the forwarding rule by making a
POST
request to theforwardingRules.insert
method:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "internal-lb-ipv4", "IPProtocol": "TCP", "ports": [ "80" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
创建第二个负载均衡器
为端口 53
上的 UDP 流量创建第二个负载均衡器。
gcloud
创建后端服务,并将协议设置为
UDP
:gcloud compute backend-services create be-ilb-udp \ --load-balancing-scheme=internal \ --protocol=UDP \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
将实例组添加到后端服务:
gcloud compute backend-services add-backend be-ilb-udp \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
为后端服务创建转发规则。使用预留的静态内部 IP 地址 (
internal-lb-ipv4
) 作为内部 IP 地址。gcloud compute forwarding-rules create fr-ilb-udp \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=internal-lb-ipv4 \ --ip-protocol=UDP \ --ports=53 \ --backend-service=be-ilb-udp \ --backend-service-region=us-west1
API
向
regionBackendServices.insert
方法发出POST
请求,以创建区域后端服务。将PROJECT_ID
替换为您的 Google Cloud 项目的 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb-udp", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "protocol": "UDP", "connectionDraining": { "drainingTimeoutSec": 0 } }
向
forwardingRules.insert
方法发出POST
请求,以创建转发规则。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-udp", "IPAddress": "internal-lb-ipv4", "IPProtocol": "UDP", "ports": [ "53" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-udp", "networkTier": "PREMIUM" }
创建第三个负载均衡器
创建第三个负载均衡器的转发规则以使用静态预留内部 IP 地址。
gcloud
创建协议设置为 L3_DEFAULT
的转发规则,以处理所有其他受支持的 IPv4 协议流量。使用预留的静态内部 IP 地址 (internal-lb-ipv4
) 作为内部 IP 地址。
gcloud compute forwarding-rules create fr-ilb-l3-default \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=internal-lb-ipv4 \ --ip-protocol=L3_DEFAULT \ --ports=ALL \ --backend-service=be-ilb-l3-default \ --backend-service-region=us-west1
API
向 forwardingRules.insert
方法发出 POST
请求,以创建转发规则。将 PROJECT_ID
替换为您的 Google Cloud 项目的 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-l3-default", "IPAddress": "internal-lb-ipv4", "IPProtocol": "L3_DEFAULT", "ports": [ "ALL" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default", "networkTier": "PREMIUM" }
测试负载均衡器
如需测试您的负载均衡器,请按照上一部分中的步骤操作。
后续步骤
- 如需了解重要概念,请参阅内部直通网络负载均衡器概览。
- 如需了解如何配置故障切换,请参阅为内部直通网络负载均衡器配置故障切换。
- 如需了解如何为内部直通式网络负载均衡器配置日志记录和监控功能,请参阅内部直通式网络负载均衡器日志记录和监控。
- 如需了解问题排查,请参阅排查内部直通网络负载均衡器问题。
- 清理负载均衡设置。