- Kubernetes進(jìn)階實(shí)戰(zhàn)
- 馬永亮
- 1720字
- 2019-03-13 14:20:35
1.4 Kubernetes網(wǎng)絡(luò)模型基礎(chǔ)
云計(jì)算的核心是虛擬化技術(shù),網(wǎng)絡(luò)虛擬化技術(shù)又是其最重要的組成部分,用于在物理網(wǎng)絡(luò)上虛擬多個(gè)相互隔離的虛擬網(wǎng)絡(luò),實(shí)現(xiàn)網(wǎng)絡(luò)資源切片,提高網(wǎng)絡(luò)資源利用率,實(shí)現(xiàn)彈性化網(wǎng)絡(luò)。Kubernetes作為容器云技術(shù)棧中的容器編排組件,必然需要在多租戶(名稱空間)的基礎(chǔ)上實(shí)現(xiàn)彈性網(wǎng)絡(luò)管理,這也是“基礎(chǔ)設(shè)施即代碼”的要求之一。
1.4.1 網(wǎng)絡(luò)模型概述
Kubernetes的網(wǎng)絡(luò)中主要存在四種類型的通信:同一Pod內(nèi)的容器間通信、各Pod彼此之間的通信、Pod與Service間的通信,以及集群外部的流量同Service之間的通信。Kubernetes為Pod和Service資源對(duì)象分別使用了各自的專用網(wǎng)絡(luò),Pod網(wǎng)絡(luò)由Kubernetes的網(wǎng)絡(luò)插件配置實(shí)現(xiàn),而Service的網(wǎng)絡(luò)則由Kubernetes集群予以指定。為了提供更靈活的解決方式,Kubernetes的網(wǎng)絡(luò)模型需要借助于外部插件實(shí)現(xiàn),它要求任何實(shí)現(xiàn)機(jī)制都必須滿足以下需求。
?□所有Pod間均可不經(jīng)NAT機(jī)制而直接通信。
?□所有節(jié)點(diǎn)均可不經(jīng)NAT機(jī)制而直接與所有容器通信。
?□容器自己使用的IP也是其他容器或節(jié)點(diǎn)直接看到的地址。換句話講,所有Pod對(duì)象都位于同一平面網(wǎng)絡(luò)中,而且可以使用Pod自身的地址直接通信。
Kubernetes使用的網(wǎng)絡(luò)插件必須能為Pod提供滿足以上要求的網(wǎng)絡(luò),它需要為每個(gè)Pod配置至少一個(gè)特定的地址,即Pod IP。Pod IP地址實(shí)際存在于某個(gè)網(wǎng)卡(可以是虛擬設(shè)備)上,而Service的地址卻是一個(gè)虛擬IP地址,沒(méi)有任何網(wǎng)絡(luò)接口配置此地址,它由kube-proxy借助iptables規(guī)則或ipvs規(guī)則重新定向到本地端口,再將其調(diào)度至后端Pod對(duì)象。Service的IP地址是集群提供服務(wù)的接口,也稱為Cluster IP。
Pod網(wǎng)絡(luò)及其IP由Kubernetes的網(wǎng)絡(luò)插件負(fù)責(zé)配置和管理,具體使用的網(wǎng)絡(luò)地址可在管理配置網(wǎng)絡(luò)插件時(shí)指定,如10.244.0.0/16網(wǎng)絡(luò)。而Cluster網(wǎng)絡(luò)和IP則是由Kubernetes集群負(fù)責(zé)配置和管理,如10.96.0.0/12網(wǎng)絡(luò)。
總結(jié)起來(lái),Kubernetes集群至少應(yīng)該包含三個(gè)網(wǎng)絡(luò),如圖1-13中的網(wǎng)絡(luò)環(huán)境所示。一個(gè)是各主機(jī)(Master、Node和etcd等)自身所屬的網(wǎng)絡(luò),其地址配置于主機(jī)的網(wǎng)絡(luò)接口,用于各主機(jī)之間的通信,例如,Master與各Node之間的通信。此地址配置于Kubernetes集群構(gòu)建之前,它并不能由Kubernetes管理,管理員需要于集群構(gòu)建之前自行確定其地址配置及管理方式。第二個(gè)是Kubernetes集群上專用于Pod資源對(duì)象的網(wǎng)絡(luò),它是一個(gè)虛擬網(wǎng)絡(luò),用于為各Pod對(duì)象設(shè)定IP地址等網(wǎng)絡(luò)參數(shù),其地址配置于Pod中容器的網(wǎng)絡(luò)接口之上。Pod網(wǎng)絡(luò)需要借助kubenet插件或CNI插件實(shí)現(xiàn),該插件可獨(dú)立部署于Kubernetes集群之外,亦可托管于Kubernetes之上,它需要在構(gòu)建Kubernetes集群時(shí)由管理員進(jìn)行定義,而后在創(chuàng)建Pod對(duì)象時(shí)由其自動(dòng)完成各網(wǎng)絡(luò)參數(shù)的動(dòng)態(tài)配置。第三個(gè)是專用于Service資源對(duì)象的網(wǎng)絡(luò),它也是一個(gè)虛擬網(wǎng)絡(luò),用于為Kubernetes集群之中的Service配置IP地址,但此地址并不配置于任何主機(jī)或容器的網(wǎng)絡(luò)接口之上,而是通過(guò)Node之上的kube-proxy配置為iptables或ipvs規(guī)則,從而將發(fā)往此地址的所有流量調(diào)度至其后端的各Pod對(duì)象之上。Service網(wǎng)絡(luò)在Kubernetes集群創(chuàng)建時(shí)予以指定,而各Service的地址則在用戶創(chuàng)建Service時(shí)予以動(dòng)態(tài)配置。

圖1-13 Kubernetes網(wǎng)絡(luò)環(huán)境
提示
CNI是指容器網(wǎng)絡(luò)接口(Container Network Interface),是由CNCF(Cloud Native Computing Foundation)維護(hù)的項(xiàng)目,其由一系列的用于編寫配置容器網(wǎng)絡(luò)插件的規(guī)范和庫(kù)接口(libcni)組成,支持眾多插件項(xiàng)目。后文對(duì)此有詳細(xì)說(shuō)明。
1.4.2 集群上的網(wǎng)絡(luò)通信
Kubernetes集群的客戶端大體可以分為兩類:API Server客戶端和應(yīng)用程序(運(yùn)行為Pod中的容器)客戶端,如圖1-14所示。第一類客戶端通常包含人類用戶和Pod對(duì)象兩種,它們通過(guò)API Server訪問(wèn)Kubernetes集群完成管理任務(wù),例如,管理集群上的各種資源對(duì)象。第二類客戶端一般也包含人類用戶和Pod對(duì)象兩種,它們的訪問(wèn)目標(biāo)是Pod上運(yùn)行于容器中的應(yīng)用程序提供的各種具體的服務(wù),如redis或nginx等,不過(guò),這些訪問(wèn)請(qǐng)求通常要經(jīng)由Service或Ingress資源對(duì)象進(jìn)行。另外,第二類客戶端的訪問(wèn)目標(biāo)對(duì)象的操作要經(jīng)由第一類客戶端創(chuàng)建和配置完成后才能進(jìn)行。

圖1-14 Kubernetes客戶端及其類型
訪問(wèn)API Server時(shí),人類用戶一般借助于命令行工具kubectl或圖形UI(例如Kubernetes Dashboard)進(jìn)行,也可通過(guò)編程接口進(jìn)行訪問(wèn),包括REST API。訪問(wèn)Pod中的應(yīng)用時(shí),其訪問(wèn)方式要取決于Pod中的應(yīng)用程序,例如,對(duì)于運(yùn)行Nginx容器的Pod來(lái)說(shuō),其最常用工具自然是瀏覽器。
管理員(開發(fā)人員或運(yùn)維人員)使用Kubernetes集群的常見操作包括通過(guò)控制器創(chuàng)建Pod,在Pod的基礎(chǔ)上創(chuàng)建Service供第二類客戶端訪問(wèn),更新Pod中的應(yīng)用版本(更新和回滾)以及對(duì)應(yīng)用規(guī)模進(jìn)行擴(kuò)容或縮容等,另外還有集群附件管理、存儲(chǔ)卷管理、網(wǎng)絡(luò)及網(wǎng)絡(luò)策略管理、資源管理和安全管理等,這些內(nèi)容將在后面的章節(jié)中展開。不過(guò),這一切的前提是要先構(gòu)建出一個(gè)可用的Kubernetes集群,這一內(nèi)容將在第2章中著重講述。
- Mastering Entity Framework Core 2.0
- Kibana Essentials
- INSTANT OpenCV Starter
- INSTANT FreeMarker Starter
- 簡(jiǎn)單高效LATEX
- 技術(shù)領(lǐng)導(dǎo)力:程序員如何才能帶團(tuán)隊(duì)
- Neo4j Essentials
- aelf區(qū)塊鏈應(yīng)用架構(gòu)指南
- Web程序設(shè)計(jì)(第二版)
- 軟件測(cè)試實(shí)用教程
- Spring MVC+MyBatis開發(fā)從入門到項(xiàng)目實(shí)踐(超值版)
- Beginning C++ Game Programming
- Hadoop 2.X HDFS源碼剖析
- Android Studio Cookbook
- Fastdata Processing with Spark