在配置集群网络插件或者实践K8S 应用/服务部署请时刻想到这些原则:

  • 1.每个Pod都拥有一个独立IP地址,Pod内所有容器共享一个网络命名空间
  • 2.集群内所有Pod都在一个直接连通的扁平网络中,可通过IP直接访问
    • 所有容器之间无需NAT就可以直接互相访问
    • 所有Node和所有容器之间无需NAT就可以直接互相访问
    • 容器自己看到的IP跟其他容器看到的一样
  • 3.Service cluster IP尽可在集群内部访问,外部请求需要通过NodePort、LoadBalance或者Ingress来访问

Container Network Interface (CNI)是目前CNCF主推的网络模型,它由两部分组成:

  • CNI Plugin负责给容器配置网络,它包括两个基本的接口

    • 配置网络: AddNetwork(net *NetworkConfig, rt *RuntimeConf) (types.Result, error)
    • 清理网络: DelNetwork(net *NetworkConfig, rt *RuntimeConf) error
  • IPAM Plugin负责给容器分配IP地址

Kubernetes Pod的网络是这样创建的:

  • 0.每个Pod除了创建时指定的容器外,都有一个kubelet启动时指定的基础容器,比如:mirrorgooglecontainers/pause-amd64 registry.access.redhat.com/rhel7/pod-infrastructure
  • 1.首先 kubelet创建基础容器生成network namespace
  • 2.然后 kubelet调用网络CNI driver,由它根据配置调用具体的CNI 插件
  • 3.然后 CNI 插件给基础容器配置网络
  • 4.最后 Pod 中其他的容器共享使用基础容器的网络

本项目基于CNI driver 调用各种网络插件来配置kubernetes的网络,常用CNI插件有 flannel calico weave等等,这些插件各有优势,也在互相借鉴学习优点,比如:在所有node节点都在一个二层网络时候,flannel提供hostgw实现,避免vxlan实现的udp封装开销,估计是目前最高效的;calico也针对L3 Fabric,推出了IPinIP的选项,利用了GRE隧道封装;因此这些插件都能适合很多实际应用场景。

最新文章

  1. BFC之浅析篇
  2. iOS 7新功能例子
  3. 凯尔卡C68全球版汽车电脑诊断仪
  4. Quartz定时任务学习(二)web应用
  5. uEditor富文本编辑器
  6. Python Django连接(听明白了是连接不是创建!)Mysql已存在的数据库
  7. npm 模块的总结
  8. mysql 数据库的数据类型
  9. VI和VIM
  10. 一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。
  11. css 两端对其
  12. Delphi - SPcomm 控件使用
  13. scrapy学习笔记(三):使用item与pipeline保存数据
  14. java基础36 双例集合Map下的HashMap和TreeMap集合
  15. 【C#】利用JMail发送邮件
  16. 判断网络类(获取mac) InternetCheck
  17. JDBC(5)-处理大数据
  18. JDBC(1)简单介绍/数据库的连接
  19. no such file or directory : 'users/shikx/xxx/xxx/Appirater.m'
  20. block简介

热门文章

  1. 序列化shelve模块
  2. shutil模块详解2
  3. poj3280 Cheapest Palindrome
  4. 一键修改android 字体和图片大小.
  5. Scrapy-Redis分布式爬虫小白问题记录
  6. bt设置指定的ip地址
  7. VMware 彻底删除虚拟机操作系统的方法
  8. DROP TRIGGER - 删除一个触发器定义
  9. codeforces 235 B lets play osu!
  10. 安卓adb在拨号键盘上输入井号(#)