Kubernetes网络设计原则
在配置集群網(wǎng)絡(luò)插件或者實(shí)踐K8S 應(yīng)用/服務(wù)部署請(qǐng)時(shí)刻想到這些原則:
- 1.每個(gè)Pod都擁有一個(gè)獨(dú)立IP地址,Pod內(nèi)所有容器共享一個(gè)網(wǎng)絡(luò)命名空間
- 2.集群內(nèi)所有Pod都在一個(gè)直接連通的扁平網(wǎng)絡(luò)中,可通過IP直接訪問
- 所有容器之間無(wú)需NAT就可以直接互相訪問
- 所有Node和所有容器之間無(wú)需NAT就可以直接互相訪問
- 容器自己看到的IP跟其他容器看到的一樣
- 3.Service cluster IP盡可在集群內(nèi)部訪問,外部請(qǐng)求需要通過NodePort、LoadBalance或者Ingress來(lái)訪問
Container Network Interface (CNI)是目前CNCF主推的網(wǎng)絡(luò)模型,它由兩部分組成:
- CNI Plugin負(fù)責(zé)給容器配置網(wǎng)絡(luò),它包括兩個(gè)基本的接口
- 配置網(wǎng)絡(luò): AddNetwork(net *NetworkConfig, rt *RuntimeConf) (types.Result, error)
- 清理網(wǎng)絡(luò): DelNetwork(net *NetworkConfig, rt *RuntimeConf) error
- IPAM Plugin負(fù)責(zé)給容器分配IP地址
Kubernetes Pod的網(wǎng)絡(luò)是這樣創(chuàng)建的:
- 0.每個(gè)Pod除了創(chuàng)建時(shí)指定的容器外,都有一個(gè)kubelet啟動(dòng)時(shí)指定的基礎(chǔ)容器,比如:mirrorgooglecontainers/pause-amd64?registry.access.redhat.com/rhel7/pod-infrastructure
- 1.首先 kubelet創(chuàng)建基礎(chǔ)容器生成network namespace
- 2.然后 kubelet調(diào)用網(wǎng)絡(luò)CNI driver,由它根據(jù)配置調(diào)用具體的CNI 插件
- 3.然后 CNI 插件給基礎(chǔ)容器配置網(wǎng)絡(luò)
- 4.最后 Pod 中其他的容器共享使用基礎(chǔ)容器的網(wǎng)絡(luò)
本項(xiàng)目基于CNI driver 調(diào)用各種網(wǎng)絡(luò)插件來(lái)配置kubernetes的網(wǎng)絡(luò),常用CNI插件有?flannel?calico?weave等等,這些插件各有優(yōu)勢(shì),也在互相借鑒學(xué)習(xí)優(yōu)點(diǎn),比如:在所有node節(jié)點(diǎn)都在一個(gè)二層網(wǎng)絡(luò)時(shí)候,flannel提供hostgw實(shí)現(xiàn),避免vxlan實(shí)現(xiàn)的udp封裝開銷,估計(jì)是目前最高效的;calico也針對(duì)L3 Fabric,推出了IPinIP的選項(xiàng),利用了GRE隧道封裝;因此這些插件都能適合很多實(shí)際應(yīng)用場(chǎng)景。
轉(zhuǎn)載于:https://www.cnblogs.com/yuxiaoba/p/9505894.html
總結(jié)
以上是生活随笔為你收集整理的Kubernetes网络设计原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [react] React Intl是什
- 下一篇: 嵌入式Qt(实验三)——Qt网络编程