KONG處理流程


init_by_lua*
  發生在master進程啟動階段。這里會對數據訪問層進行初始化,加載插件的代碼,構造路由規則表。
init_worker_by_lua*
  發生在worker進程啟動階段。這里會開啟數據同步機制,執行每個插件的init_worker方法。

       balancer.init()  讀取數據庫UPSTREAM表,初始化負載均衡器(給每個均衡器加載TARGET【讀取TARGET表】),給每個負載均衡器配備一個健康檢查器

      

   create_healthchecker(balancer, upstream)

       構造完健康檢查器后,調用populate_healthchecker方法把負載均衡器中節點添加到健康檢查器中。

       然后調用attach_healthchecker_to_balancer監聽健康檢查器的事件:healthchecker.events.healthy和healthchecker.events.unhealthy,並設置回調方法。

       回調方法就是根據健康檢查器的事件類型,在負載均衡器中把后端節點標記為可用或不可用

set_by_lua*
  處理請求第一個執行階段。這里可以做一些流程分支處理判斷變量初始化。kong沒有使用該階段。
rewrite_by_lua*
  這里可以對請求做一些修改。kong在這里會把處理代理給插件的rewrite方法。
access_by_lua*
  kong在這里對請求進行路由匹配,找到后端的upstream服務的節點。

       規則的匹配在kong.access方法里面,調用router.exec方法進行匹配

local match_t = router.exec()
負載前的數據准備
balancer_prepare(ctx, match_t.upstream_scheme,
upstream_url_t.type,
upstream_url_t.host,
upstream_url_t.port,
service, route)
當請求匹配出一條路由規則之后,就會在該規則下面的target中選一個目標實例進行轉發。
目標實例的選擇發生在kong.access()的后置handler中,
balancer, upstream = get_balancer(target[balancer_data])
--根據路由對像中的service.host--查詢出upstream,然后由upstream查詢出負載器
調用balancer.execute方式進行選擇。target的選擇全權委托給了resty.dns.balancer對象   
{
balancer, upstream = get_balancer(target)
//選擇出一個host,利用dns動態解析和從
ip, port, hostname, handle = balancer:getPeer(dns_cache_only,
target.balancer_handle,
hash_value)--kongcongresscontroller--在發現k8s資源的時候,會建立route\service\默認建立一條target(和service對應host一致)
 ////設置均衡選擇后數據
}  

balancer_by_lua*
  kong在這里會把上一階段找到的服務節點設置給nginx的load balancer。如果設置了重試次數,此階段可能會被執行多次。

Kong.balancer(){
local ok, err = set_current_peer(balancer_data.ip, balancer_data.port)
}
 

      
header_filter_by_lua*
  這里可以對響應頭做一些處理。kong在這里會把處理代理給插件的header_filter方法。
body_filter_by_lua*
  這里可以對響應體做一些處理。kong在這里會把處理代理給插件的body_filter方法。
log_by_lua*
  kong在這里會通過插件異步記錄日志和一些metrics數據。
————————————————
版權聲明:本文為CSDN博主「aa1215018028」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/aa1215018028/article/details/81297724

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM