国产在线观看精品免费,亚洲日本VA久久一区二区,香蕉久久99综合一区二区三区,久久精品99国产精品蜜桃小说

如何將部署在VM中的服務(wù)納入Istio

2021-11-03 14:28:23 shuai.chang

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

睿智創(chuàng  )新RAIZ,一體化IT服務(wù)提供商
Istio1.6 新增了 WorkloadEntry 自定義資源,通過(guò)該資源為VM提供了一流的支持。
Istio1.7 增加了安全引導VM中運行的服務(wù)的身份的功能。最后,Istio 1.7增加了Sidecar的安裝包,以支持CentOS/Red Hat和現有的Debian/Ubuntu。
Istio1.8 新增了智能 DNS 代理,它是由 Go 編寫(xiě)的 Istio sidecar 代理,sidecar 上的 Istio agent 將附帶一個(gè)由 Istiod 動(dòng)態(tài)編程的緩存 DNS 代理。來(lái)自應用程序的 DNS 查詢(xún)會(huì )被 pod 或 VM 中的 Istio 代理透明地攔截和服務(wù),該代理會(huì )智能地響應 DNS 查詢(xún)請求,可以實(shí)現虛擬機到服務(wù)網(wǎng)格的無(wú)縫多集群訪(fǎng)問(wèn)。
并且Istio1.8新增了 WorkloadGroup 自定義資源,該資源是描述部署在VM上的服務(wù)實(shí)例的集合,旨在模仿現有的用于Kubernetes工作負載的Sidecar注入和Deployment規范模型,以引導Istio代理。
通過(guò) WorkloadGroup方式, 實(shí)現VM 實(shí)例自動(dòng)注冊的功能目前處于pre-alpha狀態(tài)

WorkloadEntry

WorkloadEntry用來(lái)描述非Pod的端點(diǎn),將VM納入mesh中。此時(shí)VM成為像Pod一樣的一等公民,可以配置MUTUAL_TLS。
要創(chuàng )建一個(gè)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
這將創(chuàng )建一個(gè)包含一組標簽和地址的新WorkloadEntry,以及一個(gè)使用WorkloadSelector選擇帶有所需標簽的所有端點(diǎn)的ServiceEntry,在這種情況下,包括為VM創(chuàng )建的WorkloadEntry。


睿智創(chuàng  )新RAIZ,一體化IT服務(wù)提供商


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

VM自動(dòng)注冊

WorkloadGroup主要用于 WorkloadEntry 自動(dòng)注冊,該功能在實(shí)際場(chǎng)景中比較實(shí)用。事實(shí)上我們部署在VM當中的服務(wù),一般都會(huì )配置自動(dòng)伸縮,這就要求我們的服務(wù)必須可以自動(dòng)注冊到mesh中。
如何實(shí)現自動(dòng)注冊那?
首先我們需要做一些準備工作:
  • 在安裝istiod的時(shí)候,啟用自動(dòng)注冊的功能。
$ istioctl install --set values.pilot.env.PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATION=true
  • 部署一個(gè)east-west gateway。用于暴露istiod服務(wù),從而可以讓VM上的Sidecar 可以和istiod 通信。
然后我們創(chuàng )建如下的 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
這樣我們在每個(gè)vm上python-http 實(shí)例啟動(dòng)后,都會(huì )自動(dòng)在mesh中創(chuàng )建一個(gè)WorkloadEntry。而創(chuàng )建的WorkloadEntry,包含了VM實(shí)例的ip和元數據。此時(shí)我們就可以創(chuàng )建一個(gè)ServiceEntry,通過(guò)標簽選擇器選擇我們的WorkloadEntry。然后mesh中的其他服務(wù)就可以通過(guò)ServiceEntry中的hosts, 對我們的python-http服務(wù)進(jìn)行訪(fǎng)問(wèn)。
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


睿智創(chuàng  )新RAIZ,一體化IT服務(wù)提供商


關(guān)于VM詳細的安裝步驟,參考官方文檔。

智能DNS

其實(shí)完成VM自動(dòng)注冊,并不能通過(guò)主機名實(shí)現虛擬機到服務(wù)網(wǎng)格的無(wú)縫訪(fǎng)問(wèn)。例如,如果我們在VM上部署Istio sidecar代理,我們將無(wú)法通過(guò)主機名(例如httpbin.default.svc.cluster.local)訪(fǎng)問(wèn)網(wǎng)格和Kubernetes集群中服務(wù)。此時(shí)我們需要智能DNS。
在Istio 1.8中,Sidecar現在具有一個(gè)DNS代理,該代理緩存網(wǎng)格中的端點(diǎn)和ServiceEntry資源創(chuàng )建的端點(diǎn)。通過(guò)Iptables規則,攔截dns請求到sidecar 本地dns server,在緩存中可以解析的主機名,則直接返回解析結果,如果找不到,它將作為普通DNS代理委派給系統DNS。這樣vm上的服務(wù)可以通過(guò)主機名訪(fǎng)問(wèn)mesh中的服務(wù)。


睿智創(chuàng  )新RAIZ,一體化IT服務(wù)提供商


智能DNS 默認沒(méi)有啟用,我們在安裝istio的時(shí)候,可以通過(guò)如下參數啟用該功能:
--set meshConfig.defaultConfig.proxyMetadata.ISTIO_META_DNS_CAPTURE=true
總結
當VM連接到Istio控制平面時(shí),它通過(guò)“東西向網(wǎng)關(guān)”進(jìn)行連接。該網(wǎng)關(guān)實(shí)際上只是一個(gè)專(zhuān)門(mén)為網(wǎng)格內部流量指定的Istio網(wǎng)關(guān),現在,東西向網(wǎng)關(guān)已經(jīng)是Istio 1.8中的推薦部署。一旦從VM Sidecar到Istio控制平面建立了連接,便會(huì )創(chuàng )建適當的WorkloadEntry資源,并使VM Sidecar可以解析集群中的所有服務(wù)。從VM上部署服務(wù)可以直接訪(fǎng)問(wèn)httpbin.default.svc.cluster.local。DNS名稱(chēng)由代理解析,并通過(guò)“東西方網(wǎng)關(guān)”路由到網(wǎng)格中的適當服務(wù)。


睿智創(chuàng  )新RAIZ,一體化IT服務(wù)提供商




我要咨詢(xún)
镇原县| 锦州市| 宣恩县| 石河子市| 尚义县| 清水县| 新津县| 连山| 沂南县| 昭苏县| 分宜县| 中卫市| 金乡县| 德令哈市| 华安县| 天峨县| 怀来县| 夏津县| 安化县| 堆龙德庆县| 张家界市| 山丹县| 滕州市| 嘉善县| 晴隆县| 西昌市| 阳原县| 英超| 工布江达县| 吴堡县| 荔浦县| 烟台市| 彰化市| 将乐县| 青铜峡市| 定南县| 和硕县| 砀山县| 崇州市| 张掖市| 固阳县|