久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

K8S Service 實戰與原理初探

故事的開始,讓我們先從一件生產故障說起。5月29日,內部某系統出現大規模訪問Service故障,發現Pod容器內無法正常訪問ServiceIP:Port,整個故障持續時間超過12h,相關運維支撐人員沒有找到根本原因和解決辦法。
經過復盤,我們發現,大家對于K8S Service的原理不夠清晰,導致對問題的定位不能做得到快速準確,如果當時能夠按照如下的思路去思考問題,排查過程不至于花費如此久的時間。
K8S Service 實戰與原理初探
下面,我們就來細說一下Service在Kubernetes中的作用、使用方法及原理

Service是一種暴露一組Pod網絡的抽象方式,K8S Service提供了針對于一組Pod的負載均衡的暴露。通過這樣的方式,可以避免不同的pod之間訪問時需要知曉對應pod網絡信息的痛苦。例如:前端->后端,由于前端POD IP隨時變動,后端亦如此,如何處理前端POD和后端POD的通信,就需要Service這一抽象,來保證簡單可靠。

Service的使用

1、典型服務配置方法

當配置了selector之后,Service Controller會自動查找匹配這個selector的pod,并且創建出一個同名的endpoint對象,負責具體service之后連接。

K8S Service 實戰與原理初探

2、配置沒有selector的服務

沒有selector的service不會出現Endpoint的信息,需要手工創建Endpoint綁定,Endpoint可以是內部的pod,也可以是外部的服務。

K8S Service 實戰與原理初探

Service的類型

1.CluserIP

K8S Service 實戰與原理初探

2.LoadBalance

K8S Service 實戰與原理初探
3.NodePort
K8S Service 實戰與原理初探
4.ExternalName
5.Headless
K8S Service 實戰與原理初探
對定義了選擇算符的無頭服務,Endpoint 控制器在 API 中創建了 Endpoints 記錄, 并且修改 DNS 配置返回 A 記錄(IP 地址),通過這個地址直接到達 Service 的后端 Pod 上。
K8S Service 實戰與原理初探
對沒有定義選擇算符的無頭服務,Endpoint 控制器不會創建 Endpoints 記錄。然而 DNS 系統會查找和配置,無論是:
  • 對于 ExternalName 類型的服務,查找其 CNAME 記錄
  • 對所有其他類型的服務,查找與 Service 名稱相同的任何 Endpoints 的記錄

Service的實現方式

1.用戶態代理訪問

K8S Service 實戰與原理初探

即:當對于每個Service,Kube-Proxy會在本地Node上打開一個隨機選擇的端口,連接到代理端口的請求,都會被代理轉發給Pod。那么通過Iptables規則,捕獲到達Service:Port的請求都會被轉發到代理端口,代理端口重新轉為對Pod的訪問

這種方式的缺點是存在內核態轉為用戶態,再有用戶態轉發的兩次轉換,性能較差,一般不再使用

2.Iptables模式

K8S Service 實戰與原理初探

3.Ipvs模式

K8S Service 實戰與原理初探

Service Iptables實現原理

Iptables表和鏈及處理過程

K8S Service 實戰與原理初探

Service的Traffic流量將會通過prerouting和output重定向到kube-service鏈

K8S Service 實戰與原理初探
  • KUBE-SERVICES->KUBE-SVC-XXXXXXXXXXXXXXXX->KUBE-SEP-XXXXXXXXXXXXXXXX represents a ClusterIP service
  • KUBE-NODEPORTS->KUBE-SVC-XXXXXXXXXXXXXXXX->KUBE-SEP-XXXXXXXXXXXXXXXX represents a NodePort service

幾種不同類型的Service在Kube-Proxy啟用Iptables模式下上的表現

  • ClusterIP

K8S Service 實戰與原理初探
  • NodePort

K8S Service 實戰與原理初探

K8S Service 實戰與原理初探同時,可以看到Service所申請的端口38081被Kube-proxy所代理和監聽

K8S Service 實戰與原理初探
  • LoadBalancer

不帶有Endpoint的Service

K8S Service 實戰與原理初探

帶有外部endpoint的Service

直接通過iptable規則轉發到對應的外部ep地址

K8S Service 實戰與原理初探

K8S Service 實戰與原理初探

總結

  • ClusterIP類型,KubeProxy監聽Service和Endpoint創建規則,采用DNAT將目標地址轉換為Pod的ip和端口,當有多個ep時,按照策略進行轉發,默認RR模式時,iptables采用:比如有4個實例,四條規則的概率分別為0.25, 0.33, 0.5和 1,按照順序,一次匹配完成整個流量的分配。
  • NodePort類型,將會在上述ClusterIP模式之后,再加上Kube-Proxy的監聽(為了確保其他服務不會占用該端口)和KUBE-NODEPORT的iptable規則

參考文獻

1、iptables https://en.wikipedia.org/wiki/Iptables

2、ipvs https://en.wikipedia.org/wiki/IP_Virtual_Server

3、K8S Service https://kubernetes.io/zh/docs/concepts/services-networking/service/

PS:過兩天給大家搞個粉絲福利,Python【電子資料+視頻教程+包郵紙質書籍】,全部免費送!可以期待一下~

文章轉載:?twt企業IT社區
(版權歸原作者所有,侵刪)

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 健康| 宽甸| 运城市| 安西县| 永嘉县| 邹城市| 南宫市| 孝义市| 洛扎县| 遂宁市| 汉川市| 甘德县| 鱼台县| 桓仁| 彭泽县| 互助| 冷水江市| 和平区| 铜鼓县| 南雄市| 九龙县| 探索| 准格尔旗| 南阳市| 广德县| 海阳市| 招远市| 交城县| 长汀县| 南乐县| 宁国市| 台东县| 东莞市| 苗栗市| 太仓市| 宁乡县| 万盛区| 开平市| 新田县| 东源县| 福建省|