构建专用虚拟机的互联网连接

本文档介绍将具有专用 IP 地址的 Compute Engine 资源连接到互联网以及从互联网连接到这些资源的选项。这对创建 Google Cloud 服务的开发者以及 Google Cloud 环境的网络管理员都很有帮助。

本教程假定您熟悉 VPC 部署、Compute Engine 和基本的 TCP/IP 网络。

目标

  • 了解从专用虚拟机的 VPC 网络外部连接到这些虚拟机的选项。
  • 为 TCP 隧道创建一个适用于 SSH 等交互式服务的 Identity-Aware Proxy (IAP) 实例。
  • 创建一个 Cloud NAT 实例,使虚拟机可以建立与互联网的出站连接。
  • 配置 HTTP 负载平衡器,以支持从互联网到虚拟机的入站连接。

费用

本教程使用 Google Cloud 的以下收费组件:

您可使用价格计算器,根据您的预计使用情况来估算费用。我们计算得出,运行本教程的总费用每天不到 5 美元。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  5. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

简介

与公共(外部)IP 地址相比,专用 IP 地址具有诸多优势,包括:

  • 减少攻击面。从虚拟机中移除外部 IP 地址会使攻击者较难访问虚拟机和利用潜在漏洞。
  • 提高灵活性。与静态外部 IP 地址相比,引入一个抽象层(例如负载平衡器或 NAT 服务)可以实现更可靠、灵活的服务交付。

该解决方案讨论了三种场景,如下表所示:

互动 提取 服务
使用适用于 TCP 的 IAP 从远程主机直接启动到虚拟机的 SSH 连接。

示例:使用 SSH 或 RDP 进行远程管理

虚拟机使用 Cloud NAT 启动与互联网上的外部主机的连接。

示例:操作系统更新、外部 API

远程主机通过全球 Google Cloud 负载平衡器启动与虚拟机的连接。

示例:应用前端、WordPress

某些环境可能仅涉及这些场景中的一种。但是,许多环境都需要所有这些场景,并且这在 Google Cloud 中得到全面支持。

以下部分介绍了一个多区域环境,在该环境中,两个区域中的两个虚拟机支持 HTTP 负载平衡服务。这些虚拟机将 Cloud NAT 用于传出通信。为进行管理,可以通过经由 IAP 隧道传送的 SSH 访问虚拟机。

下图提供了所有三个用例和相关组件的概览。

解决方案架构,显示了从客户端通过负载平衡器到虚拟机实例的流程、用于实现从实例到互联网的访问的 Cloud NAT,以及允许从客户端到实例的直接 SSH 访问的 IAP。

创建虚拟机实例

要开始本教程,您将创建总共四个虚拟机实例 - 在两个不同区域中各创建两个实例。为所有这些实例提供相同的标记,防火墙规则稍后会使用该标记允许传入流量到达您的实例。

下图显示了您创建的虚拟机实例和实例组,它们分布在两个地区中。

解决方案架构,突出显示了 2 个地区中的四个虚拟机实例。

您添加到每个实例的启动脚本将安装 Apache 并为每个实例创建唯一主页。

该过程包括有关使用 Cloud Console 和 gcloud 命令的说明。使用 gcloud 命令的最简单方法是使用 Cloud Shell

控制台

  1. 在 Cloud Console 中,转到“虚拟机实例”页面:

    转到“虚拟机实例”页面

  2. 点击创建实例

  3. 名称设置为 www-1

  4. 地区设置为 us-central1-b

  5. 点击管理、安全、磁盘、网络、单独租用

  6. 点击网络并进行以下设置:

    • 对于 HTTP 流量,在网络标记框中,输入 http-tag
    • 在“网络接口”下,点击
    • 外部 IP 下,选择
  7. 点击管理,并按如下所示设置启动脚本

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 1</h1></body></html>' | sudo tee /var/www/html/index.html
    
  8. 点击创建

  9. 使用相同设置创建 www-2,但需要按如下所示设置启动脚本

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 2<h1></body></html>' | sudo tee /var/www/html/index.html
    
  10. 使用相同设置创建 www-3,但需要将地区设置为 europe-west1-b,并按如下所示设置启动脚本

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 3</h1></body></html>' | sudo tee /var/www/html/index.html
    
  11. 使用相同设置创建 www-4,但需要将地区设置为 europe-west1-b,并按如下所示设置启动脚本

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 4</h1></body></html>' | sudo tee /var/www/html/index.html
    

gcloud

  1. 打开 Cloud Shell:

    打开 Cloud Shell

  2. 使用基本启动脚本在 us-central1-b 中创建一个名为 www-1 的实例:

    gcloud compute instances create www-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-1</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  3. us-central1-b 中创建一个名为 www-2 的实例:

    gcloud compute instances create www-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-2</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  4. 此次在 europe-west1-b 中创建一个名为 www-3 的实例:

    gcloud compute instances create www-3 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-3</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  5. europe-west1-b 中再创建一个名为 www-4 的实例:

    gcloud compute instances create www-4 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-4</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    

Terraform

  1. 打开 Cloud Shell:

    打开 Cloud Shell

  2. 从 GitHub 克隆代码库:

    git clone https://github.com/GoogleCloudPlatform/gce-public-connectivity-terraform

  3. 将工作目录更改为代码库目录:

    cd iap

  4. 安装 Terraform

  5. scripts/set_env_vars.sh 文件中的 [YOUR-ORGANIZATION-NAME] 替换为您的 Google Cloud 组织名称。

  6. 设置环境变量:

    source scripts/set_env_vars.sh

  7. 应用 Terraform 配置:

    terraform apply

配置 IAP 隧道以与实例进行交互

如需登录虚拟机实例,请使用 SSH 或 RDP 等工具连接到这些实例。在本教程创建的配置中,您无法直接连接到实例。但是,您可以使用 IAP 中的 TCP 转发,为这些互动模式启用远程访问。

在本教程中,您将使用 SSH。

在本部分中,您将执行以下操作:

  1. 使用 IAP 隧道连接到 Compute Engine 实例。
  2. 在 IAM 中再添加一个具有 IAP 隧道权限的用户。

下图展示了您在本部分构建的架构。本教程的其他部分将讨论灰色区域。

解决方案架构,显示了为客户端和实例之间的 SSH 访问提供访问权限的 IAP。

IAP 的限制

  • 带宽:IAP TCP 转发功能不适用于批量转移数据。IAP 保留对涉嫌滥用此项服务的用户施加速率限制的权利。
  • 连接时长:除非需要维护,否则 IAP 不会断开活跃会话的连接。
  • 协议:适用于 TCP 的 IAP 不支持 UDP。

创建防火墙规则以允许开通隧道

为使用 SSH 连接到您的实例,您需要在防火墙上打开相应的端口。IAP 连接来自一组特定的 IP 地址 (35.235.240.0/20)。因此,您可以将规则限制为此 CIDR 范围。

控制台

  1. 在 Cloud Console 中,转到防火墙页面:

    转到“防火墙”页面

  2. 点击创建防火墙规则

  3. 名称设置为 allow-ssh-from-iap

  4. VPC 网络保留为 default

  5. 目标下,选择指定的目标标记

  6. 目标标记设置为 http-tag

  7. 来源过滤条件设置为 IP 范围

  8. 来源 IP 地址范围设置为 35.235.240.0/20

  9. 允许的协议和端口设置为 tcp:22

  10. 点击创建

    新防火墙规则可能需要一段时间才能在控制台中显示。

gcloud

  • 创建名为 allow-ssh-from-iap 的防火墙规则:

    gcloud compute firewall-rules create allow-ssh-from-iap \
        --source-ranges 35.235.240.0/20 \
        --target-tags http-tag \
        --allow tcp:22
    

Terraform

  1. 将防火墙规则 Terraform 文件复制到当前目录:

    cp iap/vpc_firewall_rules.tf .

  2. 应用 Terraform 配置:

    terraform apply

测试隧道

  • 在 Cloud Shell 中,使用 IAP 连接到实例 www-1

    gcloud compute ssh www-1 \
        --zone us-central1-b \
        --tunnel-through-iap
    

如果连接成功,您将具有一个通过 IAP 隧道直接传送到您的专用虚拟机的 SSH 会话。

向其他用户授予访问权限

当您连接到虚拟机实例时,IAP 将使用您的现有项目角色和权限。默认情况下,实例所有者是唯一具有 IAP Secured Tunnel User 角色的用户。如果要允许其他用户使用 IAP 隧道访问您的虚拟机,则需要将此角色授予这些用户。

  1. 在 Cloud Console 中,转到安全性 > Identity-Aware Proxy

    Cloud Console 的“安全性”页面中的 IAP 选项。

    如果您看到一条消息,提示您需要配置 OAuth 同意屏幕,请忽略该消息;它与适用于 TCP 的 IAP 无关。

  2. 选择 SSH 和 TCP 资源标签页。

  3. 选择您已创建的虚拟机:

    显示选中所有 4 个实例的控制台。

  4. 在右侧,点击添加负责人

  5. 添加您要向其授予权限的用户,选择 IAP-secured Tunnel User 角色,然后点击保存

总结

现在,您可以使用 SSH 连接到您的实例,以管理实例或对其进行问题排查。

许多应用都需要进行传出连接才能下载补丁程序、与合作伙伴连接或下载资源。在下一部分中,您将配置 Cloud NAT,以允许您的虚拟机访问这些资源。

部署 Cloud NAT 以进行提取

Cloud NAT 服务允许没有外部 IP 地址的 Google Cloud 虚拟机实例连接到互联网。Cloud NAT 与默认路由协同作用以实施出站 NAT,使您的实例可以访问互联网。它不实现入站 NAT。VPC 网络外部的主机只能响应您的实例启动的已建立的连接;它们无法使用 Cloud NAT 启动自身与您的实例的连接。系统不会将 NAT 用于 Google Cloud 中的流量。

Cloud NAT 是一种地区性资源。您可进行配置,使其允许来自一个区域中子网的所有主要和次要 IP 地址范围的流量,也可以将其配置为仅应用于这些范围中的一部分。

在本部分中,您将在先前使用的每个区域中配置一个 Cloud NAT 网关。下图展示了您在本部分构建的架构。本教程的其他部分将讨论灰色区域。

解决方案架构,显示实例和互联网之间的 Cloud NAT 实例。

使用 Cloud Router 创建 NAT 配置

您必须在需要使用 Cloud NAT 的实例所在区域中创建 Cloud Router 实例。Cloud NAT 仅用于将 NAT 信息放置在虚拟机上;它不用作实际 Cloud NAT 网关的一部分。

此配置允许该区域中的所有实例将 Cloud NAT 用于所有主要和别名 IP 范围。此外,它还为 NAT 网关自动分配外部 IP 地址。如需了解更多选项,请参阅 gcloud compute routers 文档。

控制台

  1. 转到 Cloud NAT 页面:

    转到“Cloud NAT”页面

  2. 点击开始使用创建 NAT 网关

  3. 网关名称设置为 nat-config

  4. VPC 网络设置为 default

  5. 区域设置为 us-central1

  6. Cloud Router 下,选择创建新路由器,然后执行以下操作:

    • 名称设置为 nat-router-us-central1
    • 点击创建
  7. 点击创建

  8. 重复该过程,但要替换为以下值:

    • 名称nat-router-europe-west1
    • 区域europe-west1

gcloud

  1. 在每个区域中创建 Cloud Router 实例:

    gcloud compute routers create nat-router-us-central1 \
        --network default \
        --region us-central1
    
    gcloud compute routers create nat-router-europe-west1 \
        --network default \
        --region europe-west1
    
  2. 为 Cloud NAT 配置路由器:

    gcloud compute routers nats create nat-config \
        --router-region us-central1 \
        --router nat-router-us-central1 \
        --nat-all-subnet-ip-ranges \
         --auto-allocate-nat-external-ips
    
    gcloud compute routers nats create nat-config \
        --router-region europe-west1 \
        --router nat-router-europe-west1 \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    

Terraform

  1. 将 Terraform NAT 配置文件复制到当前目录:

    cp nat/vpc_nat_gateways.tf .

  2. 应用 Terraform 配置:

    terraform apply

测试 Cloud NAT 配置

现在,您可以测试您是否能够从虚拟机实例向互联网发出出站请求。

  1. 等待最多 3 分钟,让 NAT 配置传播到虚拟机。
  2. 在 Cloud Shell 中,使用您创建的隧道连接到您的实例:

    gcloud compute ssh www-1 --tunnel-through-iap
    
  3. 登录实例后,使用 curl 命令发出出站请求:

    curl example.com
    

    您将看到以下输出内容:

    <html>
    <head>
    <title>Example Domain</title>
    ...
    ...
    ...
    </head>
    
    <body>
    <div>
        <h1>Example Domain</h1>
        <p>This domain is established to be used for illustrative examples in documents.
            You may use this domain in examples without prior coordination or asking for
            permission.
        </p>
        <p><a href="http://www.iana.org/domains/example">More information...</a></p>
    </div>
    </body>
    </html>
    
    

如果命令成功,则已验证您的虚拟机可以使用 Cloud NAT 连接到互联网。

摘要

您的实例现可建立传出连接,以下载补丁程序、与合作伙伴连接或下载资源。

在下一部分中,您将向部署添加负载平衡,并将其配置为允许远程客户端向您的服务器发起请求。

创建用于传送的 HTTP 负载平衡服务

Cloud Load Balancing 用于应用具有许多优势。它可以为每秒超过一百万次的查询提供无缝、可伸缩的负载平衡。此外,它还可以减少虚拟机的 SSL 开销,根据位置和可用性将查询路由到您的用户的最佳区域,并且支持 HTTP/2 和 QUIC 等现代协议。

在本教程中,您将利用另一个关键功能:全球任播 IP 连接代理。此功能提供了一个公共 IP 地址,该 IP 地址在 Google 全球分布边缘上终止。然后,客户端可以连接到 Google Cloud 中任何位置的专用 IP 地址上托管的资源。此配置有助于保护实例免受 DDoS 攻击和直接攻击。此外,它还启用了 Google Cloud Armor 等功能,以实现更高的安全性。

在本教程的这一部分,您将执行以下操作:

  1. 重置虚拟机实例以安装 Apache 网络服务器。
  2. 创建防火墙规则,以允许从负载平衡器进行访问。
  3. 为负载平衡器分配静态的全局 IPv4 和 IPv6 地址。
  4. 为实例创建一个实例组。
  5. 开始向实例发送流量。

下图展示了您在本部分构建的架构。本教程的其他部分将讨论灰色区域。

突出显示 2 个实例组中的 4 个实例的架构。

重置虚拟机实例

您在本教程前面的部分中创建虚拟机实例时,它们无法访问互联网,因为系统未分配外部 IP 地址并且未配置 Cloud NAT。因此,安装 Apache 的启动脚本无法成功完成。

重新运行启动脚本的最简单方法是重置这些实例,以便在下一部分中安装和使用 Apache 网络服务器。

控制台

  1. 在 Cloud Console 中,转到虚拟机实例页面:

    转到虚拟机实例

  2. 选择 www-1www-2www-3www-4

  3. 点击页面顶部的重置按钮。

    如果您没有看到重置按钮,请点击更多操作,然后选择重置

  4. 点击对话框中的重置,确认重置这四个实例。

gcloud

  1. 重置四个实例:

    gcloud compute instances reset www-1 \
        --zone us-central1-b
    
    gcloud compute instances reset www-2 \
        --zone us-central1-b
    
    gcloud compute instances reset www-3 \
        --zone europe-west1-b
    
    gcloud compute instances reset www-4 \
        --zone europe-west1-b
    

打开防火墙

下一项任务是创建防火墙规则,以允许流量从负载平衡器流向您的虚拟机实例。此规则允许来自负载平衡器和运行状况检查均使用的 Google Cloud 地址范围的流量。防火墙规则使用您先前创建的 http-tag 标记,并且允许到指定端口的流量到达具有此标记的实例。

控制台

  1. 在 Cloud Console 中,转到防火墙页面:

    转到“防火墙”页面

  2. 点击创建防火墙规则

  3. 名称设置为 allow-lb-and-healthcheck

  4. VPC 网络保留为 default

  5. 目标下,选择指定的目标标记

  6. 目标标记设置为 http-tag

  7. 来源过滤条件设置为 IP 范围

  8. 来源 IP 地址范围设置为 130.211.0.0/2235.191.0.0/16

  9. 允许的协议和端口设置为 tcp:80

  10. 点击创建

    新防火墙规则可能需要一段时间才能在控制台中显示。

gcloud

  • 创建名为 allow-lb-and-healthcheck 的防火墙规则:

    gcloud compute firewall-rules create allow-lb-and-healthcheck \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --target-tags http-tag \
         --allow tcp:80
    

Terraform

  1. 将 Terraform 负载平衡配置文件复制到当前目录:

    cp lb/* .

  2. 应用 Terraform 配置:

    terraform apply

为负载平衡器分配外部 IP 地址

如果您要将流量传送到互联网,则需要为负载平衡器分配一个外部地址。您可以分配 IPv4 地址和/或 IPv6 地址。在本部分中,您将预留适合添加到 DNS 的静态 IPv4 和 IPv6 地址。

公共 IP 地址不会产生额外的费用,因为它们与负载平衡器一起使用。

控制台

  1. 在 Cloud Console 中,转到外部 IP 地址页面:

    转到“外部 IP 地址”页面

  2. 点击预留静态地址以预留 IPv4 地址。

  3. 名称设置为 lb-ip-cr

  4. 类型设置为全局

  5. 点击预留

  6. 再次点击预留静态地址以预留 IPv6 地址。

  7. 名称设置为 lb-ipv6-cr

  8. IP 版本设置为 IPv6

  9. 类型设置为 Global(全局)。

  10. 点击预留

gcloud

  1. 为 IPv4 创建一个名为 lb-ip-cr 的静态 IP 地址:

    gcloud compute addresses create lb-ip-cr \
        --ip-version=IPV4 \
        --global
    
  2. 为 IPv6 创建一个名为 lb-ipv6-cr 的静态 IP 地址:

    gcloud compute addresses create lb-ipv6-cr \
        --ip-version=IPV6 \
        --global
    

创建实例组并添加实例

Google Cloud 负载平衡器需要实例组充当流量后端。为简单起见,本教程使用非托管实例组。但是,您也可以使用托管实例组来利用自动扩缩、自动修复、区域(多地区)部署和自动更新等功能。

在本部分中,您将为您使用的每个地区创建一个实例组。

控制台

  1. 在 Cloud Console 中,转到实例组页面:

    转到“实例组”页面

  2. 点击创建实例组

  3. 在左侧,点击新建非托管式实例组

  4. 名称设置为 us-resources-w

  5. 区域设置为 us-central1

  6. 地区设置为 us-central1-b

  7. 选择网络(默认)和子网(默认)。

  8. 虚拟机实例下,执行以下操作:

    • 点击添加实例,然后选择 www-1
    • 再次点击添加实例,然后选择 www-2
    • 点击创建
  9. 重复此过程,再创建一个实例组,但要使用以下值:

    • 名称europe-resources-w
    • 地区europe-west1-b
    • 实例www-3www-4
  10. 实例组页面中,确认您有两个实例组,且每个实例组都有两个实例。

gcloud

  1. 创建 us-resources-w 实例组:

    gcloud compute instance-groups unmanaged create us-resources-w \
        --zone us-central1-b
    
  2. 添加 www-1www-2 实例:

    gcloud compute instance-groups unmanaged add-instances us-resources-w \
        --instances www-1,www-2 \
        --zone us-central1-b
    
  3. 创建 europe-resources-w 实例组:

    gcloud compute instance-groups unmanaged create europe-resources-w \
        --zone europe-west1-b
    
  4. 添加 www-3www-4 实例:

    gcloud compute instance-groups unmanaged add-instances europe-resources-w \
        --instances www-3,www-4 \
        --zone europe-west1-b
    

配置负载平衡服务

负载平衡器功能包含多项连接的服务。在本部分中,您将设置并连接这些服务。您要创建的服务如下所示:

  • 命名端口 - 负载平衡器使用这些端口将流量导向您的实例组。
  • 运行状况检查 - 用于轮询您的实例,查看其是否运行状况良好。负载平衡器仅向运行状况良好的实例发送流量。
  • 后端服务 - 用于监视实例的使用情况和运行状况。后端服务知道实例组中的实例能否接收流量。如果这些实例无法接收流量,则负载平衡器将重定向流量(前提是其他位置的实例具有足够的容量)。后端定义其所包含的实例组的容量(最大 CPU 利用率或每秒最多查询次数)。
  • 网址映射 - 用于解析请求的网址,并且可以根据请求网址的主机和路径将请求转发到特定的后端服务。在本教程中,由于您没有使用基于内容的转发,因此网址映射仅包含默认映射。
  • 目标代理 - 用于接收来自用户的请求并将其转发给网址映射。
  • 两条全局转发规则(IPv4 和 IPv6 各一条)- 用于保留全局外部 IP 地址资源。全局转发规则将传入的请求转发到目标代理。

创建负载平衡器

在本部分中,您将创建负载平衡器并配置默认后端服务以处理您的流量。您还将创建运行状况检查

控制台

  1. 在 Cloud Console 中,转到创建负载平衡器页面:

    转到“创建负载平衡器”页面

  2. HTTP(S) 负载平衡下,点击开始配置

  3. 名称设置为 web-map

  4. 新建 HTTP(S) 负载平衡器页面的左侧面板中,点击后端配置

  5. 创建或选择后端服务和后端存储分区列表中,选择后端服务,然后选择创建后端服务。您将看到创建后端服务对话框。

  6. 名称设置为 web-map-backend-service

  7. 设置协议。对于 HTTP 协议,请将值设置为默认值。

  8. 对于后端类型,选择实例组

  9. 后端下,将实例组设置为 us-resources-w

  10. 点击添加后端

  11. 选择 europe-resources-w 实例组,然后执行以下操作:

    • 对于负载平衡器与实例之间的 HTTP 流量,请确保将端口号设置为 80
    • 其余字段保留默认值。
  12. 点击完成

  13. 运行状况检查下,选择创建运行状况检查另创建一项运行状况检查

  14. 设置以下运行状况检查参数:

    • 名称http-basic-check
    • 协议HTTP
    • 端口80
  15. 点击创建

gcloud

  1. 对于每个实例组,定义一个 HTTP 服务并将端口名称映射到相关端口上:

    gcloud compute instance-groups unmanaged set-named-ports us-resources-w \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports europe-resources-w \
        --named-ports http:80 \
        --zone europe-west1-b
    
  2. 创建运行状况检查:

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  3. 创建后端服务:

    gcloud compute backend-services create web-map-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    

    --protocol 标志设置为 HTTP,因为您将使用 HTTP 转到实例。对于运行状况检查,使用之前创建的 http-basic-check 运行状况检查。

  4. 将您的实例组作为后端添加到后端服务:

    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group us-resources-w \
        --instance-group-zone us-central1-b \
        --global
    
    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group europe-resources-w \
        --instance-group-zone europe-west1-b \
        --global
    

设置主机和路径规则

控制台

  • 新建 HTTP(S) 负载平衡器页面的左侧面板中,点击主机和路径规则

    在本教程中,由于所有流量均采用默认规则,因此您无需配置任何主机或路径规则。因此,您可以接受预填充的默认值

gcloud

  1. 创建一个默认网址映射,用于将所有传入请求引导到您的所有实例:

    gcloud compute url-maps create web-map \
        --default-service web-map-backend-service
    
  2. 创建目标 HTTP 代理以将请求路由到网址映射:

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map web-map
    

配置前端

控制台

  1. 新建 HTTP(S) 负载平衡器页面的左侧面板中,点击前端配置
  2. 名称设置为 http-cr-rule
  3. 协议设置为 HTTP
  4. IP 版本设置为 IPv4
  5. IP 地址列表中,选择您先前创建的地址 lb-ip-cr
  6. 确认端口设置为 80
  7. 点击完成
  8. 点击添加前端 IP 和端口
  9. 名称设置为 http-cr-ipv6-rule
  10. 对于协议,选择 HTTP
  11. IP 版本设置为 IPv6
  12. IP 地址列表中,选择您先前创建的另一地址 lb-ipv6-cr
  13. 确认端口设置为 80
  14. 点击创建
  15. 点击完成

gcloud

  1. 获取为负载平衡器创建的静态 IP 地址。 记下这些 IP 地址,因为在下一步中会用到它们。

    gcloud compute addresses list
    
  2. 创建两个全局转发规则(一个用于 IPv4,另一个用于 IPv6),将传入请求路由到代理。将命令中的 lb_ip_address 替换为您创建的静态 IPv4 地址,并将 lb_ipv6_address 替换为您创建的 IPv6 地址。

    gcloud compute forwarding-rules create http-cr-rule \
        --address lb_ip_address \
        --global \
        --target-http-proxy http-lb-proxy \
        --ports 80
    
    gcloud compute forwarding-rules create http-cr-ipv6-rule \
        --address lb_ipv6_address \
        --global \
        --target-http-proxy http-lb-proxy \
       --ports 80
    

检查并最终确定

  1. 在 Cloud Console 中,转到创建负载平衡器页面:

    转到“创建负载平衡器”页面

  2. 新建 HTTP(S) 负载平衡器页面的左侧面板中,点击检查并最终确定

  3. 比较您的设置与您打算创建的内容。

  4. 如果设置正确,请点击创建

    您将返回到“负载平衡”页面。创建负载平衡器后,其旁边的绿色对勾标记表示它正在运行。

创建全局转发规则后,可能需要几分钟来传播配置。

测试配置

在本部分中,您将向实例发送一个 HTTP 请求,以验证负载平衡配置是否正常工作。

控制台

  1. 在 Cloud Console 中,转到负载平衡页面:

    转到“负载平衡”页面

  2. 选择名为 web-map 的负载平衡器,查看有关您刚创建的负载平衡器的详细信息。

  3. 在该页面的后端部分中,查看运行状况良好列以确认实例运行状况良好。

    显示器指示实例运行状况良好可能需要一些时间。

  4. 当显示器显示实例运行状况良好时,请从前端部分复制 IP:端口值并将其粘贴到浏览器中。

    在浏览器中,您将看到默认内容页面。

gcloud

  1. 获取并记下全局转发规则的 IP 地址,供下一步使用:

    gcloud compute forwarding-rules list
    
  2. 使用 curl 命令测试服务的各个网址的响应。IPv4 和 IPv6 都尝试一下。对于 IPv6,必须使用 [] 将地址括起来,例如 http://[2001:DB8::]/

    curl http://ipv4-address
    
    curl -g -6 "http://[ipv6-address]/"
    

摘要

现在,您的虚拟机可以将流量传送到互联网,并且可以从互联网提取数据。您也可以使用 SSH 访问它们以执行管理任务。所有这些功能都仅通过使用专用 IP 地址实现,通过不公开可从互联网访问的 IP 地址,帮助保护它们免遭直接攻击。

清除数据

为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤

  • 创建 Cloud Load Balancing 向您展示了如何创建 HTTPS 和 HTTP2 负载平衡器。
  • 设置专用集群向您展示了如何设置专用 Google Kubernetes Engine 集群。
  • 使用 IAP 进行 TCP 转发介绍了适用于 TCP 的 IAP 的其他用途,例如 RDP 或远程命令执行。
  • 使用 Cloud NAT 提供了适用于 Google Kubernetes Engine 的示例,并且介绍了如何修改参数详细信息。
  • 探索有关 Google Cloud 的参考架构、图表、教程和最佳做法。查看我们的云架构中心