互联网网络端点组概览

互联网网络端点组 (NEG) 定义了负载平衡器的外部后端。外部后端是驻留在 Google Cloud 外部的后端。您可以将此类型的后端与 Google Cloud 外部 HTTP(S) 负载平衡器搭配使用。如果您希望从外部后端提供内容,并且希望外部 HTTP(S) 负载平衡器作为前端,则应采用上述做法。

这可让您执行以下操作:

  • 使用 Google Edge 基础架构来终止用户连接。
  • 将连接定向到您的外部后端。
  • 使用 Cloud CDN 缓存外部后端的内容。
  • 通过 Google 的专有骨干网向您的公共端点传送流量,从而提高可靠性并缩短客户端和服务器之间的延迟时间。

本文档讨论如何将外部后端与外部 HTTP(S) 负载平衡搭配使用。您不能将外部后端与其他负载平衡器类型搭配使用。但是,您可以将外部后端与 Traffic Director 搭配使用。如需了解具体方法,请参阅 Traffic Director 与互联网网络端点组

如需了解区域 NEG,请参阅区域网络端点组概览

如需了解无服务器 NEG,请参阅无服务器网络端点组概览

术语

以下术语有时可以互换使用,因为它们的含义相同或相似:

  • 外部后端:驻留在 Google Cloud 外部且可通过互联网访问的后端。互联网 NEG 中的端点。
  • 自定义源站:与外部后端相同。在 CDN 中,“源站”是一个业界标准术语,用于表示传送 Web 内容的后端实例。
  • 互联网网络端点组 (NEG):用于指定外部后端的 Google Cloud API 资源。
  • 外部端点:与外部后端相同。

本文档在提及互联网 NEG API 资源时使用的是“外部后端”一词。

概览

互联网 NEG 是在本地基础架构中或由第三方提供的基础架构上托管的全球资源。

端点类型

创建互联网 NEG 时,您需要指定网络端点类型 INTERNET_FQDN_PORTINTERNET_IP_PORT

端点地址 类型 定义 使用时间
主机名和可选端口 INTERNET_FQDN_PORT 对于外部 HTTP(S) 负载平衡而言,是可公开解析的完全限定域名和一个可选端口,例如 backend.example.com:443(默认端口 80 用于 HTTP,443 用于 HTTPS)。

对于 Traffic Director,将使用 VPC 网络的名称解析顺序来解析 FQDN。
如果您的外部后端可以通过完全限定域名使用公共 DNS 进行解析,请将此端点与外部 HTTP(S) 负载平衡搭配使用。

将此端点与 Traffic Director 搭配使用,以将流量发送到外部服务。
IP 地址和可选端口 INTERNET_IP_PORT 可公开访问的 IP 地址和可选端口,例如 8.8.8.88.8.8.8:443(默认端口:对于 HTTP 为 80,对于 HTTPS 为 443 请将此端点仅与外部 HTTP(S) 负载均衡搭配使用,以指定可公开访问的 IP 地址和要连接的端口。

在互联网 NEG 中,您不能有多个端点。互联网网络端点组不支持 GCE_VM_IP_PORT 端点类型。

以下各部分介绍了外部后端如何与外部 HTTP(S) 负载平衡器搭配使用。当将外部后端与 Traffic Director、DNS、运行状况检查和流量路由搭配使用时,行为有所不同。如需了解详情,请参阅 Traffic Director 与互联网网络端点组

负载平衡组件和规范

您可以通过优质网络服务层级在负载平衡器中使用外部后端。

但是,由于每个互联网 NEG 中只允许有一个端点,因此实际上并未执行负载平衡。这意味着您无法使用任何负载平衡模式,如速率或利用率。负载平衡器仅用作前端,并且将流量代理到指定的外部后端。

转发选择基于网址映射。 对于目标 HTTP(S) 代理,所使用的后端服务通过检查网址映射中的请求主机名和路径来确定。外部 HTTP(S) 负载平衡器可以具有多个从网址映射引用的后端服务。

  • 每个外部 HTTP(S) 负载平衡器都有专属的全球外部转发规则,用于将流量定向到相应的目标代理对象。

  • 如果网址映射向包含互联网 NEG 的后端服务发送请求,则后端服务会将流量定向到该外部后端。

下图显示了具有多种后端类型(其中一种是外部后端)的外部 HTTP(S) 负载平衡器。

负载平衡中的互联网网络端点组(点击可放大)
负载平衡中的互联网网络端点组(点击可放大)

后端服务

如上一部分所示,互联网 NEG 是外部 HTTP(S) 负载平衡器的后端服务所支持的一种后端。它可让您使用 Google 的全球边缘基础架构在外部后端前面终止用户请求。

将互联网 NEG 添加到后端服务时:

  • 后端服务不能同时也将区域 NEG 或实例组用作后端。后端服务上所有后端的类型必须相同。

  • 同一后端服务中只能添加一个互联网 NEG 后端。

  • 一个互联网 NEG 中只能添加一个端点。

  • 后端服务不能引用运行状况检查

  • 后端服务的负载平衡方案必须是“EXTERNAL”且其协议必须是 HTTPHTTPSHTTP2 之一。

  • 使用互联网 NEG 时,系统支持后端服务功能。此类功能包括:

运行状况检查

具有互联网 NEG 的后端服务不支持运行状况检查。Google Cloud 不会针对任何外部后端提供运行状况检查。

如果您的外部后端无法访问,或者配置的主机名 (FQDN) 无法解析,则外部 HTTP(S) 负载平衡器会向其客户端返回 HTTP 502 (Bad Gateway) 响应。

对请求进行身份验证

如需允许外部 HTTP(S) 负载平衡器向您的外部后端发送请求,请执行以下操作:

  • 使用 dignslookup 这类工具来查询 _cloud-eoips.googleusercontent.com DNS TXT 记录。请记下(ip4: 后面的)CIDR 并确保您的防火墙或云端访问控制列表 (ACL) 允许使用这些范围。如需查看示例,请参阅允许列出必要的 IP 范围
  • 您可以使用自定义请求标头设置自定义标头,以指明请求来自 Google Cloud 外部 HTTP(S) 负载平衡器。
    • 例如,您可以将 16 个或更多的加密随机字节用作共享密钥。
  • 您也可以启用 Identity-Aware Proxy (IAP),并验证请求标头中带签名的 JWT 是否由 Google 签名以及 aud(目标对象)声明是否包含定义了外部 HTTP(S) 负载平衡器的项目编号。请注意,IAP 与 Cloud CDN 不兼容。

SSL 服务器认证验证和 SAN 验证

使用 HTTPS 或 HTTP/2 作为后端协议时,我们强烈建议您使用 INTERNET_FQDN_PORT 来创建外部后端。

当您使用 INTERNET_FQDN_PORT 创建外部后端时,负载平衡器会验证外部后端提供的 SSL 服务器证书,并确认:

  • 该证书由知名证书授权机构 (CA) 签名。
  • 该证书没有过期。
  • 该证书签名有效。
  • 配置的 FQDN 与证书中的某个主题备用名称 (SAN) 匹配。

支持 SSL 服务器名称指示 (SNI) 扩展程序

只有在您将 HTTPS 或 HTTP/2 用作后端协议并使用 INTERNET_FQDN_PORT 的情况下,SNI 才受支持。在这种情况下,在负载平衡器和外部端点之间的 SSL 握手期间,已配置的 FQDN 将在客户端 hello 中发送 SNI。当您将端点配置为 INTERNET_IP_PORT 时,系统不会发送 SNI,因为 SNI 负载的 HostName 字段中不允许使用 IP 地址字面量。

FQDN 端点的 IP 地址解析

如果 INTERNET_FQDN_PORT 端点指向一个返回多个 IP 地址的 DNS 记录,则 IP 地址将通过以下方式解析:

  • 外部 HTTP(S) 负载平衡器尝试连接到 DNS 响应中的第一个 IP 地址。如果该 IP 地址无法访问,则负载平衡器将返回 HTTP 502 (Bad Gateway) 响应。即使 DNS 响应中有其他 IP 地址可用,也是如此。

  • 外部 HTTP(S) 负载平衡器使用互联网中最接近其客户端的 Google Cloud 地区中的 DNS 解析器。如果您的 INTERNET_FQDN_PORT 端点的 DNS 记录根据客户端的位置返回不同的 IP 地址,请确保负载平衡器可以访问其中的每个 IP 地址。

如需详细了解 Google DNS 解析器基础架构使用的 IP 地址范围和位置,请参阅 Google 公共 DNS 文档

日志

与记录针对其他 HTTP(S) 负载平衡后端发出的请求时一样,通过代理发送到外部后端的请求会也记录到 Cloud Logging。如需了解详情,请参阅 HTTP(S) 负载平衡日志记录和监控

如果您为外部后端启用 Cloud CDN,则系统还会记录缓存命中数。

标头处理

当外部 HTTP(S) 负载平衡器将请求代理到外部后端时,它会通过以下方式调整 HTTP 标头:

  • 某些标头会合并。如果同一标头键(例如 Via)具有多个实例,则负载平衡器会将它们的值组合成单个标头键的单一英文逗号分隔列表。只有其值可以用英文逗号分隔列表来表示的标头会合并。Set-Cookie 之类的其他标头永远不会合并。

  • 如果后端服务的协议为 HTTPHTTPS,则标头会采用正确的大小写形式:

    • 标头键的第一个字母以及连字符 (-) 后面的所有字母均为大写,以保持与 HTTP/1.1 客户端兼容。例如,user-agent 会更改为 User-Agent,而 content-encoding 会更改为 Content-Encoding

    • TE传输编码)和 Accept-CH客户端提示)等某些标头会被转换以与标准混合字母表示法匹配。

  • 系统会添加一些标头,或者为一些标头附加值。外部 HTTP(S) 负载平衡器始终会添加或修改某些标头,例如 ViaX-Forwarded-For

限制

  • 定义了 FQDN 的外部后端必须可由 Google 公共 DNS 解析。公共 DNS 系统无法解析的名称不能用作外部后端。
  • 外部后端必须是一个可公共路由的 IPv4 地址,或必须解析为一个可公共路由的 IPv4 地址:
    • 外部后端不能是 RFC 1918 地址。
    • 必须可通过互联网访问。端点不能只通过 Cloud VPN 或 Cloud Interconnect 才可以访问。
    • 如果外部后端引用 Google API 或服务,则必须通过使用 HTTPHTTPSHTTP/2 协议的 TCP 端口 80443 访问该服务。
  • 互联网 NEG 只能用于优质网络服务层级(默认层级)。如需了解详情,请参阅 Network Service Tiers 文档
  • 您必须为 INTERNET_IP_PORT 端点使用 IP:{可选端口} 或者为 INTERNET_FQDN_PORT 使用 FQDN:{可选端口}。
  • 将 NEG 与端点类型 INTERNET_FQDN_PORTINTERNET_IP_PORT 搭配使用时,您只能向 NEG 添加一个端点。也就是说,如果在 backendService 中将 NEG 与 INTERNET_FQDN_PORTINTERNET_IP_PORT 网络端点类型搭配使用,您就无法将多个 NEG 连接到 backendService
  • 外部后端目前不支持负载平衡,这些请求只会代理到端点。Google Edge 基础架构会终止您的用户连接,然后将连接定向到您的外部后端。
  • 您可以在未启用 Cloud CDN 的情况下使用互联网 NEG。 使用此配置时,您仍然无法将多个互联网 NEG 连接到后端服务。也就是说,单个端点的限制仍然适用。
  • 外部后端不会执行运行状况检查。如果您的外部后端无法访问或者被指定为 FQDN 但无法解析,则 Cloud CDN 会发送 502 (Bad Gateway) 消息来响应用户请求。
  • 如果使用的外部后端需要特定值作为 HTTP 请求的 Host 标头,则您必须配置后端服务以将 Host 标头设置为该预期值。如果您未配置自定义请求标头,则后端服务会保留客户端用于连接到 Google Cloud 外部 HTTP(S) 负载均衡器的 Host 标头。如需了解有关自定义请求标头的一般信息,请参阅创建自定义请求标头。 如需查看具体示例,请参阅配置具有外部后端的负载平衡器

配额

您可以根据现有网络端点组配额的要求,为 NEG 配置尽可能多的外部网络端点。如需了解详情,请参阅 NEG 后端每个 NEG 的端点数

价格

互联网 NEG 的端点(类型为 INTERNET_FQDN_PORTINTERNET_IP_PORT)的出站流量按优质层级网络的互联网出站流量费率计费。

来源取决于客户端位置,而目标取决于您的公共端点的位置。

如需了解详情,请参阅外部后端的 Cloud CDN 价格

后续步骤