共用方式為


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)
  • 具有 Windows 節點集區的 AKS 叢集
  • 使用虛擬機器可用性設定組的節點集區 (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。

開始之前

使用 HTTP Proxy 值建立組態檔

建立檔案並為 httpProxyhttpsProxynoProxy 提供值。 如果您的環境需要,請為 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_proxyhttps_proxyno_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 叢集。

  1. 使用 az aks create 命令,並以 JSON 檔案的形式傳入您的組態。

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

    您的叢集在初始化時,應該就會在節點上設定 HTTP Proxy。

  2. 請確認 HTTP proxy 配置是否在 pod 和節點上,方法是檢查環境變數中是否包含 http_proxyhttps_proxyno_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 檔案,並視需要更新 、httpProxyhttpsProxynoProxytrustedCa 的值。 此更新會使用新的 httpProxyhttpsProxynoProxy 值,將新的環境變數插入 Pod 中。 Pod 必須輪替才可供應用程式挑選,因為系統會透過變動許可 Webhook 來插入環境變數值。

附註

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

更新叢集以更新或啟用 HTTP Proxy

  1. 使用 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 的中斷。

  1. 請確認 HTTP proxy 配置是否在 pod 和節點上,方法是檢查環境變數中是否包含 http_proxyhttps_proxyno_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 延伸模組

  1. 使用 aks-preview 命令安裝 az extension add Azure CLI 擴充功能。

    重要

    AKS 預覽功能可透過自助服務,以加入方式使用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令,更新為最新版的延伸模組。 停用 HTTP Proxy 至少需要 18.0.0b13

    az extension update --name aks-preview
    

註冊 DisableHTTPProxyPreview 功能旗標

  1. 使用 DisableHTTPProxyPreview 命令註冊 az feature register 功能旗標。

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. 使用 az feature show 命令確認註冊狀態。 狀態需要幾分鐘的時間才會顯示「已註冊」

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. 當狀態反映 [已註冊] 時,使用 命令重新整理 az provider register 資源提供者的註冊。

    az provider register --namespace Microsoft.ContainerService
    

更新叢集以停用 HTTP Proxy (預覽)

  1. 使用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 的中斷。

  1. 使用 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 叢集。

  1. 檢閱每個參數的需求:

    • 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 支援。

  2. 使用 HTTP Proxy 參數建立範本。 在您的範本中,為 httpProxyhttpsProxynoProxy 提供值。 如有必要,請為 trustedCa 提供值。 Microsoft.ContainerService/managedClusters 定義中的 "properties" 下會有 CLI 部署所用的相同結構描述,如下列範例所示:

    "properties": {
        ...,
        "httpProxyConfig": {
          "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  3. 使用 HTTP Proxy 設定來部署 ARM 範本。 您的叢集在初始化時,應該就會在節點上設定 HTTP Proxy。

更新 HTTP Proxy 組態

您可以更新現有叢集上的 HTTP Proxy 組態,包括:

  • 更新現有的叢集以啟用 HTTP Proxy 並新增新的 HTTP Proxy 組態。
  • 更新現有的叢集以變更 HTTP Proxy 設定。

HTTP Proxy 更新注意事項

參數--http-proxy-config應該設定為新的 JSON 檔案,並視需要更新 、httpProxyhttpsProxynoProxytrustedCa 的值。 此更新會使用新的 httpProxyhttpsProxynoProxy 值,將新的環境變數插入 Pod 中。 Pod 必須輪替才可供應用程式挑選,因為系統會透過變動許可 Webhook 來插入環境變數值。

附註

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

更新 ARM 範本以設定 HTTP Proxy

  1. 在您的範本中,提供httpProxyhttpsProxynoProxy的新值。 如有必要,請為 trustedCa 提供值。

    Microsoft.ContainerService/managedClusters 定義中的 "properties" 下會有 CLI 部署所用的相同結構描述,如下列範例所示:

    "properties": {
        ...,
        "httpProxyConfig": {
            "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  2. 使用更新的 HTTP Proxy 組態部署 ARM 範本。

謹慎

當您使用 az aks update 命令更新叢集上的 Proxy 設定時,AKS 會自動重新映像叢集中的所有節點集區。 您可以使用 Pod 中斷預算 (PDB) 來保護重新安裝映像期間對重要 Pod 的中斷。

  1. 請確認 HTTP proxy 配置是否在 pod 和節點上,方法是檢查環境變數中是否包含 http_proxyhttps_proxyno_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 延伸模組

  1. 使用 aks-preview 命令安裝 az extension add Azure CLI 擴充功能。

    重要

    AKS 預覽功能可透過自助服務,以加入方式使用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令,更新為最新版的延伸模組。 停用 HTTP Proxy 至少需要 18.0.0b13

    az extension update --name aks-preview
    

註冊 DisableHTTPProxyPreview 功能旗標

  1. 使用 DisableHTTPProxyPreview 命令註冊 az feature register 功能旗標。

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. 使用 az feature show 命令確認註冊狀態。 狀態需要幾分鐘的時間才會顯示「已註冊」

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. 當狀態反映 [已註冊] 時,使用 命令重新整理 az provider register 資源提供者的註冊。

    az provider register --namespace Microsoft.ContainerService
    

更新叢集以停用 HTTP Proxy

  1. 更新您的叢集 ARM 範本,將 enabled 設定為 false 以停用 HTTP proxy。 Microsoft.ContainerService/managedClusters 定義中的 "properties" 下會有 CLI 部署所用的相同結構描述,如下列範例所示:

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. 停用 HTTP Proxy 來部署 ARM 範本。

謹慎

當您使用 az aks update 命令更新叢集上的 Proxy 設定時,AKS 會自動重新映像叢集中的所有節點集區。 您可以使用 Pod 中斷預算 (PDB) 來保護重新安裝映像期間對重要 Pod 的中斷。

  1. 使用 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
  1. 建立檔案,並為PROXY_IPPROXY_PORT提供值。

  2. 您可以使用下列方式來部署服務入口:

    kubectl apply -f service_proxy.yaml
    

監視擴充功能設定

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

  • 外部代理伺服器無需驗證
  • 使用受信任憑證的外部代理伺服器,以連接至 Log Analytics 端點

不支援下列設定:

  • 使用搭配信任憑證的代理時的自訂指標與建議警示功能

下一步

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