工作負載條目

WorkloadEntry 可讓運算子描述單一非 Kubernetes 工作負載 (例如 VM 或裸機伺服器) 在載入網格時的屬性。WorkloadEntry 必須搭配 Istio ServiceEntry,後者會透過適當的標籤選取工作負載,並為 MESH_INTERNAL 服務 (主機名稱、連接埠屬性等) 提供服務定義。ServiceEntry 物件可以根據服務條目中指定的標籤選取器,選取多個工作負載條目以及 Kubernetes Pod。

當工作負載連線至 istiod 時,自訂資源中的狀態欄位將會更新,以指出工作負載的健全狀況和其他詳細資訊,類似於 Kubernetes 如何更新 Pod 的狀態。

以下範例宣告一個工作負載條目,代表 details.bookinfo.com 服務的 VM。此 VM 已安裝 Sidecar,並使用 details-legacy 服務帳戶啟動。該服務在連接埠 80 上公開給網格中的應用程式。此服務的 HTTP 流量會封裝在 Istio 相互 TLS 中,並傳送到 VM 上目標連接埠 8080 上的 Sidecar,然後再將其轉送到相同連接埠上 localhost 的應用程式。

apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  name: details-svc
spec:
  # use of the service account indicates that the workload has a
  # sidecar proxy bootstrapped with this service account. Pods with
  # sidecars will automatically communicate with the workload using
  # istio mutual TLS.
  serviceAccount: details-legacy
  address: 2.2.2.2
  labels:
    app: details-legacy
    instance-id: vm1

以及關聯的服務條目

apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: details-svc
spec:
  hosts:
  - details.bookinfo.com
  location: MESH_INTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
    targetPort: 8080
  resolution: STATIC
  workloadSelector:
    labels:
      app: details-legacy

以下範例使用完整合格的 DNS 名稱宣告相同的 VM 工作負載。服務條目的解析模式應變更為 DNS,以指示客戶端 Sidecar 應在執行時動態解析 DNS 名稱,然後再轉發請求。

apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  name: details-svc
spec:
  # use of the service account indicates that the workload has a
  # sidecar proxy bootstrapped with this service account. Pods with
  # sidecars will automatically communicate with the workload using
  # istio mutual TLS.
  serviceAccount: details-legacy
  address: vm1.vpc01.corp.net
  labels:
    app: details-legacy
    instance-id: vm1

以及關聯的服務條目

apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: details-svc
spec:
  hosts:
  - details.bookinfo.com
  location: MESH_INTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
    targetPort: 8080
  resolution: DNS
  workloadSelector:
    labels:
      app: details-legacy

以下範例宣告一個沒有位址的 VM 工作負載。除了讓 istiod 從遠端 API 伺服器讀取之外,另一種替代方法是在本機叢集中寫入一個 WorkloadEntry,以表示遠端網路中具有指定標籤的工作負載。具有權重的單一 WorkloadEntry 代表給定遠端網路中所有實際工作負載的總和。

apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  name: foo-workloads-cluster-2
spec:
  serviceAccount: foo
  network: cluster-2-network
  labels:
    app: foo

工作負載條目

WorkloadEntry 可讓您指定單個非 Kubernetes 工作負載的屬性,例如 VM 或裸機服務,這些工作負載可由服務條目引用。

欄位類型描述必要
addressstring

與不含連接埠的網路端點相關聯的位址。網域名稱只有在解析設定為 DNS 時才可以使用,而且必須是完整合格的,不得包含萬用字元。針對 Unix 網域通訊端端點,請使用 unix:///absolute/path/to/socket 形式。如果 address 為空,則必須指定網路。

portsmap<string, uint32>

與端點相關聯的連接埠集合。如果指定了連接埠對應,則它必須是 servicePortName 對應到此端點連接埠的映射,以便將前往服務連接埠的流量轉發到對應到服務 portName 的端點連接埠。如果省略此項,並且 targetPort 指定為服務連接埠規格的一部分,則前往服務連接埠的流量將轉發到指定 targetPort 上的一個端點。如果 targetPort 和端點連接埠對應都未指定,則前往服務連接埠的流量將轉發到同一連接埠上的一個端點。

注意 1: 不要用於 unix:// 位址。

注意 2: 端點連接埠對應優先於 targetPort。

labelsmap<string, string>

與端點相關聯的一個或多個標籤。

networkstring

網路可讓 Istio 將位於相同 L3 網域/網路中的端點分組。假設同一網路中的所有端點都可以彼此直接連線。當不同網路中的端點無法直接彼此連線時,可以使用 Istio 閘道來建立連線(通常在閘道伺服器中使用 AUTO_PASSTHROUGH 模式)。這是一個進階設定,通常用於跨多個叢集擴展 Istio 網格。如果未提供位址,則為必要項目。

localitystring

與端點相關聯的地域性。地域性對應於故障網域(例如,國家/地區/區域)。可以透過用 / 分隔每個封裝的故障網域來表示任意的故障網域階層。例如,位於美國、美國東部 1 區、可用性區域 az-1、資料中心機架 r11 中的端點的地域性可以表示為 us/us-east-1/az-1/r11。Istio 會將 Sidecar 設定為路由到與 Sidecar 相同地域性內的端點。如果地域性中沒有任何端點可用,則將選擇父地域性(但在相同的網路 ID 內)的端點。例如,如果同一網路(網路 ID「n1」)中有兩個端點,例如地域性為 us/us-east-1/az-1/r11 的 e1 和地域性為 us/us-east-1/az-2/r12 的 e2,則來自 us/us-east-1/az-1/r11 地域性的 Sidecar 將優先選擇同一地域性的 e1,而不是來自不同地域性的 e2。端點 e2 可能是與閘道(橋接網路 n1 和 n2)相關聯的 IP,或與標準服務端點相關聯的 IP。

weightuint32

與端點相關聯的負載平衡權重。權重較高的端點將接收較多的流量。

serviceAccountstring

如果工作負載中存在 Sidecar,則與工作負載相關聯的服務帳戶。服務帳戶必須與組態(WorkloadEntry 或 ServiceEntry)位於相同的命名空間中

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

感謝您的回饋!