Kubernetes 集群外部的 HTTP/HTTPS 請(qǐng)求是如何達(dá)到 Pod 中的 container 的?
如上圖所示,全過(guò)程大致為:
(1) 用戶從 web/mobile/pc 等客戶端發(fā)出 HTTP/HTTPS 請(qǐng)求。
(2) 由于應(yīng)用服務(wù)通常是通過(guò)域名的形式對(duì)外暴露,所以請(qǐng)求將會(huì)先進(jìn)行 DNS 域名解析,得到對(duì)應(yīng)的公網(wǎng) IP 地址。
(3) 公網(wǎng) IP 地址通常會(huì)綁定一個(gè) Load Balancer 負(fù)載均衡器,此時(shí)請(qǐng)求會(huì)進(jìn)入此負(fù)載均衡器。
(4) Load Balancer 再將請(qǐng)求轉(zhuǎn)發(fā)到 kubernetes 集群的某個(gè)流量入口點(diǎn),通常是 ingress。
(5) ingress 根據(jù)用戶自定義的路由規(guī)則進(jìn)一步轉(zhuǎn)發(fā)到 service。
(6) service 根據(jù) selector(匹配 label 標(biāo)簽)將請(qǐng)求轉(zhuǎn)發(fā)到 pod。
(7) pod 最后將請(qǐng)求發(fā)送給其中的 container 容器。
同一個(gè) pod 內(nèi)部可能有多個(gè) container,但是多個(gè)容器不能共用同一個(gè)端口,因此這里會(huì)根據(jù)具體的端口號(hào)將請(qǐng)求發(fā)給對(duì)應(yīng)的 container。
以上就是一種典型的集群外部 HTTP 請(qǐng)求如何達(dá)到 Pod 中的 container 的全過(guò)程。
需要注意的是,由于網(wǎng)絡(luò)配置靈活多變,以上請(qǐng)求流轉(zhuǎn)過(guò)程并不是唯一的方式,例如:
如果你使用的是云服務(wù),那么可以通過(guò)使用 LoadBalancer 類型的 service 直接綁定一個(gè)云服務(wù)商提供的負(fù)載均衡器,然后再接 ingress 或者其它 service。
你也可以通過(guò) NodePort 類型的 service 直接使用節(jié)點(diǎn)上的端口,通過(guò)這些節(jié)點(diǎn)自建負(fù)載均衡器。
如果你的服務(wù)特別簡(jiǎn)單,沒(méi)啥內(nèi)部流量需要管理的,這時(shí)不用 ingress 也是可以的。
容器技術(shù)的底座有三樣?xùn)|西:
正是 Linux 內(nèi)核的 namespace 實(shí)現(xiàn)了資源的隔離。因?yàn)槊總€(gè) pod 有各自的 Linux namespace,所以不同的 pod 是資源隔離的。namespace 有多種,包括 PID、IPC、Network、Mount、Time 等等。其中 PID namespace 實(shí)現(xiàn)了進(jìn)程的隔離,因此 pod 內(nèi)可以有自己的 1 號(hào)進(jìn)程。而 Network namespace 則讓每個(gè) pod 有了自己的網(wǎng)絡(luò)。
Pod 有自己的網(wǎng)絡(luò),node 節(jié)點(diǎn)也有自己的網(wǎng)絡(luò),那么流量是如何從 node 節(jié)點(diǎn)到 pod 的呢?
每個(gè) node 節(jié)點(diǎn)上都有:
(1)kubelet:節(jié)點(diǎn)的小管家。
(2)kube-proxy:操作節(jié)點(diǎn)的 iptables/ipvs 。
(3)plugins:
每個(gè) node 節(jié)點(diǎn)有自己的 root namespace,其中也包括網(wǎng)絡(luò)相關(guān)的 root netns,每個(gè) pod 有自己的 pod netns,從 node 到 pod 則可以通過(guò) veth pairs 的方式連通,流量也正是通過(guò)此通道進(jìn)行的流轉(zhuǎn)。而構(gòu)建 veth pairs、設(shè)置 pod network namespace、為 pod 分配 IP 地址等等工作則正是 CNI 的任務(wù)。
至此,一個(gè)典型的 kubernetes 集群外部的 HTTP/HTTPS 請(qǐng)求如何達(dá)到 Pod 中的 container 的全過(guò)程就是這樣了。
參考資料:
本文鏈接:http://www.www897cc.com/showinfo-26-54983-0.htmlKubernetes 外部 HTTP 請(qǐng)求到達(dá) Pod 容器的全過(guò)程
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: Koin輕量級(jí)依賴注入框架,輕松集成到Android應(yīng)用開發(fā)中
下一篇: 我們一起聊聊枚舉規(guī)范化