在您的 Kubernetes 應用程式上啟用 Oracle Cloud Infrastructure Service Mesh
Oracle Cloud Infrastructure (OCI) 客戶已越來越轉向微服務架構,其優勢也帶來了新的挑戰。在微服務架構中,單體式應用程式分為使用 API 透過網路進行通訊的較小微服務。這會導致網路流量激增,並增加架構中的複雜性和整體攻擊面。
- 可讓您控制微服務流量。
- 提供應用程式的可見性。
- 讓微服務能夠安全地連線,無須變更應用程式程式碼。
OCI 服務網狀組織功能
- 強制實行安全相關的原則
OCI Service Mesh 使用存取原則定義存取規則。存取原則會強制執行微服務之間的通訊,並且只允許來自應用程式內部和外部的已驗證要求。存取原則也可用來定義允許的外部服務通訊。
- 零信任
OCI Service Mesh 會在所有微服務中自動實行零信任安全架構。微服務之間的資料會經過加密。通訊開始時需要微服務對微服務識別。雙方必須將憑證與其身分資訊交換。這可讓服務彼此識別,以判斷是否已獲授權進行互動。這透過使用 Oracle Cloud Infrastructure Certificates ( OCI Certificates) 服務及 Oracle Key Management Cloud Service 管理憑證和金鑰的自動憑證和金鑰輪換方式來實作。
- 流量轉移
OCI Service Mesh 可讓您進行金絲雀偵測部署。當您將新版本的程式碼發布到生產環境時,只允許部分流量連線。此功能可讓您快速部署,並對應用程式造成最不干擾。您可以定義管理網格內所有微服務間通訊的路由規則。您可以將部分流量遞送至特定版本的服務。
- 監督與記錄日誌
OCI Service Mesh 具有獨特的定位,可提供遙測資訊,因為所有微服務間的通訊都必須通過。這可讓服務網格擷取遙測資料,例如來源、目的地、協定、URL、持續時間、狀態代碼、延遲、記錄日誌以及其他詳細統計資料。您可以將記錄日誌資訊匯出至 Oracle Cloud Infrastructure Logging ( OCI Logging) 服務。OCI 服務網狀組織提供兩種類型的日誌:錯誤日誌和流量日誌。您可以使用這些日誌對 404 或 505 個問題進行除錯,或產生以日誌為基礎的統計資料。指標和遙測資料可以匯出到 Prometheus,並以 Grafana 視覺化。兩者都可以直接部署到 OKE 叢集。
架構
Oracle Cloud Infrastructure Service Mesh (OCI Service Mesh) 使用側邊欄模型。此架構封裝在將網路功能實作至網路代理伺服器的程式碼,然後依賴要重新導向至側邊欄代理伺服器之服務的流量。這稱為側邊欄,因為每個應用程式都附上代理伺服器,就像附加到機車的側邊欄一樣。在 OKE 中,應用程式容器會與相同 Pod 中的代理 Sidecar 容器旁邊。由於它們位於相同的 Pod 中,因此共用相同的網路命名空間和 IP 位址,讓容器能夠透過 "localhost" 進行通訊。
- 控制層
OCI 服務網狀組織控制層可管理及設定整個代理主機集合以遞送流量。它可處理遙測的轉送、狀況檢查、負載平衡、認證、授權和聚總。控制層會與 OCI 憑證服務和 OCI 金鑰管理服務互動,以提供每個代理主機及其憑證。
- 資料平面
資料層由環境中部署的側邊欄代理主機集合組成,負責應用程式的安全性、網路功能及可觀察性。他們也會收集並報告所有網狀流量的遙測。Envoy 代理主機用於 OCI Service Mesh 的資料層。
下圖說明此參考架構。
oci_service_mesh_oke_arch-oracle.zip
此參照架構顯示部署在 OKE 叢集中且有三項服務的應用程式。部署該應用程式的命名空間已經「網格化」。"meshified" 命名空間表示在命名空間內部署的服務將會是服務網狀組織的一部分,而每個部署的新 Pod 將會插入環境代理主機容器。在部署每個 Pod 時,組態和憑證會由 OCI 服務網狀組織控制層傳送至每個代理主機容器。OCI 服務網狀組織控制層會與 OCI 憑證服務和 Oracle Key Management Cloud Service 通訊,以取得每個代理主機的憑證。
系統會部署一個傳入閘道,以提供對應用程式的外部存取。傳入閘道是 OCI 服務網狀組織資料層的一部分,也是從 OCI 服務網狀組織控制層接收組態和憑證的環境代理主機。
代理容器需負責對目的地服務執行服務探索、流量加密和驗證。代理主機容器也會套用網路原則,例如流量在不同服務版本之間的分配方式,以及強制執行存取原則。傳入閘道對服務網格外的流量執行相同的功能。
Prometheus 和 Grafana 在 OKE 叢集內部署在非服務網狀組織一部分的個別命名空間中。服務網格資料層會將重要作業統計資料 (例如延遲、失敗、要求及遙測) 傳送至 Prometheus 部署。Grafana 從 Prometheus 部署提取資料,可用來建立視覺化儀表板。
OCI 服務網狀組織已與 OCI 日誌記錄服務整合,且建立服務網狀組織時可啟用日誌記錄。OCI 服務網狀組織提供兩種類型的日誌:錯誤日誌和流量日誌。這些日誌可用來對 404 或 505 個問題進行除錯,或產生以日誌為基礎的統計資料。
此架構具有下列 OCI 服務:
- OCI Kubernetes 引擎 (OKE)
提供高可用性且可擴展的生產環境就緒 Kubernetes 叢集,以在雲端部署您的容器化應用程式。
- 負載平衡器
提供對 OKE 叢集中傳入閘道的存取。此傳入會將流量導向 OKE 叢集中要求的服務。
- 憑證授權機構
管理 OCI 服務網狀組織服務的 TLS 憑證。
- 金鑰管理
管理憑證授權機構服務使用的金鑰。
架構具有下列元件:
- 地區
Oracle Cloud Infrastructure 區域是一個本地化地理區域,其中包含一或多個稱為可用性網域的資料中心。區域獨立於其他區域,而廣大的距離可以將其分開 (跨國家或大陸)。
- 虛擬雲端網路 (VCN) 和子網路
VCN 是您在 Oracle Cloud Infrastructure 區域中設定的可自訂軟體定義網路。與傳統的資料中心網路一樣,VCN 可讓您控制網路環境。VCN 可以有多個非重疊的 CIDR 區塊,您可以在建立 VCN 之後變更。您可以將 VCN 區隔成子網路,此子網路可以設定區域範圍或可用性網域。每個子網路都是由連續的位址範圍組成,這些位址不會與 VCN 中的其他子網路重疊。您可以在建立子網路後變更其大小。子網路可以是公用或專用。
- 安全清單
您可以為每個子網路建立安全規則,以指定必須允許進出子網路的來源、目的地和流量類型。
OCI 服務網狀組織資源
Kubernetes 資源 | 描述 |
網狀組織 | 最上層網格是應用程式中所有微服務的邏輯容器。 |
虛擬服務 | 虛擬服務是服務網狀組織中微服務的邏輯表示法。 |
虛擬部署 | 虛擬部署是可以分組為虛擬服務的部署邏輯表示法。這可讓虛擬服務在不同版本的微服務之間分配流量。Kubernetes 微服務可以有多個版本,這些版本是叢集中的個別部署。 |
虛擬部署連結 | 虛擬連結可用來將一組 Pod 與虛擬部署建立關聯。 |
虛擬服務路由表 | 虛擬路由表會根據協定和路徑,定義如何在虛擬服務中的虛擬部署之間分配流量。每個虛擬服務都會有一個虛擬路由表。 |
傳入閘道部署 | 傳入閘道部署將建立傳入 Pod,作為對網狀組織內送流量的負載平衡器。 |
傳入閘道 | 傳入閘道會管理進入網格的傳入流量。傳入閘道會定義一組規則,供外部流量如何與網狀組織通訊,例如是否需要對所有傳入和傳出流量進行加密。這些規則會套用至傳入閘道部署。 |
傳入閘道路由表 | 傳入閘道路由表與傳入閘道部署關聯。路由表定義可從傳入閘道部署存取網狀組織內的哪些虛擬服務。 |
存取原則 | 存取原則是一組規則,定義網狀組織中微服務與外部應用程式之間允許的通訊。 |
下圖說明設定的 OCI 服務網狀組織資源:將「存取原則」、「傳入閘道」、「虛擬服務」以及「虛擬部署」對應至您的應用程式資源:K8s 服務」、「K8s 服務負載平衡器」、「部署」以及 Pod。
建議
- VCN
建立 VCN 時,請根據您計畫附加到 VCN 子網路的資源數量,決定所需的 CIDR 區塊數量和每個區塊的大小。請使用標準專用 IP 位址空間內的 CIDR 區塊。
選取未與您要設定專用連線的任何其他網路重疊的 CIDR 區塊 (在 Oracle Cloud Infrastructure 中、您的內部部署資料中心或其他雲端提供者)。
建立 VCN 之後,您可以變更、新增及移除其 CIDR 區塊。
當您設計子網路時,請考慮流量和安全需求。將特定層或角色中的所有資源附加至相同的子網路,作為安全界限。
- 負載平衡器頻寬
建立負載平衡器時,您可以選取提供固定頻寬的預先定義資源配置,或指定自訂 (彈性) 資源配置,以便在其中設定頻寬範圍,並讓服務根據流量模式自動調整頻寬。只要採用任一方式,您就可以在建立負載平衡器之後隨時變更資源配置。
注意事項
建置此參照架構時,請考量下列選項。
- 成本
OKE 叢集上 OCI Service Mesh 的控制層不收取費用。客戶需支付服務網狀組織資料層代理主機容器的資源使用量費用。不過,實際上,客戶已經支付 OKE 叢集中節點集區的資源費用,除非代理容器的使用率將節點集區的使用率推送超過 100%,否則將 OCI 服務網格新增至您的微服務架構並不會收取額外費用。
- 使用狀態
OCI Service Mesh 的控制層一律部署高可用性。