本文說明如何透過 HTTP/HTTPS Proxy,從 AWS 上的 GKE 轉送流量。建立叢集時,您可以指定 Proxy 設定。
總覽
GKE on AWS 可透過 Proxy 轉送輸出網際網路流量,原因如下:
- 如要透過 Google Cloud 註冊叢集,請使用 Connect
- 執行 Connect Agent
- 如何從 Container Registry 下載映像檔
限制
- 「
httpProxy
」和「httpsProxy
」欄位不支援以https://
開頭的網址。你必須使用http://
。通訊埠 443 的要求會使用 HTTPS。 - 您必須為
httpProxy
、httpsProxy
和noProxy
設定值。 - 您可能需要在
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" |
是 |
如要建立設定檔,請建立 JSON 檔案,其中包含
httpProxy
、noProxy
和選用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
儲存檔案,以供下一節使用。
使用
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-arn
和 proxy-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 CloudPROXY_SECRET_ARN
:含有 Proxy 設定的密鑰 ARNPROXY_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 CloudPROXY_SECRET_ARN
:含有 Proxy 設定的密鑰 ARNPROXY_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
更改下列內容:
CLUSTER_NAME
:叢集名稱GOOGLE_CLOUD_LOCATION
:管理叢集的支援 Google Cloud 區域,例如us-west1
移除節點集區 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
後續步驟
- 如要瞭解如何建立叢集,請參閱這篇文章。