在本文中,您將了解如何設定 Azure Kubernetes Service (AKS) 叢集,以使用 HTTP Proxy 進行輸出的網際網路存取。
部署至受控或自訂虛擬網路的 AKS 叢集具有某些要正常運作所需的輸出相依性,這會在需要透過 HTTP Proxy 路由傳送網際網路存取的環境中產生問題。 節點無法啟動載入存取網際網路服務所需的設定、環境變數和憑證。
HTTP Proxy 功能會對 AKS 叢集新增 HTTP Proxy 支援,公開簡單的介面讓您保護 Proxy 相依環境中的 AKS 所需網路流量。 使用這項功能時,AKS 節點和 Pod 都會設定為使用 HTTP Proxy。 此功能也可在啟動叢集時,將受信任的憑證授權單位安裝到節點上。 更複雜的解決方案可能需要建立信任鏈結,才能跨網路建立安全通訊。
限制與考量
下列案例不受支援︰
- 每個節點集區的不同 Proxy 組態
- 使用者/密碼驗證
- 用於 API 伺服器通訊的自訂憑證授權單位 (CA)
- 具有 Windows 節點集區的 AKS 叢集
- 使用虛擬機器可用性設定組的節點集區 (VMAS)
- 使用 * 作為附加至 noProxy 網域尾碼的萬用字元
httpProxy、httpsProxy 和 trustedCa 預設不會有值。 將下列環境變數設置至 Pod 中:
HTTP_PROXYhttp_proxyHTTPS_PROXYhttps_proxyNO_PROXYno_proxy
若要停用 Proxy 環境變數的插入,您必須使用 "kubernetes.azure.com/no-http-proxy-vars":"true" 標註 Pod。
開始之前
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 如果您正在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 若要完成驗證程式,請遵循終端機中顯示的步驟。 如需其他登入選項,請參閱 使用 Azure CLI 向 Azure 進行驗證。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
使用 HTTP Proxy 值建立組態檔
建立檔案並為 httpProxy、httpsProxy 和 noProxy 提供值。 如果您的環境需要,請為 trustedCa 提供值。
組態檔的結構描述看起來與下列內容類似:
{
"httpProxy": "string",
"httpsProxy": "string",
"noProxy": [
"string"
],
"trustedCa": "string"
}
檢閱每個參數的需求:
-
httpProxy:用來在叢集外部建立 HTTP 連線的 Proxy URL。 URL 配置必須是http。 -
httpsProxy:用來在叢集外部建立 HTTPS 連線的 Proxy URL。 如果未指定,則會使用httpProxy來進行 HTTP 和 HTTPS 連線。 -
noProxy:要排除 Proxy 之目的地網域名稱、網域、IP 位址或其他網路 CIDR 的清單。 -
trustedCa:包含base64 encoded替代 CA 憑證內容的字串。 目前僅支援PEM格式。
重要
為了與 Kubernetes 系統一部分的 Go 架構元件相容,憑證必須支援 Subject Alternative Names(SANs),而非支援已被取代的通用名稱憑證。
應用程式對於如何遵循環境變數 http_proxy、https_proxy 及 no_proxy 存在差異。 Curl 和 Python 在 no_proxy 中不支援 CIDR,但 Ruby 支援。
範例輸入:
{
"httpProxy": "http://myproxy.server.com:8080",
"httpsProxy": "https://myproxy.server.com:8080",
"noProxy": [
"localhost",
"127.0.0.1"
],
"trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...S0tLS0="
}
使用 Azure CLI 建立具有 HTTP Proxy 設定的叢集
您可以在叢集建立期間,使用 HTTP Proxy 設定來設定 AKS 叢集。
使用
az aks create命令,並以 JSON 檔案的形式傳入您的組態。az aks create \ --name $clusterName \ --resource-group $resourceGroup \ --http-proxy-config aks-proxy-config.json \ --generate-ssh-keys您的叢集在初始化時,應該就會在節點上設定 HTTP Proxy。
請確認 HTTP proxy 配置是否在 pod 和節點上,方法是檢查環境變數中是否包含
http_proxy、https_proxy和no_proxy的適當值,並使用kubectl describe pod命令。kubectl describe {any pod} -n kube-system若要驗證 Pod 中已設定 Proxy 變數,您可以檢查節點上存在的環境變數。
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
更新 HTTP Proxy 組態
您可以更新現有叢集上的 HTTP Proxy 組態,包括:
- 更新現有的叢集以啟用 HTTP Proxy 並新增新的 HTTP Proxy 組態。
- 更新現有的叢集以變更 HTTP Proxy 設定。
HTTP Proxy 更新注意事項
參數--http-proxy-config應該設定為新的 JSON 檔案,並視需要更新 、httpProxyhttpsProxy、 noProxy和 trustedCa 的值。 此更新會使用新的 httpProxy、httpsProxy 或 noProxy 值,將新的環境變數插入 Pod 中。 Pod 必須輪替才可供應用程式挑選,因為系統會透過變動許可 Webhook 來插入環境變數值。
附註
如果切換至新的 Proxy,新的 Proxy 必須已經存在,才能成功更新。 升級完成後,您可以刪除舊的 Proxy。
更新叢集以更新或啟用 HTTP Proxy
使用
az aks update命令在現有叢集上啟用或更新 HTTP Proxy 組態。例如,假設您使用名為 aks-proxy-config-2.json 之新 CA 憑證的 base64 編碼字串建立了新檔案。 您可以使用下列命令更新叢集上的 Proxy 設定:
az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json
謹慎
當您使用 az aks update 命令更新叢集上的 Proxy 設定時,AKS 會自動重新映像叢集中的所有節點集區。 您可以使用 Pod 中斷預算 (PDB) 來保護重新安裝映像期間對重要 Pod 的中斷。
請確認 HTTP proxy 配置是否在 pod 和節點上,方法是檢查環境變數中是否包含
http_proxy、https_proxy和no_proxy的適當值,並使用kubectl describe pod命令。kubectl describe {any pod} -n kube-system若要驗證 Pod 中已設定 Proxy 變數,您可以檢查節點上存在的環境變數。
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
停用現有叢集上的 HTTP Proxy (預覽)
安裝 aks-preview 延伸模組
使用
aks-preview命令安裝az extension addAzure CLI 擴充功能。重要
AKS 預覽功能可透過自助服務,以加入方式使用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
az extension add --name aks-preview使用
az extension update命令,更新為最新版的延伸模組。 停用 HTTP Proxy 至少需要 18.0.0b13。az extension update --name aks-preview
註冊 DisableHTTPProxyPreview 功能旗標
使用
DisableHTTPProxyPreview命令註冊az feature register功能旗標。az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview使用
az feature show命令確認註冊狀態。 狀態需要幾分鐘的時間才會顯示「已註冊」。az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview當狀態反映 [已註冊] 時,使用 命令重新整理
az provider register資源提供者的註冊。az provider register --namespace Microsoft.ContainerService
更新叢集以停用 HTTP Proxy (預覽)
使用
az aks update命令和--disable-http-proxy旗標更新叢集,以停用HTTP Proxy。az aks update --name $clusterName --resource-group $resourceGroup --disable-http-proxy
謹慎
當您使用 az aks update 命令更新叢集上的 Proxy 設定時,AKS 會自動重新映像叢集中的所有節點集區。 您可以使用 Pod 中斷預算 (PDB) 來保護重新安裝映像期間對重要 Pod 的中斷。
使用
kubectl describe pod命令驗證 Pod 和節點上未設定 HTTP Proxy 組態,以確認 HTTP 代理伺服器已停用。kubectl describe {any pod} -n kube-system若要驗證 Pod 中未設定 Proxy 變數,您可以檢查節點上存在的環境變數。
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
在現有的叢集上重新啟用 HTTP Proxy
當您建立叢集時,預設會啟用 HTTP Proxy。 在叢集上停用 HTTP Proxy 之後,Proxy 組態會儲存在資料庫中,但 Proxy 變數會從 Pod 和節點中移除。
若要在現有的叢集上重新啟用 HTTP Proxy,請使用 az aks update 命令搭配 --enable-http-proxy 旗標。
az aks update --name $clusterName --resource-group $resourceGroup --enable-http-proxy
謹慎
當您使用 az aks update 命令更新叢集上的 Proxy 設定時,AKS 會自動重新映像叢集中的所有節點集區。 您可以使用 Pod 中斷預算 (PDB) 來保護重新安裝映像期間對重要 Pod 的中斷。
重要
如果您在停用之前已在叢集上設定 HTTP Proxy,則當您在該叢集上重新啟用 HTTP Proxy 時,現有的 HTTP Proxy 組態會自動套用。 建議您先確認設定,以確保其符合您目前的需求,再繼續進行。 如果您想要在重新啟用 HTTP Proxy 之後變更 HTTP Proxy 設定,請遵循在 現有叢集上更新 HTTP Proxy 設定的步驟。
使用 Azure Resource Manager (ARM) 樣本設定 HTTP Proxy 設定
您可以使用 ARM 範本來部署具有 HTTP Proxy 的 AKS 叢集。
檢閱每個參數的需求:
-
httpProxy:用來在叢集外部建立 HTTP 連線的 Proxy URL。 URL 配置必須是http。 -
httpsProxy:用來在叢集外部建立 HTTPS 連線的 Proxy URL。 如果未指定,則會使用httpProxy來進行 HTTP 和 HTTPS 連線。 -
noProxy:要排除 Proxy 之目的地網域名稱、網域、IP 位址或其他網路 CIDR 的清單。 -
trustedCa:包含base64 encoded替代 CA 憑證內容的字串。 目前僅支援PEM格式。
重要
為了與 Kubernetes 系統一部分的 Go 架構元件相容,憑證必須支援
Subject Alternative Names (SANs),而非支援已被取代的通用名稱憑證。應用程式對於如何遵循環境變數
http_proxy、https_proxy及no_proxy存在差異。 Curl 和 Python 在no_proxy中不支援 CIDR,但 Ruby 支援。-
使用 HTTP Proxy 參數建立範本。 在您的範本中,為
httpProxy、httpsProxy和noProxy提供值。 如有必要,請為trustedCa提供值。Microsoft.ContainerService/managedClusters定義中的"properties"下會有 CLI 部署所用的相同結構描述,如下列範例所示:"properties": { ..., "httpProxyConfig": { "enabled": "true", "httpProxy": "string", "httpsProxy": "string", "noProxy": [ "string" ], "trustedCa": "string" } }使用 HTTP Proxy 設定來部署 ARM 範本。 您的叢集在初始化時,應該就會在節點上設定 HTTP Proxy。
更新 HTTP Proxy 組態
您可以更新現有叢集上的 HTTP Proxy 組態,包括:
- 更新現有的叢集以啟用 HTTP Proxy 並新增新的 HTTP Proxy 組態。
- 更新現有的叢集以變更 HTTP Proxy 設定。
HTTP Proxy 更新注意事項
參數--http-proxy-config應該設定為新的 JSON 檔案,並視需要更新 、httpProxyhttpsProxy、 noProxy和 trustedCa 的值。 此更新會使用新的 httpProxy、httpsProxy 或 noProxy 值,將新的環境變數插入 Pod 中。 Pod 必須輪替才可供應用程式挑選,因為系統會透過變動許可 Webhook 來插入環境變數值。
附註
如果切換至新的 Proxy,新的 Proxy 必須已經存在,才能成功更新。 升級完成後,您可以刪除舊的 Proxy。
更新 ARM 範本以設定 HTTP Proxy
在您的範本中,提供
httpProxy、httpsProxy和noProxy的新值。 如有必要,請為trustedCa提供值。Microsoft.ContainerService/managedClusters定義中的"properties"下會有 CLI 部署所用的相同結構描述,如下列範例所示:"properties": { ..., "httpProxyConfig": { "enabled": "true", "httpProxy": "string", "httpsProxy": "string", "noProxy": [ "string" ], "trustedCa": "string" } }使用更新的 HTTP Proxy 組態部署 ARM 範本。
謹慎
當您使用 az aks update 命令更新叢集上的 Proxy 設定時,AKS 會自動重新映像叢集中的所有節點集區。 您可以使用 Pod 中斷預算 (PDB) 來保護重新安裝映像期間對重要 Pod 的中斷。
請確認 HTTP proxy 配置是否在 pod 和節點上,方法是檢查環境變數中是否包含
http_proxy、https_proxy和no_proxy的適當值,並使用kubectl describe pod命令。kubectl describe {any pod} -n kube-system若要驗證 Pod 中已設定 Proxy 變數,您可以檢查節點上存在的環境變數。
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
使用 ARM 樣本停用現有叢集上的 HTTP Proxy (預覽)
安裝 aks-preview 延伸模組
使用
aks-preview命令安裝az extension addAzure CLI 擴充功能。重要
AKS 預覽功能可透過自助服務,以加入方式使用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
az extension add --name aks-preview使用
az extension update命令,更新為最新版的延伸模組。 停用 HTTP Proxy 至少需要 18.0.0b13。az extension update --name aks-preview
註冊 DisableHTTPProxyPreview 功能旗標
使用
DisableHTTPProxyPreview命令註冊az feature register功能旗標。az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview使用
az feature show命令確認註冊狀態。 狀態需要幾分鐘的時間才會顯示「已註冊」。az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview當狀態反映 [已註冊] 時,使用 命令重新整理
az provider register資源提供者的註冊。az provider register --namespace Microsoft.ContainerService
更新叢集以停用 HTTP Proxy
更新您的叢集 ARM 範本,將
enabled設定為false以停用 HTTP proxy。Microsoft.ContainerService/managedClusters定義中的"properties"下會有 CLI 部署所用的相同結構描述,如下列範例所示:"properties": { ..., "httpProxyConfig": { "enabled": "false", } }停用 HTTP Proxy 來部署 ARM 範本。
謹慎
當您使用 az aks update 命令更新叢集上的 Proxy 設定時,AKS 會自動重新映像叢集中的所有節點集區。 您可以使用 Pod 中斷預算 (PDB) 來保護重新安裝映像期間對重要 Pod 的中斷。
使用
kubectl describe pod命令驗證 Pod 和節點上未設定 HTTP Proxy 組態,以確認 HTTP 代理伺服器已停用。kubectl describe {any pod} -n kube-system若要驗證 Pod 中未設定 Proxy 變數,您可以檢查節點上存在的環境變數。
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
在現有的叢集上重新啟用 HTTP Proxy
當您建立叢集時,預設會啟用 HTTP Proxy。 在叢集上停用 HTTP Proxy 之後,就無法再將 HTTP Proxy 組態新增至該叢集。
如果您想要重新啟用 HTTP Proxy,請遵循使用 ARM 範本更新 HTTP Proxy 設定的步驟。
Istio 外部服務的附加元件 HTTP Proxy
如果您使用 AKS 的 Istio 型服務網格附加元件,您必須建立服務專案,讓網格中的應用程式能夠透過 HTTP Proxy 存取非叢集或外部資源。
例如:
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: proxy
spec:
hosts:
- my-company-proxy.com # ignored
addresses:
- $PROXY_IP/32
ports:
- number: $PROXY_PORT
name: tcp
protocol: TCP
location: MESH_EXTERNAL
建立檔案,並為
PROXY_IP和PROXY_PORT提供值。您可以使用下列方式來部署服務入口:
kubectl apply -f service_proxy.yaml
監視擴充功能設定
具有監視附加元件的 HTTP Proxy 支援下列設定:
- 外部代理伺服器無需驗證
- 使用受信任憑證的外部代理伺服器,以連接至 Log Analytics 端點
不支援下列設定:
- 使用搭配信任憑證的代理時的自訂指標與建議警示功能
下一步
如需 AKS 叢集網路需求的詳細資訊,請參閱控制 AKS 中叢集節點的輸出流量。