使用 HTTP 代理

本文档介绍如何通过 HTTP/HTTPS 代理路由来自 GKE on AWS 的流量。您可以在创建集群时指定代理配置。

概览

GKE on AWS 可出于以下原因通过代理路由出站互联网流量:

  • 通过 Connect 向 Google Cloud 注册集群
  • 需运行 Connect Agent
  • 需从 Container Registry 下载映像

限制

  • httpProxyhttpsProxy 字段不支持以 https:// 开头的网址。您必须使用 http://。 对端口 443 发出的请求使用 HTTPS。
  • 您必须为 httpProxyhttpsProxynoProxy 设置值。
  • 您可能需要向 noProxy 字段添加其他网域、IP 或 CIDR。我们建议添加 VPC IP 范围。从 Google Kubernetes Engine 1.22 版开始,GKE on AWS 会自动添加 Pod 地址 CIDR 和服务地址 CIDR。

前提条件

本部分介绍在使用代理之前必须要满足的前提条件。

启用 VPC 端点

在配置代理之前,您必须为 GKE on AWS 安装创建 VPC 端点

通过 VPC 端点,专用子网中的资源无需公共互联网访问权限即可访问 AWS 服务。

下表列出了 GKE on AWS 需要 VPC 端点的 AWS 服务,以及端点类型和需要有权访问端点的安全群组

服务 端点类型 安全组
自动扩缩 界面 控制平面、节点池
EC2 界面 控制平面、节点池
EFS 接口 控制平面
负载均衡 界面 控制平面、节点池
密钥管理服务 界面 控制平面、节点池
S3 网关 控制平面、节点池
Secrets Manager 界面 控制平面、节点池
Security Token Service (STS) 界面 控制平面、节点池

您可以从 AWS VPC 控制台创建端点。您在创建 VPC 端点时设置的选项取决于您的 VPC 配置。

定义安全群组

GKE on AWS 必须能够连接到代理服务器以下载软件组件。创建或查找允许与代理服务器建立出站连接的 AWS 安全群组。该安全群组应允许从控制层面和节点池安全群组到代理地址和端口的出站访问。保存此安全群组的 ID(例如 sg-12345678)。

类型 协议 出发地端口 目的地端口 地址
出站 TCP 代理端口 代理端口 代理安全群组

代理许可名单

如需使 GKE on AWS 连接到 Google Cloud 服务,代理服务器必须允许流量到达以下网域。

.gcr.io
cloudresourcemanager.googleapis.com
container.googleapis.com
gkeconnect.googleapis.com
gkehub.googleapis.com
oauth2.googleapis.com
securetoken.googleapis.com
storage.googleapis.com
sts.googleapis.com
www.googleapis.com
servicecontrol.googleapis.com
logging.googleapis.com
monitoring.googleapis.com
opsconfigmonitoring.googleapis.com
GCP_LOCATION-gkemulticloud.googleapis.com

GCP_LOCATION 替换为您的 GKE Enterprise 集群所在的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域

更新 AWS IAM 角色

如需让 GKE on AWS 从 AWS Secrets Manager 读取代理配置,您必须将 secretsmanager:GetSecretValue 添加到集群的控制平面角色节点池角色

如需添加此权限,请将其添加到控制层面和节点池政策中。如需了解详情,请参阅修改 IAM 政策

创建代理配置文件

代理配置以 JSON 字符串形式存储在 AWS Secrets Manager Secret 中。您可以将此配置以文件形式传递给 aws 命令行工具。本部分介绍如何创建该文件。

下表介绍了此文件的内容。

字段 说明 示例 必需
httpProxy 代理服务器网址。该值应包含主机名/IP 地址,并可根据需要选择包含端口、用户名和密码。 "http://user:password@10.184.37.42:80"
"10.184.37.42"
httpsProxy 经过加密的 HTTPS 流量的代理网址。如果 httpsProxy 具有空值,则系统将使用 httpProxy 网址。 "http://10.101.16.31:80"
noProxy 要从代理中排除的网址的逗号分隔列表。每个值可以是 IP 地址、CIDR 范围、域名或星号 (*)。如果指定的网域具有前导句点(如“.google.com”),则表示需要子网域。单个星号 * 会忽略所有代理配置。 "1.2.3.4,10.0.0.0/16,example.com,.site.com"
  1. 如需创建配置文件,请创建一个包含 httpProxynoProxy 和可选 httpsProxy 键的值的 JSON 文件。

    {
      "httpProxy": "AUTHENTICATION_URL",
      "httpsProxy": "AUTHENTICATION_URL",
      "noProxy": "NO_PROXY_ADDRESSES"
    }
    

    替换以下内容:

    • AUTHENTICATION_URL:包含代理用户名和密码的编码网址
    • NO_PROXY_ADDRESSES:以英文逗号分隔的 CIDR 地址块和网址列表,例如 10.0.0.0/16,http://example.com

    保存该文件以在下一部分使用。

  2. 通过 aws 命令行工具使用此 JSON 数据创建一个 Secret 作为 AWS Secrets Manager 中的 Secret。

    aws secretsmanager create-secret \
    --name SECRET_NAME \
    --secret-string file://PROXY_CONFIGURATION_FILE
    

    替换以下内容:

    • SECRET_NAME:新 Secret 的名称
    • PROXY_CONFIGURATION_FILE:代理配置文件的路径。

    输出包括该 Secret 的 Amazon 资源名称 (ARN) 和内容。现在,您可以在创建集群时引用此 Secret。

创建使用代理的集群

如需将 GKE on AWS 配置为使用 HTTP 代理进行出站连接,请执行以下步骤:

按照创建集群中的步骤执行操作,并传递 proxy-secret-arnproxy-secret-version-id 标志。

gcloud container aws clusters create CLUSTER_NAME \
  --proxy-secret-arn=PROXY_SECRET_ARN \
  --proxy-secret-version-id=PROXY_SECRET_VERSION \

替换以下内容:

  • CLUSTER_NAME:您的集群的名称
  • PROXY_SECRET_ARN:包含代理设置的 Secret 的 ARN,例如 arn:aws::secretsmanager:us-east-2:111122223333:secret:example/ExampleSecret-jiObOV
  • PROXY_SECRET_VERSION:Secret 的版本 ID,例如 EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

更新代理配置

您可以更新集群控制层面或节点池的代理配置。如需更新代理配置 ARN,您必须先更新控制层面或节点池 AWS IAM 角色。

更新 AWS IAM 角色

在更改存储代理配置的 ARN 之前,您需要确认集群的控制层面角色节点池角色是否拥有密文 ARN 的读取权限。如果包含 secretsmanager:GetSecretValue 权限的 IAM 语句的范围限定为特定资源 ARN,请在更新代理配置之前将新的密文 ARN 添加到该列表中。

更新集群代理配置

如需更新集群的代理配置,请使用 Google Cloud CLI。

gcloud container aws clusters update  CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --proxy-secret-arn=PROXY_SECRET_ARN \
    --proxy-secret-version-id=PROXY_SECRET_VERSION

替换以下内容:

  • CLUSTER_NAME:您的集群的名称
  • GOOGLE_CLOUD_LOCATION:管理集群的受支持的 Google Cloud 区域
  • PROXY_SECRET_ARN:包含代理设置的 Secret 的 ARN
  • PROXY_SECRET_VERSION:Secret 的版本 ID,例如 EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

更新节点池代理配置

如需更新节点池的代理配置,请使用 Google Cloud CLI。

gcloud container aws node-pools update NODE_POOL_NAME
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --proxy-secret-arn=PROXY_SECRET_ARN \
    --proxy-secret-version-id=PROXY_SECRET_VERSION

替换以下内容:

  • NODE_POOL_NAME:您的节点池的名称
  • CLUSTER_NAME:您的集群的名称
  • GOOGLE_CLOUD_LOCATION:管理集群的受支持的 Google Cloud 区域
  • PROXY_SECRET_ARN:包含代理设置的 Secret 的 ARN
  • PROXY_SECRET_VERSION:Secret 的版本 ID,例如 EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

移除代理配置

您可以从集群控制层面或节点池中移除代理配置。这些操作是独立的。从控制层面中移除配置不会将其从集群的节点池中移除。

移除控制层面代理配置

如需移除集群控制层面的代理配置,请使用 Google Cloud CLI。

gcloud container aws clusters update  CLUSTER_NAME \
  --location GOOGLE_CLOUD_LOCATION \
  --clear-proxy-config

替换以下内容:

移除节点池代理配置

如需从节点池中移除代理配置,请使用 Google Cloud CLI。

gcloud container aws node-pools update NODE_POOL_NAME
  --cluster CLUSTER_NAME \
  --location GOOGLE_CLOUD_LOCATION \
  --clear-proxy-config

替换以下内容:

  • NODE_POOL_NAME:您的节点池的名称
  • CLUSTER_NAME:您的集群的名称
  • GOOGLE_CLOUD_LOCATION:管理集群的受支持的 Google Cloud 区域,例如 us-west1

后续步骤