日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
聊聊第三方注冊中心集成Istio

引言

公司往往有自己的注冊中心,有的使用Nacos、zookeeper等,還有自研的。這些在istio體系外的注冊中心需要融入網(wǎng)格體系,讓注冊中心以及配置中心事件通知到istio,進(jìn)而通過istio下發(fā)到數(shù)據(jù)面去。

我們提供的服務(wù)有:網(wǎng)站建設(shè)、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、鄖西ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的鄖西網(wǎng)站制作公司

第三方注冊中心集成到istio通常有三種做法:

  • 方式一 修改源碼實(shí)現(xiàn)serviceregistry.Instance接口適配到service controller
  • 方式二 通過自定義MCP Server,例如:Nacos提供了這部分實(shí)現(xiàn)
  • 方式三 將第三方注冊中心事件封裝成istio的ServiceEntry和WorkloadEntry資源寫入Kubernetes的api server

istiod收到監(jiān)聽后完成轉(zhuǎn)換

方式一需要修改istio源碼,重度耦合后續(xù)升級istio比較困難;方式二看著比較簡單卻調(diào)試比較困難給開發(fā)造成障礙;方式三從業(yè)界實(shí)踐來看采用的最為廣泛。

本文將分析第三種方式如何集成istio的,在此之前需要先走查下kubernetes的大體架構(gòu)。

一、k8s架構(gòu)簡述

架構(gòu)與概念

kube-apiserver: 與Kubernetes資源交互的入口,可以通過kubectl或者client-go其他語言類庫進(jìn)行訪問

kube-scheduler: 負(fù)責(zé)資源調(diào)度與計(jì)算,將Pod按照特定策略分發(fā)到計(jì)算節(jié)點(diǎn)

etcd: 鍵值存儲數(shù)據(jù)庫,保存Kubernetes集群相關(guān)數(shù)據(jù)

kube-controller-manager: 運(yùn)行一系列列控制器的組件,比如:節(jié)點(diǎn)控制器、任務(wù)控制器、端點(diǎn)控制器等

kubelete: 運(yùn)行在計(jì)算節(jié)點(diǎn)中,通過監(jiān)聽控制面接受指令,在節(jié)點(diǎn)內(nèi)執(zhí)行操作

kube-proxy: 運(yùn)行在計(jì)算節(jié)點(diǎn)的網(wǎng)絡(luò)代理,負(fù)責(zé)Pod內(nèi)外的網(wǎng)絡(luò)通信代理

Pods創(chuàng)建流程

  • 通過kubectl或者client-go類庫向kube-apiserver發(fā)起創(chuàng)建請求
  • kube-apiserver將請求信息持久化在etcd數(shù)據(jù)庫
  • kube-scheduler檢測到請求后,計(jì)算Pod應(yīng)該分配到哪個(gè)Node,并將分配策略寫入etcd數(shù)據(jù)庫
  • Kubelet檢測到etcd的分配策略后,執(zhí)行該策略調(diào)用docker相關(guān)api創(chuàng)建container

二、第三方注冊中心集成

架構(gòu)圖

轉(zhuǎn)換流程:

從注冊中心(Zookeeper)獲取變更事件,將其轉(zhuǎn)換為ServiceEntry寫入kube-apiserver;Istiod(Pilot)通過監(jiān)聽kube-apiserver收到ServiceEntry后經(jīng)過轉(zhuǎn)換通過xDS下發(fā)給數(shù)據(jù)面。

代碼說明

直接去寫比較耗時(shí),快速掌握的方式是參考別人已經(jīng)實(shí)現(xiàn)的,下面以社區(qū)項(xiàng)目dubbo2istio跟蹤其如何將zookeeper轉(zhuǎn)換的。

 
 
 
 
  1. https://github.com/aeraki-framework/dubbo2istio

另外,還用到了dubbo 示例中的dubbo-demo-api-provider,地址如下。

 
 
 
 
  1. https://github.com/apache/dubbo/tree/3.0/dubbo-demo/dubbo-demo-api/dubbo-demo-api-provider

分析過程為:

通過dubbo-demo-api-provider注冊節(jié)點(diǎn)到zookeeper注冊中心

通過跟蹤dubbo2istio代碼觀察其轉(zhuǎn)換邏輯并通過client-go類庫寫入kube-apiserver

通過相關(guān)命令驗(yàn)證其的確已經(jīng)寫入到kube-apiserver

轉(zhuǎn)換分析

**@1 ** 運(yùn)行服務(wù)提供者dubbo-demo-api-provider,讓其在注冊中心完成注冊。

@2 運(yùn)行dubbo2istio跟蹤其邏輯

@3 獲取zookeeper注冊的節(jié)點(diǎn)將其轉(zhuǎn)換為ServiceEntry,轉(zhuǎn)換使用的類庫為「istio.io/client-go」

@4 將轉(zhuǎn)換好的注冊信息寫入kube-apiserver,寫入成功無錯(cuò)誤返回

@5 再通過代碼查詢是否寫入成功,能夠查到說明寫入成功

@6 通過命令行查詢驗(yàn)證是否寫入到kube-apiserver

登陸istiod容器

 
 
 
 
  1. kubectl -n istio-system exec -it istiod-56f8cc6cb5-xkg4m -- /bin/bash

通過registryz命令查看

 
 
 
 
  1. curl http://127.0.0.1:15014/debug/registryz
  2. [
  3.  {
  4.         "Attributes": {
  5.             "ServiceRegistry": "External",
  6.             "Name": "org.apache.dubbo.demo.demoservice",
  7.             "Namespace": "dubbo",
  8.             "Labels": {
  9.                 "manager": "aeraki",
  10.                 "registry": "dubbo2istio"
  11.             },
  12.             "UID": "",
  13.             "ExportTo": null,
  14.             "LabelSelectors": null,
  15.             "ClusterExternalAddresses": null,
  16.             "ClusterExternalPorts": null
  17.         },
  18.         "ports": [
  19.             {
  20.                 "name": "tcp-dubbo",
  21.                 "port": 20880,
  22.                 "protocol": "TCP"
  23.             }
  24.         ],
  25.         "creationTime": "2021-09-10T09:58:18Z",
  26.         "hostname": "org.apache.dubbo.demo.demoservice",
  27.         "address": "0.0.0.0",
  28.         "autoAllocatedAddress": "240.240.0.5",
  29.         "Mutex": {},
  30.         "Resolution": 0,
  31.         "MeshExternal": false
  32.     },
  33.     // ....
  34. ]

 備注:可以在istio中查到服務(wù)提供者「org.apache.dubbo.demo.demoservice」即從zookeeper注冊中心成功將事件通過kube-apiserver通知到istio。

本文轉(zhuǎn)載自微信公眾號「瓜農(nóng)老梁」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系瓜農(nóng)老梁公眾號。


分享標(biāo)題:聊聊第三方注冊中心集成Istio
標(biāo)題鏈接:http://www.dlmjj.cn/article/dpgeigp.html