使用 HTTP Proxy

本文說明如何透過 HTTP/HTTPS Proxy,從 AWS 上的 GKE 轉送流量。建立叢集時,您可以指定 Proxy 設定。

總覽

GKE on AWS 可透過 Proxy 轉送輸出網際網路流量,原因如下:

  • 如要透過 Google Cloud 註冊叢集,請使用 Connect
  • 執行 Connect Agent
  • 如何從 Container Registry 下載映像檔

限制

  • httpProxy」和「httpsProxy」欄位不支援以 https:// 開頭的網址。你必須使用 http://。通訊埠 443 的要求會使用 HTTPS。
  • 您必須為 httpProxyhttpsProxynoProxy 設定值。
  • 您可能需要在 noProxy 欄位中新增其他網域、IP 或 CIDR。建議您新增虛擬私有雲 IP 範圍。自 Google Kubernetes Engine 1.22 版起,GKE on AWS 會自動新增 Pod 位址 CIDR 和 Service 位址 CIDR。

必要條件

本節說明使用 Proxy 前必須套用的必要條件。

啟用虛擬私有雲端點

設定 Proxy 前,請先為 GKE on AWS 安裝建立 VPC 端點

虛擬私有雲端點可讓私有子網路中的資源存取 AWS 服務,不必連上公開網路。

下表列出 GKE on AWS 需要虛擬私有雲端端點的 AWS 服務,以及端點類型和需要存取端點的安全群組

服務 端點類型 安全性群組
自動調度資源 介面 控制層、節點集區
EC2 介面 控制層、節點集區
EFS 介面 控制層
負載平衡 介面 控制層、節點集區
Key Management Service 介面 控制層、節點集區
S3 閘道 控制層、節點集區
Secrets Manager 介面 控制層、節點集區
安全性權杖服務 (STS) 介面 控制層、節點集區

您可以透過 AWS VPC 控制台建立端點。建立虛擬私有雲端端點時設定的選項,取決於虛擬私有雲端設定。

定義安全性群組

GKE on AWS 必須能夠連線至 Proxy 伺服器,才能下載軟體元件。建立或找出允許連出至 Proxy 伺服器的 AWS安全群組。安全性群組應允許從控制層和節點集區安全性群組,對 Proxy 位址和通訊埠進行輸出存取。儲存這個安全群組的 ID,例如 sg-12345678

類型 通訊協定 出發港口 目的地通訊埠 地址
輸出 TCP Proxy 通訊埠 Proxy 通訊埠 Proxy 安全性群組

Proxy 許可清單

如要讓 GKE on AWS 連線至 Google Cloud 服務,Proxy 伺服器必須允許流量前往下列網域。

.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 讀取 Proxy 設定,您必須將 secretsmanager:GetSecretValue 新增至叢集的控制層角色節點集區角色

如要新增這項權限,請將其新增至控制層和節點集區政策。詳情請參閱編輯 IAM 政策

建立 Proxy 設定檔

Proxy 設定會以 JSON 字串的形式儲存在 AWS Secrets Manager 密鑰中。 您可以將這項設定以檔案形式傳遞至 aws 指令列工具。本節說明如何建立該檔案。

下表說明這個檔案的內容。

欄位 說明 範例 必要
httpProxy Proxy 伺服器網址。值應包含主機名稱/IP 位址,以及選用的通訊埠、使用者名稱和密碼。 "http://user:password@10.184.37.42:80"
"10.184.37.42"
httpsProxy 加密 HTTPS 流量的 Proxy 網址。如果 httpsProxy 的值為空,系統會使用 httpProxy 網址。 "http://10.101.16.31:80"
noProxy 以半形逗號分隔的網址清單,這些網址會從 Proxy 排除。每個值可以是 IP 位址、CIDR 範圍、網域名稱或星號 (*)。以半形句號開頭指定的網域 (例如「.google.com」) 表示必須使用子網域。單一星號 * 會忽略所有 Proxy 設定。 "1.2.3.4,10.0.0.0/16,example.com,.site.com"
  1. 如要建立設定檔,請建立 JSON 檔案,其中包含 httpProxynoProxy 和選用 httpsProxy 金鑰的值。

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

    更改下列內容:

    • AUTHENTICATION_URL:包含 Proxy 使用者名稱和密碼的編碼網址
    • NO_PROXY_ADDRESSES:以半形逗號分隔的 CIDR 區塊和網址清單,例如 10.0.0.0/16,http://example.com

    儲存檔案,以供下一節使用。

  2. 使用 aws 指令列工具,以這個 JSON 資料做為密鑰,在 AWS Secrets Manager 中建立密鑰。

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

    更改下列內容:

    • SECRET_NAME:新密鑰的名稱
    • PROXY_CONFIGURATION_FILE:Proxy 設定檔的路徑。

    輸出內容會包含密碼的 Amazon 資源名稱 (ARN) 和內容。 現在建立叢集時,可以參照這個密鑰。

建立使用 Proxy 的叢集

如要將 GKE on AWS 設為使用 HTTP Proxy 進行輸出連線,請按照下列步驟操作:

按照「建立叢集」一文中的步驟操作,並傳遞 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:包含 Proxy 設定的密鑰 ARN,例如 arn:aws::secretsmanager:us-east-2:111122223333:secret:example/ExampleSecret-jiObOV
  • PROXY_SECRET_VERSION:密鑰的版本 ID,例如 EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

更新 Proxy 設定

您可以更新叢集控制層或節點集區的 Proxy 設定。如要更新 Proxy 設定 ARN,您必須先更新控制平面或節點集區 AWS IAM 角色。

更新 AWS IAM 角色

變更儲存 Proxy 設定的 ARN 前,請先確認叢集的控制層角色節點集區角色是否具有讀取密碼 ARN 的權限。如果具有 secretsmanager:GetSecretValue 權限的 IAM 陳述式範圍限定為特定資源 ARN,請先將新的密鑰 ARN 新增至該清單,再更新 Proxy 設定。

更新叢集 Proxy 設定

如要更新叢集的 Proxy 設定,請使用 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:含有 Proxy 設定的密鑰 ARN
  • PROXY_SECRET_VERSION:密鑰的版本 ID,例如 EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

更新節點集區 Proxy 設定

如要更新節點集區的 Proxy 設定,請使用 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:含有 Proxy 設定的密鑰 ARN
  • PROXY_SECRET_VERSION:密鑰的版本 ID,例如 EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

移除 Proxy 設定

您可以從叢集控制層或節點集區移除 Proxy 設定。 這些作業各自獨立。從控制平面移除設定,不會從叢集的節點集區中移除設定。

移除控制層 Proxy 設定

如要移除叢集控制層的 Proxy 設定,請使用 Google Cloud CLI。

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

更改下列內容:

移除節點集區 Proxy 設定

如要從節點集區移除 Proxy 設定,請使用 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

後續步驟