共用方式為


Azure Kubernetes Service (AKS) 中的 HTTP Proxy 支援

在本文中,您將了解如何設定 Azure Kubernetes Service (AKS) 叢集,以使用 HTTP Proxy 進行輸出的網際網路存取。

部署至受控或自訂虛擬網路的 AKS 叢集具有某些要正常運作所需的輸出相依性,這會在需要透過 HTTP Proxy 路由傳送網際網路存取的環境中產生問題。 節點無法啟動載入存取網際網路服務所需的設定、環境變數和憑證。

HTTP Proxy 功能會對 AKS 叢集新增 HTTP Proxy 支援,公開簡單的介面讓您保護 Proxy 相依環境中的 AKS 所需網路流量。 使用這項功能時,AKS 節點和 Pod 都會設定為使用 HTTP Proxy。 此功能也可在啟動叢集時,將受信任的憑證授權單位單位安裝到節點上。 更複雜的解決方案可能需要建立信任鏈結,才能跨網路建立安全通訊。

限制與考量

下列案例不受支援

  • 每個節點集區的不同 Proxy 組態
  • 使用者/密碼驗證
  • 用於 API 伺服器通訊的自訂憑證授權單位 (CA)
  • 不支援為現有 AKS 叢集設定 HTTP Proxy;HTTP Proxy 功能必須在建立叢集時啟用。
  • 以 Windows 為基礎的叢集
  • 使用虛擬機器可用性設定組的節點集區 (VMAS)
  • 使用 * 作為附加至 noProxy 網域尾碼的萬用字元

httpProxyhttpsProxytrustedCa 預設不會有值。 會使用下列環境變數來插入 Pod:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • NO_PROXY
  • no_proxy

若要停用 Proxy 環境變數的插入,您必須使用 "kubernetes.azure.com/no-http-proxy-vars":"true" 標註 Pod。

開始之前

  • 您需要最新版的 Azure CLI。 執行 az --version 以尋找版本,然後執行 az upgrade 以升級版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI
  • 檢查是否有可用的 AKS 叢集升級,以確保您執行的是最新版本的 AKS。 如果需要升級,請參閱升級 AKS 叢集
  • 要更新 Proxy 設定所需的 OS 檔案只能在節點映像升級過程中更新。 在設定 Proxy 後,必須升級節點映像才能套用變更。 如需詳細資訊,請參閱升級 AKS 節點映像

使用 Azure CLI 設定 HTTP Proxy

您可以使用 az aks create 命令並以 JSON 檔案的形式傳入設定,在叢集建立期間設定具有 HTTP Proxy 的 AKS 叢集。

組態檔的結構描述看起來與下列內容類似:

{
  "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_proxyhttps_proxyno_proxy 存在差異。 Curl 和 Python 在 no_proxy 中不支援 CIDR,但 Ruby 支援。

範例輸入:

注意

CA 憑證應該是 PEM 格式憑證內容的 base64 編碼字串。

{
  "httpProxy": "http://myproxy.server.com:8080/", 
  "httpsProxy": "https://myproxy.server.com:8080/", 
  "noProxy": [
    "localhost",
    "127.0.0.1"
  ],
  "trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...b3Rpbk15RGszaWFyCkYxMFlscWNPbWVYMXVGbUtiZGkvWG9yR2xrQ29NRjNURHg4cm1wOURCaUIvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
}

建立檔案並為 httpProxyhttpsProxynoProxy 提供值。 如果您的環境需要,請為 trustedCa 提供值。 接下來,您可以使用 az aks create 命令並將 --http-proxy-config 參數設定為所建立的檔案,以部署叢集。 您的叢集在初始化時,應該就會在節點上設定 HTTP Proxy。

az aks create \
    --name $clusterName \
    --resource-group $resourceGroup \
    --http-proxy-config aks-proxy-config.json \
    --generate-ssh-keys

使用 Azure Resource Manager (ARM) 範本來設定 HTTP Proxy

您可以使用 ARM 範本來部署具有 HTTP Proxy 的 AKS 叢集。 Microsoft.ContainerService/managedClusters 定義中的 "properties" 下會有 CLI 部署所用的相同結構描述,如下列範例所示:

"properties": {
    ...,
    "httpProxyConfig": {
        "httpProxy": "string",
        "httpsProxy": "string",
        "noProxy": [
            "string"
        ],
        "trustedCa": "string"
    }
}

在您的範本中,為 httpProxyhttpsProxynoProxy 提供值。 如有必要,請為 trustedCa 提供值。 接下來,您可以部署範本。 您的叢集在初始化時,應該就會在節點上設定 HTTP Proxy。

更新 Proxy 設定

注意

如果切換至新的 Proxy,新的 Proxy 必須已經存在,才能成功更新。 升級完成後,您可以刪除舊的 Proxy。

如有必要,您可以使用 az aks update 命令並將 --http-proxy-config 參數設定為具有 httpProxyhttpsProxynoProxytrustedCa 更新值的新 JSON 檔案,以更新叢集上的 Proxy 設定。 此更新會使用新的 httpProxyhttpsProxynoProxy 值,將新的環境變數插入 Pod 中。 Pod 必須輪替才可供應用程式挑選,因為系統會透過變動許可 Webhook 來插入環境變數值。 若為 Kubernetes 下的元件 (例如 containerd 和節點本身),在執行節點映像升級之前,這不會生效。

例如,假設您使用名為 aks-proxy-config-2.json 之新 CA 憑證的 base64 編碼字串建立了新檔案。 您可以使用下列命令更新叢集上的 Proxy 設定:

az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json

升級 AKS 節點映像

在設定 Proxy 後,必須升級節點映像才能套用變更。 若要更新進行 Proxy 設定更新所需的 OS 檔案,唯一的方法是進行節點映像升級程序。 節點映像升級程序屬於滾動升級,會更新節點集區中每個節點上的 OS 映像。 AKS 控制平面會處理升級程序,這不會中斷執行中的應用程式。

若要升級 AKS 節點映像,請參閱升級 Azure Kubernetes Service (AKS) 節點映像

監視附加元件設定

具有監視附加元件的 HTTP Proxy 支援下列設定:

  • 輸出 Proxy 無驗證
  • 輸出 Proxy 搭配使用者與名稱密碼驗證
  • 輸出 Proxy 搭配 Log Analytics 端點的受信任憑證

不支援下列設定:

  • 自訂計量和建議的警示功能 (搭配信任的憑證使用 Proxy 時)

下一步

如需 AKS 叢集網路需求的詳細資訊,請參閱控制 AKS 中叢集節點的輸出流量