一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

采用Apache APISIX實現自動化運維平臺架構的應用

jf_ro2CN3Fa ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-11-06 19:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

項目背景

2019 年底,因為公司在業(yè)務研發(fā)的過程中,遇到了一些業(yè)務痛點,比如:公司的開發(fā)技術棧是 Java 相關的,而運維工程師擅長的則是 Shell 和 Python 腳本,無法直接對接;公司本身正處于快速增長期,開發(fā)工程師人力不足,無法支援日常的運維工作及運維平臺的開發(fā);在現有的運維平臺中,使用了多種開源工具,而且沒有整合,較難管理。因此我發(fā)起了自動化運維平臺的項目,希望通過該運維平臺實現快速上手的開發(fā)模型,可以實現運維工程師自己開發(fā)業(yè)務,并進行快速的迭代服務。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

為什么選擇 Apache APISIX

在進行網關選型時,我們進行了實際的測試。相對于其他網關,APISIX 基本上可以達到 NGINX 90% 的功能,并且支持了多種負載均衡策略以及支持多語言插件的機制,同時支持了軟 WAF,可以覆蓋我們95% 的安全業(yè)務場景。作為云原生 API 網關,APISIX 也提供了強大的日志功能,支持自定義日志格式,因此可以直接讓 access log 對接 ELK。由于 APISIX 也支持自定義插件的開發(fā),可以根據我們的需求靈活擴展。得益于 APISIX 的基礎功能和強大的插件體系,可以有效降低開發(fā)成本。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

自動化運維平臺架構

自動化運維平臺整體架構圖如下:

ae116a4a-5d7b-11ed-a3b6-dac502259ad0.png

存儲層:核心是 CMDB,主要功能是記錄和管理組織業(yè)務和 IT 資源的屬性,以及其它們之間的關系。不但負責所有業(yè)務變更的起始狀態(tài)查詢,而且所有的業(yè)務資源的變更都要反饋記錄在其中,實現業(yè)務標準規(guī)范的管控。存儲層也包含一些權限管理的數據、業(yè)務工單的流轉數據以及監(jiān)控告警的時序數據;

公共基礎服務層:提供原子業(yè)務的 API,也可以認為是基礎中臺,復用了大量的開源工具;

業(yè)務編排層:需要根據實際業(yè)務進行設計,工程師的工作就是把原子業(yè)務 API 按需求進行報文適配、流程組合、數據讀寫,并打包成為接口供前端調用;

網關層:APISIX 所在的層,是后臺服務的業(yè)務邊界,負責負載均衡、服務注冊與發(fā)現、用戶鑒權、基礎網絡報文數據轉碼、內外交互日志的統一記錄、部分安全管控等等。與業(yè)務無關并且通用的服務統一放置到本層;

展示層:從用戶角度出發(fā),設計便利的交互界面。此處使用了一個開源的前端全響應式 admin 網頁模板,即使開發(fā)者(運維)不熟悉 JavaScript ,也可以自己實現基本的表單和報表。

平臺使用的組件

核心網關 Apache APISIX:主要負責日志記錄、網絡安全以及負載均衡。另外我們不但通過自定義插件實現了高級業(yè)務網關的部分功能,而且還通過 API 能方便的和其他服務整合,快速實現各種指定功能,有效降低開發(fā)成本;

API 管理工具 YAPI:負責對接口的規(guī)范定義,測試用例編寫和作為 ACL 的數據源;

訪問控制組件 Casbin:輕量級、多模式、強范式的跨語言開源訪問控制框架,我們使用的是基于RESTful 的 PyCasbin;

數據存儲:MySQL 5.7;

自研 Web 框架 mug-skeleton:使用自研的 Web 框架,主要是為了更深層次的技術控制能力。

對接的第三方平臺相關組件

CMDB(自研):在開源的 CMDBuild 外包了一層 RESTful 的 API,方便交互;

OpenLDAP:用于用戶的賬號驗證,不負責鑒權;

工作流 Activiti:使用官方的 RestAPI 服務,由于是處于在網關后方,因此不需要考慮安全問題。

業(yè)務場景

用戶登錄及權限驗證

對于所有的 Web 框架,用戶登錄是一個必選項,接下來我將為大家介紹此場景。

ae9608b8-5d7b-11ed-a3b6-dac502259ad0.png

首先,我們需要了解下場景中,我們的使用的相關組件,第一個就是訪問的前端,這個是在網關之外的,其次使用 APISIX 云原生 API 網關作為業(yè)務邊界。再之后的 Auth 服務,它是自定義開發(fā)的微服務,作用是校驗前端的 URL 請求和用戶登錄請求,并對通過認證的用戶發(fā)放 Token。LDAP 中存放的是公司內部的密碼信息。CMDB 存儲的是一些業(yè)務的相關信息,包括組織結構,可以訪問的權限的一些組織信息,最后是前端需要訪問的頁面。

了解完以上組件后,接下來,為大家介紹整體流程:

用戶登錄的時候,首先需要通過網關查詢,訪問的頁面是否在白名單中。因為部分頁面是不需要權限驗證的,比如:默認頁面或者一些錯誤頁面。如果訪問的頁面是需要驗證登錄的,那么這些請求就會通過相關插件,轉發(fā)到權限認證服務。

在權限認證中,鑒權服務會根據傳入的“用戶名”和“密碼”,從 LDAP 中查詢賬號是否正確。如果正確,就會通過 CMDB 查詢該用戶是屬于哪個組織、可以查看哪些功能模塊;得到結果后,使用 APISIX 的 JWT 插件,根據用戶信息生成一個 Token,并添加過期時間,返回給前端;用戶通過 Cookie 的方式進行Token存儲。該用戶后續(xù)如果繼續(xù)訪問,網關會從 Cookie 中把之前存儲的 Token 調出來,驗證當前用戶是否可以繼續(xù)訪問后面的頁面。

在這里,我們使用了 APISIX 的 consumer-restriction 插件,上述所講的權限認證,實際上就是通過 consumer-restriction 插件來完成的,不需要我們在后臺多次反復認證。

通過上述的描述,相信大家已經對正常的請求流程有了一定的理解,接下來將為大家介紹下如何判斷這些用戶權限不足的場景。在運維平臺中,如果有涉及到數據變更的操作,必須要攜帶 Token,當這個 Token 被 ACL 的接口驗證無權訪問后,就會直接返回一個禁止訪問的頁面,讓前端進行處理。以下是用戶登錄及權限驗證場景的具體流程和其中更使用的相關組件。

aee07632-5d7b-11ed-a3b6-dac502259ad0.png

新業(yè)務微服務接入

af17f86e-5d7b-11ed-a3b6-dac502259ad0.png

在日常工作,我們經常會上線一些微服務,那么如何讓這個微服務接入自動化運維平臺呢?

我們內部會規(guī)定無論工程師使用哪種語言開發(fā)微服務,都需要使用 YAPI 對 API 進行定義。因此 YAPI 對我們所有可訪問的那些 URL 進行管控,統一一個入口在這邊。因為 YAPI 支持定義各種環(huán)境,所以我們在 YAPI 中定義了不同運行環(huán)境。最典型的示例就是:在生產環(huán)境中,我們會使用域名訪問;而在開發(fā)環(huán)境,就直接使用 127.0.0.1 進行訪問。完成 YAPI 的定義后,它就可以通過 mock 的方式,生成一系列請求用例,非常有利于后續(xù)進行生產環(huán)境的測試。所有的微服務接口,都可以通過 HTTP 請求的方式進行 mock 調用。

接下來,就是權限管理服務,這里所有的操作都是自動的:它會從 YAPI 中讀取 API 的定義,然后生成一系列的 ACL 規(guī)則。對于權限的管理,我們在平臺中使用了一個管理頁面:管理員可以通過該頁面管理 URL 的訪問規(guī)則,設置完成后,表單數據就會變更為一系列的 ACL 權限定義,存入數據庫中。在服務啟動的過程中,平臺使用的 cachebin 的訪問模型就會直接從數據庫中,把這些規(guī)則加載到內存里,然后生成一系列 APISIX 的 Consumer 的定義及路由表,寫入 APISIX 的 etcd 中。完成上述操作后,當用戶訪問的時候,平臺就可以直接通過 APISIX 進行一個權限管理。

該模型不但適用于自動化運維平臺,也同樣適用于各種中小型業(yè)務體系。

技術細節(jié)

通過上述的場景描述,相信大家已經對整套體系有了大概的認識,接下來為大家介紹下部分技術細節(jié)。

af42f884-5d7b-11ed-a3b6-dac502259ad0.png

因為 APISIX 是基于 NGINX + Lua 實現的,所以部分功能需要通過 NGINX 的庫來實現。從上圖中,我們可以看到各種 Lua 腳本可以在哪些點切入到 NGINX 當中。在本文中,主要是為大家介紹 Rewrite/Access 以及 Content 階段可以進行的操作。

因為在 Rewrite/Access 階段,報文還沒有轉給 Upstream,所以可以在該階段進行各種各樣的數據預處理。從上圖中我們可以看到有個 access_by_lua,在該階段,可以使用 deny 命令進行權限的管理,包括接口權限以及 IP 準入白名單都可以在該階段實現。后文所介紹的 acl_plugin.lua 的插件就是在該階段實現的。

其次在 header_filter_by_lua 這個階段,常用于在請求訪問時,額外的在 HTTP 請求頭插入一些 key:value,供后續(xù)使用。例如,當需要我們線上灰度發(fā)布時,就可以在用戶的請求頭中加入標志位,通過這些標志位,就可以控制這些請求轉發(fā)哪些后端服務,從而實現灰度發(fā)布。當然我們也可以使用 APISIX 的 traffic-split 插件實現灰度發(fā)布。

最后就是 log_by_lua 階段,在該階段,我們可以把一些 trace 信息或者一些故障信息可以直接輸入到 log 文件中。同樣的,針對 Loggers,APISIX 也提供了非常多的插件,包括 skywalking-logger、kafka-logger、rocketmq-logger 等等。

自定義插件 acl-plugin.lua

acl-plugin.lua 插件的實現非常簡單。首先當用戶在請求的過程中,我們會給用戶添加相關的 JWT token 存儲在 cookie 里面,之后該用戶會從訪問的 cookie 中提取 JWT token,然后對該 token進行解碼并獲取用戶信息。

在 Rewrite 階段,通過使用用戶 ID、method及 URI,向后臺 ACL 接口發(fā)起請求進行權限驗證。如果通過了,就會把相關信息記錄到 log 中,供以后的安全認證使用。如果失敗了,就直接返回一個錯誤狀態(tài)碼并記錄到 error log 中。

在 APISIX 1.1 版本中,當時 cors 插件還沒有發(fā)布,因此對于跨域請求,我們也是通過該插件進行實現,當請求使用 GET 和 POST 的請求方法時,會進行相關的處理。如果是其他請求,則會直接通過,而現在可以直接使用 APISIX 的 cors 插件實現。APISIX 現在也可以使用多種語言進行插件的開發(fā), 不僅僅是 Lua,詳細信息可參考:https://apisix.apache.org/zh/docs/apisix/plugin-develop%E3%80%82

Auth 服務

Auth 服務是與 acl-plugin.lua 插件配套的認證服務。該服務實現的功能非常簡單,主要是讀取請求報文中的信息,然后解碼出所需的認證元素,之后再把它轉發(fā)到相關的服務接口中。服務接口會根據認證信息返回相應的結果,APISIX 會根據結果拒絕或通過該請求。

Auth 服務中最核心的功能就是從數據庫中把 ACL 規(guī)則加載到內存里面。主要功能分為兩部分:

首先 account 接口。該接口主要作用就是:用戶訪問的時候,如果需要權限認證,則會通過向 LDAP 服務發(fā)送用戶的相關信息,進行認證。如果認證通過,則會從 CMDB 中查詢出用戶可訪問的相關信息,然后和用戶角色、過期時間等元素,一起組成 JWT Token,并生成一個 Cookie 返回給用戶,并且同時把該用戶信息在 APISIX 中注冊一個 Consumer 。該接口還實現了一個 acl_check 的功能,負責對用戶認證信息驗證,判斷該認證是成功還是失敗。

其次是 yapi 接口。該接口的主要作用是與 YAPI 進行交互。因為 YAPI 中有一個是供項目訪問的token,帶著這個 token,就可以讀取到這個項目所有的 API定義。因此該接口的主要功能,就是從 YAPI 中讀取 API 的 HTTP 接口定義,存儲到數據庫中,然后和權限管理的頁面進行一個表單交互,組合成 ACL 表,最后生成一系列 Casbin 的規(guī)則存到數據庫中。

總結

以上就是同程數科基于 Apache APISIX 的自動化運維平臺的架構及部分場景的介紹?,F在,APISIX 的功能越來越強大,已經支持使用 Wasm 和 Python 進行插件開發(fā)。Apache APISIX 的生態(tài)也非常強大,如果大家有任何問題歡迎到社區(qū)中進行交流討論。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    2989

    瀏覽量

    109576
  • python
    +關注

    關注

    56

    文章

    4827

    瀏覽量

    86700

原文標題:基于 Apache APISIX 的自動化運維平臺

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    自動化工具Terraform和Ansible的區(qū)別

    在現代云原生時代,基礎設施即代碼(Infrastructure as Code,IaC)已成為工程師的核心技能。面對復雜的多云環(huán)境和日益增長的基礎設施需求,傳統的手動配置方式已無法滿足快速、可靠
    的頭像 發(fā)表于 07-09 09:59 ?177次閱讀

    AI集成管理平臺架構與核心構成解析

    (Artificial Intelligence for IT Operations)概念,指出通過整合大數據和機器學習能力,可以實現IT管理的智能升級。 AI集成
    的頭像 發(fā)表于 06-12 17:04 ?193次閱讀

    光伏管理系統架構設計及其應用分析

    數據監(jiān)測、故障診斷、任務管理以及設備信息管理等,這些是光伏管理中的重點內容,一款專業(yè)的綜合性管理平臺,需要集成上述多種功能,才能
    的頭像 發(fā)表于 06-10 11:34 ?209次閱讀
    光伏<b class='flag-5'>運</b><b class='flag-5'>維</b>管理系統<b class='flag-5'>架構</b>設計及其應用分析

    工業(yè)物聯網平臺能夠實現設備管理嗎

    工業(yè)物聯網平臺能夠實現設備管理,且是其核心功能之一。工業(yè)物聯網平臺通過連接設備、采集數據、分析數據并提供管理工具,為企業(yè)提供從設備監(jiān)控到
    的頭像 發(fā)表于 05-29 17:46 ?188次閱讀

    光伏電站無人機巡檢系統平臺的設計架構

    電站中不同的管理需求。 根據光伏電站的管理工作內容,光伏電站無人機巡檢系統平臺從多個層面建設系統
    的頭像 發(fā)表于 05-07 11:23 ?242次閱讀
    光伏電站無人機巡檢系統<b class='flag-5'>平臺</b>的設計<b class='flag-5'>架構</b>

    環(huán)球儀器Uflex靈活自動化平臺概述

    在生產廠房全面走向自動化之際,最令廠家頭痛的莫過于生產線上一些難以自動化的組裝工序。若以功能單一的自動化平臺來解決,投資可能沒有保障。環(huán)球儀器的Uflex靈活
    的頭像 發(fā)表于 02-08 09:13 ?617次閱讀
    環(huán)球儀器Uflex靈活<b class='flag-5'>自動化</b><b class='flag-5'>平臺</b>概述

    IT自動化工具Ansible基礎入門

    Ansible是幫助人員實現自動化的最重要的工具之一。
    的頭像 發(fā)表于 02-07 10:00 ?743次閱讀
    IT<b class='flag-5'>自動化</b>工具Ansible基礎入門

    設備管理平臺的組成及功能

    在快速發(fā)展的工業(yè)數字浪潮中,設備的高效與智能管理是企業(yè)持續(xù)進步的強大引擎。數之能設備
    的頭像 發(fā)表于 11-26 17:24 ?882次閱讀

    AI智能管理平臺助力指揮中心,實現高效智能管理!

    AI智能管理平臺,作為新型智能管理解決方案,近日在某市公安局指揮中心得到了廣泛應用。
    的頭像 發(fā)表于 11-18 16:55 ?804次閱讀
    訊<b class='flag-5'>維</b>AI智能<b class='flag-5'>運</b><b class='flag-5'>維</b>管理<b class='flag-5'>平臺</b>助力指揮中心,<b class='flag-5'>實現</b>高效智能<b class='flag-5'>運</b><b class='flag-5'>維</b>管理!

    智能網聯汽車云控系統第1部分:系統組成及基礎平臺架構

    智能網聯汽車云控系統 第1部分 系統組成及基礎平臺架構
    發(fā)表于 11-18 14:44 ?7次下載

    智能管理平臺,開創(chuàng)物聯網AI智能管理新時代!

    隨著信息技術的迅猛發(fā)展,數字轉型已成為各行業(yè)提升競爭力的關鍵所在。在這一過程中,管理作為保障企業(yè)、政府信息系統穩(wěn)定運行的重要一環(huán),其智能、
    的頭像 發(fā)表于 11-15 16:10 ?817次閱讀
    訊<b class='flag-5'>維</b>智能<b class='flag-5'>運</b><b class='flag-5'>維</b>管理<b class='flag-5'>平臺</b>,開創(chuàng)物聯網AI智能<b class='flag-5'>運</b><b class='flag-5'>維</b>管理新時代!

    一體智慧管理平臺——打造新質生產力,助力企業(yè)數字轉型!

    平臺以其全面監(jiān)控、智能分析、自動化處理、靈活配置等獨特優(yōu)勢,成為企業(yè)智能的首選工具,引領
    的頭像 發(fā)表于 11-15 16:07 ?1101次閱讀
    訊<b class='flag-5'>維</b>一體<b class='flag-5'>化</b>智慧<b class='flag-5'>運</b><b class='flag-5'>維</b>管理<b class='flag-5'>平臺</b>——打造新質生產力,助力企業(yè)數字<b class='flag-5'>化</b>轉型!

    光伏電站管理系統智能的新時代

    的智能與管理注入了新的活力。 光伏電站管理系統是基于云計算技術的電站
    的頭像 發(fā)表于 11-01 17:03 ?579次閱讀
    光伏電站<b class='flag-5'>運</b><b class='flag-5'>維</b>管理系統智能<b class='flag-5'>化</b><b class='flag-5'>運</b><b class='flag-5'>維</b>的新時代

    設備數據接入管理云平臺實現什么功能

    方式,還為企業(yè)帶來了前所未有的效率與智能水平。本文將深入探討設備數據接入管理云
    的頭像 發(fā)表于 09-24 14:14 ?547次閱讀

    光伏電站管理系統實現光伏智能管理

    ?????? 光伏電站管理系統實現光伏智能管理 ?????? 光伏電站全生命周期一般長
    的頭像 發(fā)表于 07-23 16:50 ?1130次閱讀
    光伏電站<b class='flag-5'>運</b><b class='flag-5'>維</b>管理系統<b class='flag-5'>實現</b>光伏智能<b class='flag-5'>化</b><b class='flag-5'>運</b><b class='flag-5'>維</b>管理