自建 Kubernetes 集群
自建時(shí)一般選用 Flannel CNI 網(wǎng)絡(luò)插件,需要給 Pod 和 Service 分配虛擬網(wǎng)段诵盼;節(jié)點(diǎn)內(nèi)的 Pod 互訪九昧,直接通過(guò) CNI 網(wǎng)橋在二層進(jìn)行交互擅腰;跨節(jié)點(diǎn)之間的 Pod 互訪莹弊,在 Flannel VxLAN 模式下涤久,通過(guò)隧道封裝技術(shù)來(lái)進(jìn)行網(wǎng)絡(luò)傳輸;在 host-gw 模式下忍弛,可以直接基于路由的方式响迂,無(wú)需封包解包,由于直接將目標(biāo) Node 作為下一跳地址细疚,充當(dāng)網(wǎng)關(guān)蔗彤,所以此模式下要求集群節(jié)點(diǎn)必須是二層聯(lián)通的,不能跨網(wǎng)段疯兼。
非集群節(jié)點(diǎn)是不能訪問(wèn)集群內(nèi)部網(wǎng)絡(luò)然遏,即 Pod 容器網(wǎng)絡(luò)和 Service 服務(wù)網(wǎng)絡(luò)。一般開(kāi)發(fā)環(huán)境為了本地調(diào)試镇防,要將本地網(wǎng)絡(luò)與 Kubernetes 的集群網(wǎng)絡(luò)打通啦鸣,可以通過(guò)架設(shè) VPN 的方式。
Service 的網(wǎng)絡(luò)實(shí)際就是 kube-proxy 維護(hù)的 iptables 規(guī)則来氧, 這些規(guī)則存在于集群所有節(jié)點(diǎn)上,所以從任何一個(gè)節(jié)點(diǎn)訪問(wèn) 都可以定位到其代理的 Endpoints 列表。ClusterIP 的存在也只是為了找出其代理的 endpoint 地址做 DNAT 目標(biāo)地址轉(zhuǎn)換啦扬。
如果是 NodePort 類(lèi)型的 Service中狂,流入請(qǐng)求的目標(biāo) Pod 地址可能不在當(dāng)前節(jié)點(diǎn),這時(shí)就會(huì)做 SNAT 替換數(shù)據(jù)包的源 IP 地址扑毡,當(dāng)然這里也能通過(guò)配置來(lái)控制 NodePort 僅將流量轉(zhuǎn)發(fā)到當(dāng)前節(jié)點(diǎn)的 Pod胃榕,具體可以參看 Service 的外部流量控制文檔:https://kubernetes.io/zh-cn/docs/tutorials/services/source-ip/
阿里容器服務(wù) ACK
- Flannel
Flannel 是 ACK 的網(wǎng)絡(luò)插件,使用獨(dú)立于 VPC 網(wǎng)段的 Pod 的網(wǎng)段分配給 Pod瞄摊。在 ACK 中勋又,F(xiàn)lannel 插件采用的是阿里云 VPC ,報(bào)文經(jīng)過(guò)阿里云 VPC 的路由表直接轉(zhuǎn)發(fā)换帜,不需要 Vxlan 等隧道封裝技術(shù)封裝報(bào)文楔壤,所以比 Flannel 默認(rèn)的 Vxlan 模式具有更高的通信性能。
差異很清晰惯驼,如果選用 ACK Flannel 插件蹲嚣,跨節(jié)點(diǎn)通信并沒(méi)有使用 vxlan 技術(shù),而是通過(guò)云上基礎(chǔ)產(chǎn)品 VPC 的全局路由來(lái)實(shí)現(xiàn)祟牲。
他通過(guò)一個(gè) CCM(Cloud Controller Manager)組件維護(hù) VPC 上 Pod 網(wǎng)段的路由表隙畜,來(lái)實(shí)現(xiàn) Pod 的跨節(jié)點(diǎn)通信。
當(dāng)集群網(wǎng)絡(luò)組件為 Flannel 時(shí)说贝,CCM 組件負(fù)責(zé)打通容器與節(jié)點(diǎn)間網(wǎng)絡(luò)议惰,實(shí)現(xiàn)容器跨節(jié)點(diǎn)通信。CCM 會(huì)將節(jié)點(diǎn)的 Pod 網(wǎng)段信息寫(xiě)入 VPC 的路由表中乡恕,從而實(shí)現(xiàn)跨節(jié)點(diǎn)的容器通信换淆。該功能無(wú)需配置,安裝即可使用几颜。
這時(shí) VPC 路由如果收到目的地址是某一個(gè)節(jié)點(diǎn) pod 網(wǎng)段的 IP 地址倍试,就會(huì)把這個(gè)網(wǎng)絡(luò)包轉(zhuǎn)發(fā)到對(duì)應(yīng)的節(jié)點(diǎn)上,然后再根據(jù)主機(jī)的路由表蛋哭,將其轉(zhuǎn)發(fā)到 CNI 網(wǎng)橋上县习。
筆者公司生產(chǎn)兩套集群,一套自建谆趾,一套買(mǎi)的阿里云 ACK 托管版本躁愿,都是選用的 Flannel CNI 插件。兩套集群在同一個(gè) VPC 下沪蓬,有一天在自建的集群 Pod 中可以直接 ping 通托管集群的 Pod IP彤钟,而且在非集群 Node 上(同 VPC)也可以直接 ping 通托管集群的 pod ip,這時(shí)去仔細(xì)翻了翻 ACK 的文檔跷叉,才發(fā)現(xiàn) ACK 下的 Flannel 插件沒(méi)有使用 vxlan 技術(shù)逸雹,而是基于 VPC 路由轉(zhuǎn)發(fā)营搅。
- Terway
Terway是阿里云開(kāi)源的基于專(zhuān)有網(wǎng)絡(luò)VPC的容器網(wǎng)絡(luò)接口CNI(Container Network Interface)插件,基于阿里云的彈性網(wǎng)卡(ENI)構(gòu)建網(wǎng)絡(luò)梆砸,將原生的彈性網(wǎng)卡(ENI)分配給 Pod 實(shí)現(xiàn) Pod 網(wǎng)絡(luò)转质。
支持多種模式:
- VPC:Pod 網(wǎng)段不同于節(jié)點(diǎn)的網(wǎng)絡(luò)的網(wǎng)段,通過(guò) Aliyun VPC 路由表打通不同節(jié)點(diǎn)間的容器網(wǎng)絡(luò)帖世。
- ENI:容器的網(wǎng)卡是 Aliyun 彈性網(wǎng)卡休蟹,Pod 的網(wǎng)段和宿主機(jī)的網(wǎng)段是一致的。
在 ENI 模式下日矫,ENI 網(wǎng)絡(luò)就是從阿里云的 VPC 網(wǎng)絡(luò)中創(chuàng)建和綁定一個(gè)彈性網(wǎng)卡到節(jié)點(diǎn)上赂弓, 然后 Pod 利用這個(gè)彈性網(wǎng)卡和別的網(wǎng)絡(luò)互通。
Pod 與 Node 都在一個(gè) VPC 網(wǎng)絡(luò)中哪轿,共享相同的 CIDR 網(wǎng)段盈魁,Pod 會(huì)通過(guò)彈性網(wǎng)卡資源直接分配 VPC 中的 IP 地址,不需要額外指定虛擬 Pod 網(wǎng)段缔逛,而且集群中所有的 Pod 在同一個(gè) VPC 子網(wǎng)中备埃。
詳情可參看 Terway 的設(shè)計(jì)文檔:https://github.com/AliyunContainerService/terway/blob/main/docs/design.md
華為云容器引擎 CCE
- 容器隧道網(wǎng)絡(luò)模型
這種與自建時(shí) Flannel 網(wǎng)絡(luò)插件 vxlan 模式一樣,在節(jié)點(diǎn)網(wǎng)絡(luò)基礎(chǔ)上通過(guò)隧道封裝褐奴,構(gòu)建的獨(dú)立于節(jié)點(diǎn)網(wǎng)絡(luò)平面的容器網(wǎng)絡(luò)平面按脚,CCE 集群容器隧道網(wǎng)絡(luò)使用的封裝協(xié)議也是 VXLAN。
- VPC 網(wǎng)絡(luò)
此模式與 ACK 下的 Flannel 插件類(lèi)似敦冬,都是利用 VPC 的路由轉(zhuǎn)發(fā)能力來(lái)實(shí)現(xiàn)跨節(jié)點(diǎn)通信辅搬。
VPC 網(wǎng)絡(luò)采用 VPC 路由方式與底層網(wǎng)絡(luò)深度整合,由于沒(méi)有隧道封裝的消耗脖旱,容器網(wǎng)絡(luò)性能相對(duì)于容器隧道網(wǎng)絡(luò)有一定優(yōu)勢(shì)堪遂。VPC 網(wǎng)絡(luò)集群由于 VPC 路由中配置有容器網(wǎng)段與節(jié)點(diǎn) IP 的路由,可以支持集群外直接訪問(wèn)容器實(shí)例等特殊場(chǎng)景萌庆。
- 云原生網(wǎng)絡(luò)2.0
云原生網(wǎng)絡(luò)2.0是自研的新一代容器網(wǎng)絡(luò)模型溶褪,深度整合了虛擬私有云VPC的彈性網(wǎng)卡(Elastic Network Interface,簡(jiǎn)稱(chēng)ENI)和輔助彈性網(wǎng)卡(Sub Network Interface践险,簡(jiǎn)稱(chēng)Sub-ENI)的能力猿妈,直接從 VPC 網(wǎng)段內(nèi)分配容器 IP 地址,支持ELB直通容器巍虫,綁定安全組彭则,綁定彈性公網(wǎng)IP,享有高性能占遥。
這里和 ACK 的 Terway 類(lèi)似俯抖,利用彈性網(wǎng)卡,直接從 VPC 劃分 IP 地址給容器瓦胎。
與傳統(tǒng)模式的通信區(qū)別:
- 節(jié)點(diǎn)內(nèi) Pod 間通信:直接通過(guò) VPC 的彈性網(wǎng)卡/彈性輔助網(wǎng)卡進(jìn)行流量轉(zhuǎn)發(fā)芬萍。
- 跨節(jié)點(diǎn)Pod間通信:直接通過(guò) VPC 的彈性網(wǎng)卡/彈性輔助網(wǎng)卡進(jìn)行流量轉(zhuǎn)發(fā)尤揣。
騰訊容器服務(wù) TKE
- GlobalRouter 模式
GlobalRouter 網(wǎng)絡(luò)模式是容器服務(wù) TKE 基于底層私有網(wǎng)絡(luò) VPC 的全局路由能力,實(shí)現(xiàn)了容器網(wǎng)絡(luò)和 VPC 互訪的路由策略担忧。該網(wǎng)絡(luò)模式特征包含以下幾點(diǎn):
- 容器路由直接通過(guò) VPC芹缔。
- 容器與節(jié)點(diǎn)分布在同一網(wǎng)絡(luò)平面坯癣。
- 容器網(wǎng)段分配靈活瓶盛,容器 IP 段不占用 VPC 的其他網(wǎng)段。
看完描述示罗,和 ACK 的 Flannel 或者 Terway 的 VPC 模式惩猫,以及 CCE 的 VPC 網(wǎng)絡(luò)模式,提供的功能都是一樣的蚜点,甚至描述讀下來(lái)都是一模一樣的轧房。
- VPC-CNI 模式
與 ACK Terway 的 ENI 模式,CCE 的云原生網(wǎng)絡(luò)2.0模式一樣绍绘,基于彈性網(wǎng)卡奶镶,直接從 VPC 分配 IP 給容器。
VPC-CNI 模式是容器服務(wù) TKE 基于 CNI 和 VPC 彈性網(wǎng)卡實(shí)現(xiàn)的容器網(wǎng)絡(luò)能力陪拘。
其中 VPC-CNI 模式分為共享網(wǎng)卡模式和獨(dú)占網(wǎng)卡模式厂镇,兩種網(wǎng)絡(luò)模式適用于不同的場(chǎng)景。您可以根據(jù)業(yè)務(wù)需要選擇不同的網(wǎng)絡(luò)模式左刽。
- 共享網(wǎng)卡模式:Pod 共享一張彈性網(wǎng)卡捺信,IPAMD 組件為彈性網(wǎng)卡申請(qǐng)多個(gè) IP 給到不同的 Pod。
- 獨(dú)占網(wǎng)卡模式:每個(gè) Pod 有獨(dú)立的彈性網(wǎng)卡欠痴,性能更高迄靠。受機(jī)型影響,不同節(jié)點(diǎn)可使用的彈性網(wǎng)卡數(shù)量有限喇辽,單節(jié)點(diǎn) Pod 密度更低掌挚。