在實際執行環境中對於 Kubernetes 執行自我裝載閘道的指導

適用於:開發人員 |進階版

為了在實際執行環境中執行自我裝載閘道,需要考量各個層面。 例如,其應以高可用性的方式部署,使用組態備份來處理暫時中斷連線等等。

本文提供如何針對實際執行工作負載,在 Kubernetes 上執行自我裝載閘道的指導,以確保其能夠順暢且可靠地執行。

重要

對 Azure APIM 自我裝載閘道第 0 版和第 1 版容器映像的支援,以及其對應的設定 API v1,將於 2023 年 10 月 1 日結束。 使用我們的移轉指南,搭配設定 API v2 使用自我裝載閘道 v2.0.0 或更高版本。 在我們的淘汰文件中深入瞭解

存取權杖

若無有效的存取權杖,自我裝載閘道就無法從相關聯 APIM 服務的端點存取和下載組態資料。 存取權杖有效期間最多 30 天。 它必須重新產生,且叢集必須在過期前以手動方式或透過自動化方式,以新的權杖設定。

當您將權杖重新整理自動化時,請使用此管理 API 作業來產生新的權杖。 如需管理 Kubernetes 秘密的資訊,請參閱 Kubernetes 網站

提示

您也可以將自我裝載閘道部署至 Kubernetes,並使用 Microsoft Entra ID 啟用 APIM 執行個體的驗證。

自動調整規模

雖然我們提供自我裝載閘道複本數目下限的指導,但建議您針對自我裝載閘道使用自動調整,以更主動地符合流量的需求。

有兩種方式可水平自動調整自我裝載閘道:

  • 根據 CPU 和記憶體的資源使用量自動調整
  • 根據每秒的要求數目自動調整

這可以透過原生 Kubernetes 功能來調整,或使用 Kubernetes Event-driven Autoscaling (KEDA) (英文) 來調整。 KEDA 是 CNCF 育成專案,目標是將應用程式自動調整變得簡單。

注意

KEDA 是一項 Azure 支援不支援的開放原始碼技術,需要由客戶操作。

資源型自動調整

Kubernetes 可讓您使用 Horizontal Pod Autoscaler,根據資源使用量自動調整自我裝載閘道。 它可讓您定義 CPU 和記憶體閾值,以及要擴增或縮減的複本數目。

替代方法是使用 Kubernetes Event-driven Autoscaling (KEDA),可讓您根據各種調整程式 (英文) 調整工作負載 (包括 CPU 和記憶體)。

提示

如果您已經使用 KEDA 來調整其他工作負載,建議您使用 KEDA 作為統一的應用程式自動調整程式。 如果不是這樣,我們強烈建議透過 Horizontal Pod Autoscaler 依賴原生 Kubernetes 功能。

流量型自動調整

Kubernetes 不針對流量型自動調整提供現成可用的機制。

Kubernetes Event-driven Autoscaling (KEDA) 提供幾個方法,可協助處理流量型的自動調整:

  • 如果在 PrometheusAzure 監視器中有可用的計量,您可使用現成的調整程式,根據 Kubernetes 輸入中的計量進行調整
  • 您可以安裝可在 Beta 中使用的 HTTP 附加元件 (英文),並根據每秒要求數目進行調整。

設定備份

設定自我裝載閘道容器的本機儲存體磁碟區,以便保存最新下載組態的備份複本。 如果連線已關閉,儲存體磁碟區可以在重新啟動時使用備份複本。 磁碟區裝載路徑必須是 /apim/config,而且必須由 1001 群組識別碼擁有。 請參閱 GitHub (英文) 上的範例。 若要了解 Kubernetes 中的儲存體,請參閱 Kubernetes 網站。 若要變更裝載路徑的所有權,請參閱 Kubernetes 網站上的 securityContext.fsGroup 設定。

注意

若要了解暫時性 Azure 連線中斷時的自我裝載閘道行為,請參閱自我裝載閘道概觀

容器映像標籤

Azure 入口網站中提供的 YAML 檔案會使用最新的標記。 此標籤一律會參考最新版本的自我裝載閘道容器映像。

請考量在實際執行環境中使用特定的版本標籤,以避免意外升級至較新版本。

您可以下載可用標籤的完整清單

提示

使用 Helm 安裝時,會為您最佳化映像標記。 Helm 圖表的應用程式版本會將網路閘道釘選到指定的版本,而且不依賴 latest

深入了解如何使用 Helm 在 Kubernetes 上安裝 APIM 自我裝載閘道

容器資源

根據預設,Azure 入口網站中提供的 YAML 檔案不會指定容器資源要求。

無法可靠地預測並建議每個容器 CPU 和記憶體資源的數量,以及支援特定工作負載所需的複本數目。 許多因素都處於作用中,例如:

  • 叢集執行位置所在的特定硬體。
  • 虛擬化的目前狀態和類型。
  • 同時用戶端連線的數目和速率。
  • 要求速率
  • 已設定原則的種類和數目。
  • 承載的大小,以及承載是緩衝處理還是串流處理。
  • 後端服務延遲。

建議將資源要求設定為雙核心和 2 GiB 作為起點。 執行負載測試,並根據結果擴大/擴增或縮小/縮減。

自訂網域名稱和 SSL 憑證

如果您針對 APIM 端點使用自訂網域名稱 (特別是當您使用管理端點的自訂網域名稱時),可能需要更新 <gateway-name>.yaml 檔案中的 config.service.endpoint 值,以自訂網域名稱取代預設網域名稱。 請確定您可以從 Kubernetes 叢集中自我裝載閘道的 Pod 存取管理端點。

在此案例中,如果管理端點所使用的 SSL 憑證未由已知的 CA 憑證簽署,您必須確定 CA 憑證受自我裝載閘道 Pod 的信任。

注意

使用自我裝載閘道 v2,API 管理提供新的設定端點:<apim-service-name>.configuration.azure-api.net。 此端點支援自訂主機名稱,並且可以使用自訂主機名稱,而不是預設主機名稱。

DNS 原則

在自我裝載閘道連線到 Azure 中的相依性,並將 API 呼叫分派給後端服務的能力中,DNS 名稱解析扮演了重要角色。

Azure 入口網站中提供的 YAML 檔案會套用預設的 ClusterFirst 原則。 此原則會導致叢集 DNS 未解析的名稱解析要求轉送至繼承自節點的上游 DNS 伺服器。

若要了解 Kubernetes 中的名稱解析,請參閱 Kubernetes 網站。 請考慮依您的設定,以適當方式自訂 DNS 原則DNS 設定

外部流量原則

Azure 入口網站中提供的 YAML 檔案會將 Service 物件上的 externalTrafficPolicy 欄位設定為 Local。 這會保留呼叫者 IP 位址 (可在要求內容中存取),並停用跨節點負載平衡,以消除其所造成的網路躍點。 請注意,此設定可能會造成部署中流量不對稱的分佈,且每個節點的閘道 Pod 數目不相等。

高可用性

自我裝載閘道是基礎結構中的重要元件,必須具有高可用性。 不過,預計會也可能會發生失敗。

請考慮保護自我裝載閘道,以防止中斷

提示

使用 Helm 安裝時,藉由啟用 highAvailability.enabled 組態選項,輕鬆地啟用高可用性排程。

深入了解如何 使用 Helm 在 Kubernetes 上安裝 APIM 自我裝載閘道

防止節點失敗

若要避免因資料中心或節點失敗而受到影響,請考慮以利用可用性區域的 Kubernetes 叢集,來達到節點層級的高可用性。

可用性區域可讓您使用下列方式,排程分散於區域的節點上的自我裝載閘道 Pod:

注意

如果您使用 Azure Kubernetes Service,請了解如何使用本文中的可用性區域。

防止 Pod 中斷

Pod 可能會因為各種原因而發生中斷,例如手動 Pod 刪除、節點維護等。

請考慮使用 Pod 中斷預算,強制在任何指定時間提供最少的 Pod 數目。

HTTP(S) Proxy

自我裝載閘道支援 HTTP(S) Proxy,方法是使用傳統 HTTP_PROXYHTTPS_PROXYNO_PROXY 環境變數。

設定之後,自我裝載閘道會自動針對後端服務的所有輸出 HTTP(S) 要求使用 Proxy。

從 2.1.5 版或更新版本開始,自我裝載閘道提供與要求 Proxy 相關的可檢視性:

  • 當使用 HTTP(S) Proxy 及其相關互動時,API 偵測器會顯示其他步驟。
  • 系統會提供詳細資訊記錄,以提供要求 Proxy 行為的指示。

注意

由於使用基本驗證的 HTTP Proxy 存在已知問題,因此不支援使用憑證撤銷清單 (CRL) 驗證。 請參閱自我裝載閘道設定參考 (英文),深入了解正確設定的方法。

警告

請確定已符合基礎結構需求,而且自我裝載閘道仍可與其連線,否則有些功能將無法正常運作。

本機記錄和計量

自我裝載閘道會根據相關聯 APIM 服務中的組態設定,將遙測傳送至 Azure 監視器Azure Application Insights。 當 Azure 的連線能力暫時遺失時,遙測到 Azure 的流程會中斷,且資料會在中斷期間遺失。

請考慮使用 Azure 監視器 Container Insights 來監視您的容器或 設定本機監視 ,以確保能夠觀察 API 流量,並防止 Azure 連線中斷期間遙測遺失。

Namespace

Kubernetes 命名空間可協助您分割多個團隊、專案或應用程式之中的單一叢集。 命名空間提供資源和名稱的範圍。 它們可以與資源配額和存取控制原則相關聯。

Azure 入口網站提供命令,以在預設命名空間中建立自我裝載閘道資源。 此命名空間會自動建立並存在於每個叢集中,且無法刪除。 請考慮在實際執行環境中建立和部署自我裝載閘道至個別的命名空間。

複本數目

適用於實際執行環境的複本數目下限為三個,最好結合執行個體的高可用排程

根據預設,自我裝載閘道會使用 RollingUpdate 部署策略來部署。 檢閱預設值,特別是當您使用高複本計數時,請考慮明確設定 maxUnavailablemaxSurge 欄位。

效能

我們建議將容器記錄縮減至警告 (warn) 以改善效能。 若要深入了解,請參閱我們的自我裝載閘道設定參考

要求節流

您可以使用 APIM rate-limitrate-limit-by-key 原則來啟用自我裝載閘道中的要求節流。 透過在 Kubernetes 部署中公開下列連接埠以進行執行個體探索,將速率限制計數設定為在叢集節點中的閘道執行個體之間同步:

  • 連接埠 4290 (UDP),用於速率限制同步處理
  • 連接埠 4291 (UDP),用於將活動訊號傳送至其他執行個體

注意

自我裝載閘道中的速率限制計數可以設定為在本機同步 (在叢集節點中的閘道執行個體之間),例如,透過適用於 Kubernetes 的 Helm 圖表部署或使用 Azure 入口網站部署範本。 不過,速率限制計數不會與 APIM 執行個體中設定的其他閘道資源 (包括雲端中的受控閘道) 同步。

安全性

自我裝載閘道能夠在 Kubernetes 中以非根目錄執行,讓客戶安全地執行網路閘道。

以下是自我裝載閘道容器的資訊安全內容範例:

securityContext:
  allowPrivilegeEscalation: false
  runAsNonRoot: true
  runAsUser: 1001       # This is a built-in user, but you can use any user ie 1000 as well
  runAsGroup: 2000      # This is just an example
  privileged: false
  capabilities:
    drop:
    - all

警告

不支援使用唯讀檔案系統 (readOnlyRootFilesystem: true) 執行自我裝載閘道。

警告

使用本機 CA 憑證時,自我裝載閘道必須以 1001 使用者識別碼 (UID) 執行,以管理 CA 憑證,否則閘道不會啟動。

下一步