9 Star 40 Fork 18

gjmzj / kubeasz

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
06-install_network_plugin.md 2.53 KB
一键复制 编辑 原始数据 按行查看 历史
jin.gjm 提交于 2022-06-28 19:59 . update docs part2

06-安装网络组件

首先回顾下K8S网络设计原则,在配置集群网络插件或者实践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的网络是这样创建的:

    1. 每个Pod除了创建时指定的容器外,都有一个kubelet启动时指定的基础容器,即pause容器
    1. kubelet创建基础容器生成network namespace
    1. kubelet调用网络CNI driver,由它根据配置调用具体的CNI 插件
    1. CNI 插件给基础容器配置网络
    1. Pod 中其他的容器共享使用基础容器的网络

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

项目当前内置支持的网络插件有:calico cilium flannel kube-ovn kube-router

安装讲解

参考

后一篇

YAML
1
https://gitee.com/easzlab/kubeasz.git
git@gitee.com:easzlab/kubeasz.git
easzlab
kubeasz
kubeasz
master

搜索帮助