符合 CNCF 的关联集群的代理支持

如果您的组织使用 HTTP 代理来处理互联网流量,则您需要相应地配置 GKE 关联集群。本文档介绍如何执行此配置。

准备工作

GKE 关联集群需要连接到各种 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 替换为您的集群所在的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域

为 GKE 关联集群配置代理支持

如需为 GKE 关联集群配置代理支持,请按以下步骤操作:

  1. 创建一个代理配置文件,其中包含 httpProxynoProxyhttpsProxy 键的值:

    {
    "httpProxy": HTTP_PROXY_AUTHENTICATION_URL,
    "httpsProxy": HTTPS_PROXY_AUTH_URL,
    "noProxy": NO_PROXY_ADDRESSES
    }
    

    替换以下内容:

    • HTTP_PROXY_AUTHENTICATION_URL:代理服务器网址,由主机名/IP 地址以及端口、用户名和密码(可选)组成。例如:http://user:password@192.0.2.0:80 或只是 198.51.100.255
    • HTTPS_PROXY_AUTH_URL:加密 HTTPS 流量的代理网址,由主机名/IP 地址以及(可选)端口、用户名和密码组成。
    • NO_PROXY_ADDRESSES:可以绕过代理的网址、CIDR 块和 DNS 名称的英文逗号分隔列表。这会指示 GKE 关联集群避免将代理用于指定的资源。请注意以下几点:
      • 值可以是单个 IP 地址、CIDR 范围、域名,甚至是星号 (*)。在 noProxy 字段中使用单个星号 (*) 可指示 GKE 关联集群跳过所有流量的代理。
      • 以点开头的网域(例如 .google.com)指向其所有子网域。例如,.google.com 包含 mail.google.comdrive.google.com 等地址,但不包括 google.com
      • 请务必添加 kubernetes.default.svc.cluster.localkubernetes.default.svc 网域,以便正确进行日志记录。示例如下:198.51.100.0,192.0.2.0/16,examplepetstore.com,.altostrat.com,kubernetes.default.svc.cluster.local, kubernetes.default.svc

    创建代理配置文件时,请遵循以下准则:

    • httpProxyhttpsProxy 字段不接受 https:// 前缀。即使实际代理服务器地址以 https:// 开头,也请使用 http://。例如,将 https://proxy.example.com:3128 表示为 http://proxy.example.com:3128
    • 为所有三个字段提供值:httpProxyhttpsProxynoProxy
    • 请考虑将其他网域、IP 地址或 CIDR 附加到 noProxy 列表。我们建议您添加 VPC IP 范围。
  2. 运行以下命令,创建包含代理配置的 Kubernetes Secret:

    kubectl create secret generic SECRET_NAME \
    --from-file=PROXY_CONFIGURATION_FILE
    

    替换以下内容:

    • SECRET_NAME:Kubernetes Secret 的名称
    • PROXY_CONFIGURATION_FILE:您在第 1 步中创建的代理配置的路径。
  3. 通过将 Kubernetes Secret 的 immutable 字段设置为 true,将其标记为不可变

    kubectl edit secret SECRET_NAME
    

    SECRET_NAME 替换为 Kubernetes Secret 的名称。

  4. 配置新集群或现有集群以使用代理:

    新集群

    如需注册新集群并应用代理配置,请使用 gcloud container attached clusters register 命令。请务必提供可选参数 --proxy-secret-name--proxy-secret-namespace

    gcloud container attached clusters register CLUSTER_NAME \
      --proxy-secret-name=SECRET_NAME \
      --proxy-secret-namespace=SECRET_NAMESPACE
    

    请替换以下内容:

    • CLUSTER_NAME:集群的名称
    • SECRET_NAME:包含代理配置的 Kubernetes Secret 的名称
    • SECRET_NAMESPACE:存储 Secret 的 Kubernetes 命名空间

    如需了解注册集群时可以使用的所有参数,请参阅 gcloud container attached clusters register 命令

    现有集群

    如需使用新的代理配置更新先前注册的集群,请使用 gcloud container attached clusters update 命令。请务必提供可选参数 --proxy-secret-name--proxy-secret-namespace

    gcloud container attached clusters update CLUSTER_NAME \
      --proxy-secret-name=SECRET_NAME \
      --proxy-secret-namespace=SECRET_NAMESPACE
    

    请替换以下内容:

    • CLUSTER_NAME:集群的名称
    • SECRET_NAME:包含代理配置的 Kubernetes Secret 的名称
    • SECRET_NAMESPACE:存储 Secret 的 Kubernetes 命名空间

    如果代理服务器详细信息已更改,或者初始集群注册忽略了代理要求,则需要执行此步骤。

    如需了解更新集群时可以使用的所有参数,请参阅 gcloud container attached clusters update 命令

执行这些步骤后,GKE 关联集群会使用配置文件中指定的代理服务器处理出站互联网流量。