久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何將部署在VM中的服務納入Istio

197次閱讀
沒有評論

共計 3124 個字符,預計需要花費 8 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關如何將部署在 VM 中的服務納入 Istio,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Istio 在設計之初,主要面向 Kubernetes 當中的服務。但是在實際場景中,依舊有不少服務部署在 VM 上,Istio 想成為 Service Mesh 事實上的標準,毫無疑問需要支持 VM 部署的服務。

Istio1.6 新增了 WorkloadEntry 自定義資源,通過該資源為 VM 提供了一流的支持。

Istio1.7 增加了安全引導 VM 中運行的服務的身份的功能。最后,Istio 1.7 增加了 Sidecar 的安裝包,以支持 CentOS/Red Hat 和現有的 Debian/Ubuntu。

Istio1.8 新增了智能 DNS 代理,它是由 Go 編寫的 Istio sidecar 代理,sidecar 上的 Istio agent 將附帶一個由 Istiod 動態編程的緩存 DNS 代理。來自應用程序的 DNS 查詢會被 pod 或 VM 中的 Istio 代理透明地攔截和服務,該代理會智能地響應 DNS 查詢請求,可以實現虛擬機到服務網格的無縫多集群訪問。

并且 Istio1.8 新增了 WorkloadGroup 自定義資源,該資源是描述部署在 VM 上的服務實例的集合,旨在模仿現有的用于 Kubernetes 工作負載的 Sidecar 注入和 Deployment 規范模型,以引導 Istio 代理。

通過  WorkloadGroup 方式,實現 VM 實例自動注冊的功能目前處于 pre-alpha 狀態

WorkloadEntry

WorkloadEntry 用來描述非 Pod 的端點,將 VM 納入 mesh 中。此時 VM 成為像 Pod 一樣的一等公民,可以配置 MUTUAL_TLS。

要創建一個 WorkloadEntry 并將其附加到 ServiceEntry,執行以下操作:

apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
 name: vm1
 namespace: ns1
spec:
 address: 1.1.1.1
 labels:
   app: foo
   instance-id: vm-78ad2
   class: vm
---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
 name: svc1
 namespace: ns1
spec:
 hosts:
 - svc1.internal.com
 ports:
 - number: 80
   name: http
   protocol: HTTP
 resolution: STATIC
 workloadSelector:
   labels:
     app: foo

這將創建一個包含一組標簽和地址的新 WorkloadEntry,以及一個使用 WorkloadSelector 選擇帶有所需標簽的所有端點的 ServiceEntry,在這種情況下,包括為 VM 創建的 WorkloadEntry。

請注意,ServiceEntry 可以使用相同的選擇器引用 Pod 和 WorkloadEntries?,F在,Istio 可以對 VM 和 Pod 進行相同的處理,而不必將它們分開。

VM 自動注冊

WorkloadGroup 主要用于 WorkloadEntry 自動注冊,該功能在實際場景中比較實用。事實上我們部署在 VM 當中的服務,一般都會配置自動伸縮,這就要求我們的服務必須可以自動注冊到 mesh 中。

如何實現自動注冊那?

首先我們需要做一些準備工作:

在安裝 istiod 的時候,啟用自動注冊的功能。

$ istioctl install --set values.pilot.env.PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATION=true

部署一個 east-west gateway。用于暴露 istiod 服務,從而可以讓 VM 上的 Sidecar 可以和 istiod 通信。

然后我們創建如下的 WorkloadGroup:

apiVersion: networking.istio.io/v1alpha3
kind: WorkloadGroup
metadata:
 name: python-http
 namespace: vm
spec:
 metadata:
   annotations: {}
   labels:
     app: python-http
 template:
   ports: {}
   serviceAccount: my-vm

這樣我們在每個 vm 上 python-http 實例啟動后,都會自動在 mesh 中創建一個 WorkloadEntry。而創建的 WorkloadEntry,包含了 VM 實例的 ip 和元數據。此時我們就可以創建一個 ServiceEntry,通過標簽選擇器選擇我們的 WorkloadEntry。然后 mesh 中的其他服務就可以通過 ServiceEntry 中的 hosts,對我們的 python-http 服務進行訪問。

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
 name: vm-workload-svc
 namespace: vm
spec:
 hosts:
 - vmservice.example.com
 location: MESH_INTERNAL
 ports:
 - number: 80
   name: http
   protocol: HTTP
   targetPort: 9090
 resolution: STATIC
 workloadSelector:
   labels:
     app: python-http

關于 VM 詳細的安裝步驟,參考官方文檔。

智能 DNS

其實完成 VM 自動注冊,并不能通過主機名實現虛擬機到服務網格的無縫訪問。例如,如果我們在 VM 上部署 Istio sidecar 代理,我們將無法通過主機名(例如 httpbin.default.svc.cluster.local)訪問網格和 Kubernetes 集群中服務。此時我們需要智能 DNS。

在 Istio 1.8 中,Sidecar 現在具有一個 DNS 代理,該代理緩存網格中的端點和 ServiceEntry 資源創建的端點。通過 Iptables 規則,攔截 dns 請求到 sidecar 本地 dns server,在緩存中可以解析的主機名,則直接返回解析結果,如果找不到,它將作為普通 DNS 代理委派給系統 DNS。這樣 vm 上的服務可以通過主機名訪問 mesh 中的服務。

智能 DNS 默認沒有啟用,我們在安裝 istio 的時候,可以通過如下參數啟用該功能:

--set meshConfig.defaultConfig.proxyMetadata.ISTIO_META_DNS_CAPTURE=true

當 VM 連接到 Istio 控制平面時,它通過“東西向網關”進行連接。該網關實際上只是一個專門為網格內部流量指定的 Istio 網關,現在,東西向網關已經是 Istio 1.8 中的推薦部署。一旦從 VM Sidecar 到 Istio 控制平面建立了連接,便會創建適當的 WorkloadEntry 資源,并使 VM Sidecar 可以解析集群中的所有服務。從 VM 上部署服務可以直接訪問 httpbin.default.svc.cluster.local。DNS 名稱由代理解析,并通過“東西方網關”路由到網格中的適當服務。

上述就是丸趣 TV 小編為大家分享的如何將部署在 VM 中的服務納入 Istio 了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計3124字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 称多县| 遂溪县| 铁力市| 合川市| 辽中县| 铅山县| 奉节县| 那坡县| 阿荣旗| 宜君县| 阜宁县| 敖汉旗| 沂南县| 尼勒克县| 弥勒县| 鄂伦春自治旗| 搜索| 汉沽区| 西乌珠穆沁旗| 如东县| 黎平县| 桓台县| 盘山县| 瑞金市| 南京市| 林州市| 杂多县| 西吉县| 搜索| 延长县| 莒南县| 阿尔山市| 抚宁县| 宾川县| 都昌县| 宿松县| 霍城县| 仁寿县| 黄平县| 张家川| 呼玛县|