本页面介绍如何部署区域外部应用负载均衡器,以将流量负载均衡到在本地或在其他公有云中可使用混合连接访问的网络端点。
完成这些任务后,您可以选择探索启用其他服务(例如 Cloud CDN 和 Google Cloud Armor)和高级流量管理功能。
如果您尚未设置混合连接性 NEG,请查看混合连接性 NEG 概览,以了解设置混合负载均衡的网络要求。
设置概览
本页面上的示例设置以下示例部署:
您必须先配置混合连接,然后再尝试设置混合负载均衡部署。本文档不包含混合连接设置。
根据您选择的混合连接产品(Cloud VPN 或 Cloud Interconnect [专用或合作伙伴]),按照相关产品文档进行配置。
权限
如需设置混合负载均衡,您必须拥有以下权限:
在 Google Cloud 上
- 在 Google Cloud 与本地环境或其他云环境之间建立混合连接的权限。如需查看所需的权限列表,请参阅相关的 Network Connectivity 产品文档。
- 创建混合连接 NEG 和负载均衡器的权限。Compute Load Balancer Admin 角色 (
roles/compute.loadBalancerAdmin
) 可提供执行本指南中描述的任务所需的权限。
在本地环境或其他非 Google Cloud 云环境中
- 配置网络端点的权限,以允许使用
IP:Port
组合从 Google Cloud 访问本地环境或其他云环境中的服务。如需了解详情,请与您的环境的网络管理员联系。 - 在本地环境或其他云环境中创建防火墙规则的权限,以允许 Google 的健康检查探测到达端点。
- 配置网络端点的权限,以允许使用
此外,如需完成本页面上的说明,您需要创建混合连接 NEG、负载均衡器和可用区级 NEG(及其端点),以用作负载均衡器的基于 Google Cloud 的后端。
您应该是项目的 Owner 或 Editor,或者应具有以下 Compute Engine IAM 角色。
任务 | 所需角色 |
---|---|
创建网络、子网和负载均衡器组件 | Compute Network Admin
(roles/compute.networkAdmin ) |
添加和移除防火墙规则 | Compute Security Admin
(roles/compute.securityAdmin ) |
创建实例 | Compute Instance Admin
(roles/compute.instanceAdmin ) |
建立混合连接
您必须将 Cloud Interconnect VLAN 连接或 Cloud VPN 隧道与 Cloud Router 结合使用通过混合连接来连接 Google Cloud 和本地环境或其他云环境。我们建议您使用高可用性连接。
通过全球动态路由启用的 Cloud Router 路由器会通过边界网关协议 (BGP) 获知特定端点并将其编程到您的 Google Cloud VPC 网络中。不支持区域动态路由。也不支持静态路由。
您用于配置 Cloud Interconnect 或 Cloud VPN 的 VPC 网络与您用于配置混合负载均衡部署的网络相同。确保您的 VPC 网络的子网 CIDR 范围与远程 CIDR 范围无冲突。当 IP 地址重叠时,子网路由优先于远程连接。
如需查看相关说明,请参阅以下文档:
设置 Google Cloud 外部的环境
执行以下步骤,设置本地环境或其他云环境以用于混合负载均衡:
- 将网络端点配置为向 Google Cloud 公开本地服务 (
IP:Port
)。 - 在本地环境或其他云环境中配置防火墙规则。
- 将 Cloud Router 路由器配置为向专用环境通告所需的特定路由。
设置网络端点
设置混合连接后,您可以在本地环境或其他云环境中配置一个或多个网络端点,这些端点可使用 IP:port
组合通过 Cloud Interconnect 或 Cloud VPN 进行访问。此 IP:port
组合将配置为混合连接 NEG(稍后将在此流程中在 Google Cloud 中创建)的一个或多个端点。
如果 IP 端点有多个路径,则路由将遵循 Cloud Router 概览中所述的行为。
设置防火墙规则
您必须在本地环境或其他云环境中创建以下防火墙规则:
- 在本地环境或其他云环境中创建入站流量允许防火墙规则,以允许来自区域的代理专用子网的流量到达端点。
对于混合 NEG,无需将 Google 的健康检查探测范围添加到许可名单中。但是,如果您在单个后端服务中结合使用混合和可用区级 NEG,则必须将 Google 健康检查探测范围添加到可用区级 NEG 的许可名单中。
通告路由
将 Cloud Router 配置为向本地环境或其他云环境通告以下自定义 IP 范围:
- 区域的代理专用子网的范围。
设置 Google Cloud 环境
对于以下步骤,请确保使用用于在环境之间配置混合连接的同一 VPC 网络(在此过程中称为 NETWORK)。
此外,确保使用的区域(在此过程中称为 REGION)与创建 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接所在的区域相同。
配置代理专用子网
此代理专用子网用于 REGION 区域内的所有区域级外部应用负载均衡器。
控制台
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
转到“VPC 网络” - 转到用于配置环境之间的混合连接的网络。
- 点击添加子网。
- 输入名称:PROXY_ONLY_SUBNET_NAME。
- 选择区域:REGION。
- 将用途设置为区域级代管式代理。
- 输入 IP 地址范围:PROXY_ONLY_SUBNET_RANGE。
- 点击添加。
gcloud
使用 gcloud compute networks subnets
create
命令创建代理专用子网。
gcloud compute networks subnets create PROXY_ONLY_SUBNET_NAME \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION \ --network=NETWORK \ --range=PROXY_ONLY_SUBNET_RANGE
配置负载均衡器子网
此子网用于创建负载均衡器的可用区级 NEG 后端、前端和内部 IP 地址。
在用于配置环境之间的混合连接的 NETWORK 网络中创建子网。
Cloud 控制台
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
转到“VPC 网络” - 转到用于配置环境之间的混合连接的网络。
- 在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:LB_SUBNET_NAME
- 区域:REGION
- IP 地址范围:LB_SUBNET_RANGE
- 点击完成。
- 点击创建。
gcloud
在用于配置环境之间的混合连接的 NETWORK 网络中创建子网。
gcloud compute networks subnets create LB_SUBNET_NAME
--network=NETWORK
--range=LB_SUBNET_RANGE
--region=REGION
预留负载均衡器的 IP 地址
Cloud 控制台
在 Google Cloud 控制台中,转到预留静态地址页面。
输入名称:LB_IP_ADDRESS。
对于网络服务层级,请选择标准。
对于 IP 版本,请选择 IPv4。
对于类型,请选择区域。
选择要在其中创建地址的 REGION。
保留关联到选项设置为无。创建负载均衡器后,此 IP 地址将关联到负载均衡器的转发规则。
点击预留以预留该 IP 地址。
gcloud
按如下所示预留区域静态外部 IP 地址。
gcloud compute addresses create LB_IP_ADDRESS \ --region=REGION \ --network-tier=STANDARD
使用
compute addresses describe
命令可以查看结果:gcloud compute addresses describe LB_IP_ADDRESS \ --region=REGION
为可用区级 NEG 创建防火墙规则
在此示例中,您将为 Google Cloud 上的可用区级 NEG 后端创建以下防火墙规则:
fw-allow-health-check
:入站流量防火墙规则,它适用于负载均衡实例,允许来自负载均衡器和 Google Cloud 健康检查系统(130.211.0.0/22
和35.191.0.0/16
)的流量。此示例使用目标标记allow-health-check
来标识应该应用该规则的后端虚拟机。 对于混合 NEG,无需将 Google 的健康检查探测范围添加到许可名单中。但是,如果您在单个后端服务中结合使用混合和可用区级 NEG,则必须将 Google 健康检查探测范围添加到可用区级 NEG 的许可名单中。fw-allow-proxy-only-subnet
:一种入站流量防火墙规则,允许来自代理专用子网的连接到达后端。此示例使用目标标记allow-proxy-only-subnet
来标识应该应用该规则的后端虚拟机。
控制台
- 在 Google Cloud 控制台中,转到防火墙页面。
前往“防火墙政策” - 点击创建防火墙规则,以创建允许来自健康检查探测的流量的规则:
- 输入
fw-allow-health-check
作为名称。 - 在网络下,选择 NETWORK。
- 在目标下,选择指定的目标标记。
- 使用
allow-health-check
填充目标标记字段。 - 将来源过滤条件设置为 IPv4 范围。
- 将来源 IPv4 范围设置为
130.211.0.0/22
和35.191.0.0/16
。 - 在协议和端口下,选择指定的协议和端口。
- 选择 TCP,然后输入
80
作为端口号。 - 点击创建。
- 输入
- 再次点击创建防火墙规则,以创建允许来自代理专用子网的传入连接的规则:
- 名称:
fw-allow-ssh
- 网络:NETWORK
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-proxy-only-subnet
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:PROXY_ONLY_SUBNET_RANGE
- 协议和端口:选择指定的协议和端口
- 选择 TCP,然后输入
80
作为端口号。 - 点击创建。
- 名称:
gcloud
创建
fw-allow-health-check-and-proxy
规则,以允许 Google Cloud 健康检查通过 TCP 端口80
访问后端实例:gcloud compute firewall-rules create fw-allow-health-check \ --network=NETWORK \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp:80
为代理专用子网创建入站流量允许防火墙规则,以允许负载均衡器与 TCP 端口
80
上的后端实例进行通信:gcloud compute firewall-rules create fw-allow-proxy-only-subnet \ --network=NETWORK \ --action=allow \ --direction=ingress \ --target-tags=allow-proxy-only-subnet \ --source-ranges=PROXY_ONLY_SUBNET_RANGE \ --rules=tcp:80
设置可用区级 NEG
对于基于 Google Cloud 的后端,我们建议您在配置混合连接的同一区域中配置多个可用区级 NEG。
在此示例中,我们在 REGION 区域中设置了一个可用区级 NEG(具有 GCE_VM_IP_PORT
类型的端点)。首先在 GCP_NEG_ZONE 可用区创建虚拟机。然后,在同一 GCP_NEG_ZONE 中创建可用区级 NEG,并将虚拟机的网络端点添加到 NEG。
创建虚拟机
控制台
- 转到 Google Cloud 控制台中的“虚拟机实例”页面。
转到“虚拟机实例” - 点击创建实例。
- 将名称设置为
vm-a1
。 - 对于区域,选择 REGION,然后选择任何可用区。在此过程中,此项称为 GCP_NEG_ZONE。
- 在启动磁盘部分中,确保为启动磁盘选项选择了 Debian GNU/Linux 12 (bookworm)。如有必要,请点击选择以更改映像。
点击高级选项并进行以下更改:
- 点击网络,并添加以下网络标记:
allow-ssh
、allow-health-check
和allow-proxy-only-subnet
。 - 点击网络接口下的修改
- 网络:NETWORK
- 子网:LB_SUBNET_NAME
按钮并进行以下更改,然后点击完成: 点击管理。在启动脚本字段中,复制并粘贴以下脚本内容。所有四个虚拟机的脚本内容均相同:
#! /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 systemctl restart apache2
- 点击网络,并添加以下网络标记:
点击创建。
重复执行下列步骤,使用以下名称和可用区组合创建第二个虚拟机:
- 名称:
vm-a2
,可用区:GCP_NEG_ZONE
- 名称:
gcloud
使用虚拟机名称及其可用区的这些组合运行以下命令两次来创建虚拟机。两个虚拟机的脚本内容相同。
- VM_NAME 为
vm-a1
,GCP_NEG_ZONE 为您选择的任何可用区 VM_NAME 为
vm-a2
和同一 GCP_NEG_ZONE 可用区gcloud compute instances create VM_NAME \ --zone=GCP_NEG_ZONE \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \ --subnet=LB_SUBNET_NAME \ --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 systemctl restart apache2'
创建可用区级 NEG
控制台
如需创建可用区级网络端点组,请执行以下操作:
- 转到 Google Cloud 控制台中的“网络端点组”页面。
转到“网络端点组”页面 - 点击创建网络端点组。
- 输入可用区级 NEG 的名称。在此过程中称为 GCP_NEG_NAME。
- 选择网络端点组类型:网络端点组(可用区级)。
- 选择网络:NETWORK
- 选择子网:LB_SUBNET_NAME
- 选择可用区:GCP_NEG_ZONE
- 输入默认端口:
80
。 - 点击创建。
将端点添加到可用区级 NEG:
- 转到 Google Cloud 控制台中的“网络端点组”页面。
进入“网络端点组” - 点击上一步中创建的网络端点组的名称 (GCP_NEG_NAME)。随即会出现网络端点组详情页面。
- 在此组中的网络端点部分,点击添加网络端点。您会看到添加网络端点页面。
- 选择一个虚拟机实例,将其内部 IP 地址添加为网络端点。网络接口部分会显示虚拟机的名称、可用区和子网。
- 在 IPv4 地址字段中,输入新网络端点的 IPv4 地址。
- 选择端口类型。
- 如果您选择默认,端点会使用网络端点组中所有端点的默认端口
80
。这足以满足我们的示例需求,因为 Apache 服务器在端口80
处理请求。 - 如果您选择自定义,请输入要供端点使用的端口号。
- 如果您选择默认,端点会使用网络端点组中所有端点的默认端口
- 如需添加更多端点,请点击添加网络端点,并重复上述步骤。
- 添加所有端点后,点击创建。
gcloud
使用
gcloud compute network-endpoint-groups create
命令创建可用区级 NEG(具有GCE_VM_IP_PORT
端点):gcloud compute network-endpoint-groups create GCP_NEG_NAME \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=GCP_NEG_ZONE \ --network=NETWORK \ --subnet=LB_SUBNET_NAME
您可以在此步骤中创建 NEG 时指定
--default-port
,也可以为每个端点指定端口号,如下一步所示。将端点添加到 GCP_NEG_NAME。
gcloud compute network-endpoint-groups update GCP_NEG_NAME \ --zone=GCP_NEG_ZONE \ --add-endpoint='instance=vm-a1,port=80' \ --add-endpoint='instance=vm-a2,port=80'
设置混合连接 NEG
创建 NEG 时,请使用使 Google Cloud 与您的本地或其他云环境之间的地理距离最短的可用区。例如,如果您在德国法兰克福的某一本地环境中托管一项服务,则可以在创建 NEG 时指定 europe-west3-a
Google Cloud 可用区。
此外,如果您使用的是 Cloud Interconnect,则用于创建 NEG 的可用区应位于配置的 Cloud Interconnect 连接所在的同一区域中。
如需了解可用区域和可用区,请参阅 Compute Engine 文档:可用的区域和可用区。
控制台
如需创建混合连接网络端点组,请执行以下操作:
- 转到 Google Cloud 控制台中的“网络端点组”页面。
进入“网络端点组” - 点击创建网络端点组。
- 输入混合 NEG 的名称。在此过程中称为 ON_PREM_NEG_NAME。
- 选择网络端点组类型:混合连接网络端点组(可用区级)。
- 选择网络:NETWORK
- 选择子网:LB_SUBNET_NAME
- 选择可用区:ON_PREM_NEG_ZONE
- 输入默认端口。
- 点击创建
将端点添加到混合连接 NEG:
- 转到 Google Cloud 控制台中的“网络端点组”页面。
转到“网络端点组”页面 - 点击上一步中创建的网络端点组的名称 (ON_PREM_NEG_NAME)。您会看到网络端点组详情页面。
- 在此组中的网络端点部分,点击添加网络端点。您会看到添加网络端点页面。
- 输入新网络端点的 IP 地址。
- 选择端口类型。
- 如果您选择默认,端点会使用网络端点组中所有端点的默认端口。
- 如果您选择自定义,可以输入其他端口号以供端点使用。
- 如需添加更多端点,请点击添加网络端点,并重复上述步骤。
- 添加所有非 Google Cloud 端点后,点击创建。
gcloud
使用
gcloud compute network-endpoint-groups create
命令创建混合连接 NEG。gcloud compute network-endpoint-groups create ON_PREM_NEG_NAME \ --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \ --zone=ON_PREM_NEG_ZONE \ --network=NETWORK
将本地后端虚拟机端点添加到 ON_PREM_NEG_NAME:
gcloud compute network-endpoint-groups update ON_PREM_NEG_NAME \ --zone=ON_PREM_NEG_ZONE \ --add-endpoint="ip=ON_PREM_IP_ADDRESS_1,port=PORT_1" \ --add-endpoint="ip=ON_PREM_IP_ADDRESS_2,port=PORT_2"
您可以使用此命令添加之前在本地或云端环境中配置的网络端点。根据需要重复执行 --add-endpoint
。
如果需要,您可以重复执行上述步骤来创建多个混合 NEG。
配置负载均衡器
创建同时具有可用区级和混合 NEG 后端的负载均衡器。
控制台
gcloud
- 为后端创建健康检查。
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=REGION \ --use-serving-port
混合 NEG 后端的健康检查探测源自代理专用子网中的 Envoy 代理,而可用区级 NEG 后端的探测源自 [Google 的中央探测 IP 范围](/load-balancing/docs/health-check-concepts#ip-ranges)。 - 创建后端服务。您可以将可用区级 NEG 和混合连接 NEG 作为后端添加到此后端服务。
gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=REGION \ --region=REGION
- 将可用区级 NEG 作为后端添加到此后端服务。
gcloud compute backend-services add-backend BACKEND_SERVICE \ --region=REGION \ --balancing-mode=RATE \ --max-rate-per-endpoint=MAX_REQUEST_RATE_PER_ENDPOINT \ --network-endpoint-group=GCP_NEG_NAME \ --network-endpoint-group-zone=GCP_NEG_ZONE
如需详细了解如何配置均衡模式,请参阅 gcloud CLI 文档中的--max-rate-per-endpoint
参数。 - 将混合 NEG 作为后端添加到此后端服务。
gcloud compute backend-services add-backend BACKEND_SERVICE \ --region=REGION \ --balancing-mode=RATE \ --max-rate-per-endpoint=MAX_REQUEST_RATE_PER_ENDPOINT \ --network-endpoint-group=ON_PREM_NEG_NAME \ --network-endpoint-group-zone=ON_PREM_NEG_ZONE
如需详细了解如何配置均衡模式,请参阅 gcloud CLI 文档中的--max-rate-per-endpoint
参数。 - 创建网址映射以将传入请求路由到相应后端服务:
gcloud compute url-maps create URL_MAP_NAME \ --default-service BACKEND_SERVICE \ --region=REGION
- 可选:如果您在客户端和负载均衡器之间使用 HTTPS,请执行此步骤。HTTP 负载均衡器不需要执行此步骤。
您可以创建 Compute Engine 证书或 Certificate Manager 证书。使用以下任一方法通过 Certificate Manager 创建证书:
- 自行管理的区域级证书。如需了解如何创建和使用自行管理的区域级证书,请参阅部署自行管理的区域级证书。不支持证书映射。
Google 管理的区域级证书。不支持证书映射。
Certificate Manager 支持以下类型的 Google 管理的区域级证书:
- 具有每个项目的 DNS 授权的 Google 管理的区域级证书。如需了解详情,请参阅部署 Google 管理的区域级证书。
- 使用 Certificate Authority Service 的 Google 管理的(专用)区域级证书。如需了解详情,请参阅使用 CA Service 部署 Google 管理的区域级证书。
创建证书后,将证书直接附加到目标代理。
如需创建 Compute Engine 自行管理的 SSL 证书资源,请运行以下命令:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
- 创建目标 HTTPS 代理以将请求路由到您的网址映射:
对于 HTTP 负载均衡器,请创建 HTTP 目标代理:gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --url-map-region=REGION \ --region=REGION
对于 HTTPS 负载均衡器,请创建 HTTPS 目标代理。该代理属于负载均衡器,用于保存 HTTPS 负载均衡所需的 SSL 证书,因此您还需要在此步骤中加载您的证书。gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --url-map-region=REGION \ --region=REGION
- 创建转发规则以将传入请求路由到代理。请勿使用代理专用子网来创建转发规则。
对于 HTTP 负载均衡器:gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=NETWORK \ --subnet=LB_SUBNET_NAME \ --address=LB_IP_ADDRESS \ --ports=80 \ --region=REGION \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --target-http-proxy-region=REGION
对于 HTTPS 负载均衡器:gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=NETWORK \ --subnet=LB_SUBNET_NAME \ --address=LB_IP_ADDRESS \ --ports=443 \ --region=REGION \ --target-http-proxy=TARGET_HTTPS_PROXY_NAME \ --target-http-proxy-region=REGION
将您的网域连接到负载均衡器
创建负载均衡器后,请记好与负载均衡器关联的 IP 地址,例如 30.90.80.100
。如需将您的网域指向负载均衡器,请使用您的网域注册服务创建 A
记录。如果您向 SSL 证书添加了多个网域,则必须为每个网域添加一条 A
记录,所有网域均指向负载均衡器的 IP 地址。例如,如需为 www.example.com
和 example.com
创建 A
记录,请使用以下命令:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
如果您使用 Cloud DNS 作为 DNS 提供商,请参阅添加、修改和删除记录。
测试负载均衡器
现在您已经配置了负载均衡器,接下来可以开始向负载均衡器的 IP 地址发送流量了。
- 转到 Google Cloud 控制台中的“负载均衡”页面。
转到“负载均衡” - 点击刚刚创建的负载均衡器。
- 记下负载均衡器的 IP 地址。
将流量发送到负载均衡器。
如果您创建了 HTTP 负载均衡器,则可以使用网络浏览器转到
http://IP_ADDRESS
来测试您的负载均衡器。将IP_ADDRESS
替换为负载均衡器的 IP 地址。系统应该会将您定向到通过端点公开的服务。如果您创建了 HTTPS 负载均衡器,则可以使用
curl
来测试您的负载均衡器,如下所示:将IP_ADDRESS
替换为负载均衡器的 IP 地址。系统应该会将您定向到通过端点公开的服务。curl -k https://IP_ADDRESS
如果此操作无效并且您使用的是 Google 管理的证书,请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态。 然后测试指向负载均衡器的 IP 地址的网域。例如:
curl -s https://test.example.com
测试非 Google Cloud 端点取决于您通过混合 NEG 端点公开的服务。