真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

k8singress

詳解k8s組件Ingress邊緣路由器并落地到微服務 - kubernetes

寫在前面

Ingress 英文翻譯 進入;進入權;進食,更準確的講就是入口,即外部流量進入k8s集群必經(jīng)之口。這到大門到底有什么作用?我們如何使用Ingress?k8s又是如何進行服務發(fā)現(xiàn)的呢?先看一張圖:
k8s ingress

站在用戶的角度思考問題,與客戶深入溝通,找到古雷港網(wǎng)站設計與古雷港網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋古雷港地區(qū)。

備注:此圖來源我轉載的一篇博客NodePort,LoadBalancer還是Ingress?我該如何選擇 - kubernetes,特此說明。

原理

雖然k8s集群內部署的pod、server都有自己的IP,但是卻無法提供外網(wǎng)訪問,以前我們可以通過監(jiān)聽NodePort的方式暴露服務,但是這種方式并不靈活,生產(chǎn)環(huán)境也不建議使用。Ingresssk8s集群中的一個API資源對象,扮演邊緣路由器(edge router)的角色,也可以理解為集群防火墻、集群網(wǎng)關,我們可以自定義路由規(guī)則來轉發(fā)、管理、暴露服務(一組pod),非常靈活,生產(chǎn)環(huán)境建議使用這種方式。另外LoadBlancer也可以暴露服務,不過這種方式需要向云平臺申請負債均衡器;雖然目前很多云平臺都支持,但是這種方式深度耦合了云平臺,所以你懂的。

首先我們來思考用傳統(tǒng)的web服務器,比如Nginx,如何處理這種場景?
Nginx充當一個反向代理服務器攔截外部請求,讀取路由規(guī)則配置,轉發(fā)相應的請求到后端服務。

kubernetes處理這種場景時,涉及到三個組件

  1. 反向代理web服務器
    負責攔截外部請求,比如Nginx、Apache、traefik等等。我一般以Deployment方式部署到kubernetes集群中,當然也可以用DeamonSet方式部署;這兩種部署方式個人覺得有利有弊,感興趣的請參考這篇文章,這里就不敖述了。

  2. Ingress controller
    k8s中的controller有很多,比如CronJobDeamonSet、DeploymentReplicationSet、StatefulSet等等,大家最熟悉的應該是Deployment(嘿嘿,我也是),它的作用就是監(jiān)控集群的變化,使集群始終保持我們期望的最終狀態(tài)(yml文件)。同理,Ingress controller的作用就是實時感知Ingress路由規(guī)則集合的變化,再與Api Server交互,獲取Service、Pod在集群中的 IP等信息,然后發(fā)送給反向代理web服務器,刷新其路由配置信息,這就是它的服務發(fā)現(xiàn)機制。

  3. Ingress
    定義路由規(guī)則集合,上面已經(jīng)詳細介紹,這里就不再敖述了。
    k8s ingress

經(jīng)過上面的剖析,知道了吧,如果我們僅僅創(chuàng)建Ingress對象,只是定義了一系列路由規(guī)則集合而且,沒有任何作用,不要想得太簡單了,嘿嘿

Ingress 選型

這個我花費了不少時間,最終選用的是Traefik,它是一個用Golang開發(fā)的輕量級的Http反向代理和負載均衡器,雖然相比于Nginx,它是后起之秀,但是它天然擁抱kubernetes,直接與集群k8s的Api Server通信,反應非常迅速,實時感知集群中Ingress定義的路由規(guī)則集合和后端Service、Pod的變化,自動熱更新Traefik后端配置,根本不用創(chuàng)建Ingress controller對象,同時還提供了友好的控制面板和監(jiān)控界面,不僅可以方便地查看Traefik根據(jù)Ingress生成的路由配置信息,還可以查看統(tǒng)計的一些性能指標數(shù)據(jù),如:總響應時間、平均響應時間、不同的響應碼返回的總次數(shù)等,Traefik部署請參考官網(wǎng)用戶示例Kubernetes Ingress Controller。不僅如此,Traefik還支持豐富的annotations配置,可配置眾多出色的特性,例如:自動熔斷、負載均衡策略黑名單、白名單;還支持許多后端存儲,如:zookeeper、eureka、consul、rancher、docker等,它會自動感知這些統(tǒng)一配置中心的變化,熱更新自己的路由配置,所以Traefik對于微服務來說簡直就是一神器啊,嘿嘿。那么Traefik性能又如何呢?容器化部署,還擔心性能,不要這么搞笑,好嗎。而Nginx在擁抱kubernetes這方面比較后知后覺,詳情請參考官方網(wǎng)站和開源項目ingress-nginx ;另外微軟開源的微服務示例項目 eShopOnContainers 采用了ingress-nginx,大家可以下去自行研究。

Traefik 
k8s ingress

示例說明

使用Ingress暴露微服務

apiVersion: extensions/v1beta1kind: Ingressmetadata:  labels:    app: light    component: frontend  name: light-edge-router  namespace: geekbuying-light  annotations:
    kubernetes.io/ingress.class: "traefik"
    ingress.kubernetes.io/ssl-redirect: "false"  
    traefik.frontend.rule.type: "PathPrefixStrip"
    traefik.ingress.kubernetes.io/frontend-entry-points: "http,https"
    traefik.ingress.kubernetes.io/priority: "3"spec:  rules:  - host:     http:      paths:      - path: /api/v1/light        backend:           serviceName: aggregation-light-api          servicePort: 80      - path: /api/v1/identity        backend:           serviceName: identity-api          servicePort: 80

非常重要

  1. 當我們定義額外的路由時,比如這里的/api/vi/identity,必須添加這個traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip注解傳遞路徑,否則會看不到任何效果;ingress.kubernetes.io/ssl-redirect: "false"是否強制使用https,其他的配置信息,請查看詳情。另外,不同的Ingress選型,請參照各自的組件說明。

  2. 其他命名空間下的服務發(fā)現(xiàn)規(guī)則為:[serviceName].[namespace]:[port],如:exceptionless-ui.geekbuying-light-addons:80(備注:端口80可以省略,其他端口不能省略),表示查找geekbuying-light-addons命名空間下的exceptionless-ui服務,并匹配端口。

特性配置

traefik支持強大的annotations配置,需要添加到kubernetes相應資源對象的annotations下面。至于具體配置到的哪個對象,先弄清楚三個概念:

  • EntryPoint(入口點)
    顧名思義,這是外部網(wǎng)絡進入traefik的入口,我們上面就是通過監(jiān)聽主機端口攔截請求。

  • FrontEnd(前端)
    traefik攔截請求后,會轉發(fā)給FrontEnd。前端定義EntryPoint映射到BackEnd的路由規(guī)則集,字段包括HostPathHeaders 等,匹配請求后,默認通過加權輪詢負載算法路由到一個可用的BackEnd,然后進入指定的微服務,這就是服務發(fā)現(xiàn)。

    備注:這些路由規(guī)則可以來自不同的后端存儲,如Kubernetes、zookeeper、eureka、consul等,Kubernetes使用的Ingress資源對象定義路由規(guī)則集。建議大家自行去官網(wǎng)學習Kubernetes Ingress Backend。

  • BackEnd(后端)
    一組http服務集,kubernetes中對應一個service對象下的一組pod地址。對于后端的服務發(fā)現(xiàn),可配置負載均衡策略、熔斷器等特性。

k8s ingress

一個后端service對象的配置例子

apiVersion: v1kind: Servicemetadata:  annotations:
    traefik.backend.circuitbreaker: NetworkErrorRatio() > 0.5
    traefik.backend.loadbalancer.method: drr  labels:    app: light    component: identity  name: identity-api  namespace: geekbuying-lightspec:  ports:
  - port: 80
  selector:    app: light    component: identity    type: webapi

效果圖

控制面板
k8s ingress
前端優(yōu)先級、后端熔斷器和負載均衡策略
k8s ingress
監(jiān)控界面
k8s ingress

總結

綜上所述,首先部署擁抱k8s的反向代理服務器(treafik、nginx等)攔截請求,然后攔截的請求會根據(jù)Ingress定義的路由規(guī)則集,轉發(fā)到集群內部對應的Service

延伸閱讀

https://docs.traefik.io/
https://github.com/containous/traefik
https://docs.traefik.io/user-guide/kubernetes/
https://docs.traefik.io/configuration/backends/kubernetes/
https://kubernetes.io/docs/concepts/services-networking/ingress/
https://kubernetes.io/docs/admin/authorization/rbac/
https://github.com/kubernetes/ingress-nginx/blob/master/README.md
https://kubernetes.github.io/ingress-nginx/development/
https://www.kubernetes.org.cn/1237.html
https://github.com/kubernetes/ingress-nginx
https://blog.csdn.net/hxpjava1/article/details/79459489
https://blog.csdn.net/hxpjava1/article/details/79375452

如果你覺得本篇文章對您有幫助的話,感謝您的【推薦】
如果你對 kubernets 感興趣的話可以關注我,我會定期的在博客分享我的學習心得


網(wǎng)頁題目:k8singress
網(wǎng)站鏈接:http://weahome.cn/article/jhcdjh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部