虛擬機器架構

在閱讀本文檔之前,請務必先複習 Istio 的架構部署模型。本頁將建立在這些文件的基礎上,說明如何擴展 Istio 以支援將虛擬機器加入網格。

Istio 的虛擬機器支援允許將 Kubernetes 叢集之外的工作負載連接到網格。這使得傳統應用程式或不適合在容器化環境中執行的應用程式,也能獲得 Istio 為 Kubernetes 內部應用程式提供的所有優點。

對於在 Kubernetes 上運行的工作負載,Kubernetes 平台本身提供了各種功能,例如服務發現、DNS 解析和健康檢查,這些功能在虛擬機器環境中通常是缺失的。Istio 為在虛擬機器上運行的工作負載啟用了這些功能,此外,還允許這些工作負載使用 Istio 的功能,例如相互 TLS (mTLS)、豐富的遙測和進階流量管理功能。

下圖顯示了具有虛擬機器的網格架構

在此網格中,存在一個單一網路,其中 Pod 和虛擬機器可以直接相互通信。

控制平面流量,包括 XDS 組態和憑證簽署,將通過叢集中的閘道發送。這確保了虛擬機器在啟動時擁有穩定的連接位址。Pod 和虛擬機器可以直接相互通信,而無需任何中間閘道。

A service mesh with a single network and virtual machines
具有單一網路和虛擬機器的服務網格

服務關聯

Istio 提供了兩種機制來表示虛擬機器工作負載

  • WorkloadGroup 表示共享共同屬性的虛擬機器工作負載的邏輯群組。這類似於 Kubernetes 中的 Deployment
  • WorkloadEntry 表示虛擬機器工作負載的單一實例。這類似於 Kubernetes 中的 Pod

建立這些資源(WorkloadGroupWorkloadEntry)不會導致佈建任何資源或執行任何虛擬機器工作負載。相反,這些資源僅引用這些工作負載,並告知 Istio 如何適當設定網格。

將虛擬機器工作負載添加到網格時,您需要建立一個 WorkloadGroup,作為每個 WorkloadEntry 實例的範本

apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
  name: product-vm
spec:
  metadata:
    labels:
      app: product
  template:
    serviceAccount: default
  probe:
    httpGet:
      port: 8080

一旦虛擬機器被設定並加入網格,Istio 控制平面將會自動建立對應的 WorkloadEntry。例如

apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  annotations:
    istio.io/autoRegistrationGroup: product-vm
  labels:
    app: product
  name: product-vm-1.2.3.4
spec:
  address: 1.2.3.4
  labels:
    app: product
  serviceAccount: default

WorkloadEntry 資源描述了工作負載的單一實例,類似於 Kubernetes 中的 Pod。當工作負載從網格中移除時,WorkloadEntry 資源將會被自動移除。此外,如果在 WorkloadGroup 資源中設定了任何探針,Istio 控制平面將會自動更新相關聯的 WorkloadEntry 實例的健康狀態。

為了讓消費者能夠可靠地呼叫您的工作負載,建議您宣告一個 Service 關聯。這允許客戶端可以透過穩定的主機名稱 (例如 product.default.svc.cluster.local) 連線,而不是暫時的 IP 位址。這也使您能夠透過 DestinationRuleVirtualService API 在 Istio 中使用進階路由功能。

任何 Kubernetes 服務都可以透過選擇器欄位透明地選取 Pod 和虛擬機器中的工作負載,這些欄位會分別與 Pod 和 WorkloadEntry 標籤進行比對。

例如,名為 productService 由一個 Pod 和一個 WorkloadEntry 組成

Service Selection

透過此組態,對 product 的請求將會在 Pod 和虛擬機器工作負載實例之間進行負載平衡。

DNS

Kubernetes 在 Pod 中為 Service 名稱提供 DNS 解析,讓 Pod 可以透過穩定的主機名稱輕鬆地相互通信。

對於虛擬機器擴充,Istio 透過 DNS Proxy 提供類似的功能。此功能會將虛擬機器工作負載的所有 DNS 查詢重新導向到 Istio 代理,Istio 代理會維護主機名稱到 IP 位址的對應。

因此,在虛擬機器上運行的工作負載可以透明地呼叫 Service (類似於 Pod),而無需任何額外的組態。

此資訊是否有用?
您是否有任何改進建議?

感謝您的回饋!