目录
概念
因为ks8本身不自带网络,所以依赖于CNI网络插件(flannel、calico)
CNI:是一个标准接口,用于容器在运行时调用网络插件、配置容器的网络。CNI负责设置容器的网络命名空间、ip地址、路由等网络参数。
通信的核心:pod的ip地址进行封装,然后通过node节点作为路由器转发到其他的node节点,其他的node节点收到数据包之后解包,然后把数据包转发到指定的pod。
k8s的三种通信方式:
1. pod内部的网络通信
pod内部容器的通信:pod创建完成之后,集群会分配pod一个全局(集群内部的全局)的唯一ip地址,所有的容器共享这个ip地址。pod内部可以用本地通信+端口形式互相通信
2. 同一个node节点上的pod通信
依赖于docker 0网桥。也就是同一个节点上的pod和docker的通信方式是一样的。
3.不同node节点上pod之间通信
想办法通过主机的物理网卡ip进行通信
先决条件:1.pod的ip地址不能冲突
2.pod的ip地址要和node节点的ip地址进行关联
CNI的网络插件
flannel网络插件
它是一种overlay网络,overlay是一种网络虚拟化技术,在底层的物理网络基础之上创建一个逻辑的网络层。从而实现跨节点的pod之间的通信。
功能:让集群中不同节点创建的pod都有集群内部唯一的ip地址(虚拟)
flannel数据转发的方式:UDP、VXLAN(主流)、HOST-GW(主机模式)
VXLAN:基于内核进行转发
UDP:flannel默认方式,是基于应用层转发,配置最简单,但性能最差
HOST-GW:性能最好,但是配置繁琐
如何识别:
用命令ifconfig,UDP的是flannel.0 VXLAN的是flannel.1
vxlan和vlan的区别:
vlan是通过标识来实现广播域的划分,不同的vlan之间可以通信,2-4095 它有4094个
vxlan:它也有标识vni,主要用于数据中心进行广域网的划分。是通过三层网络搭建一个虚拟的二层网络
vxlan工作模式:
calico网络插件
它使用host主机作为路由器,使用BGP同步路由以及iptables来做网络。就是把host主机当做一个路由器,采用直接路由的方式实现。损耗低,也不需要修改数据包的报文,但是pod太多,路由表比较复杂,所以维护起来比较麻烦,它适用于大集群的复杂网络模式。
calico网络创建之后,会生成veth-pair虚拟设备,veth-pair也是一个虚拟的网卡。calico连接两头:一头设备连接pod的网络空间,一头连接主机的网络空间。calico通过Linux的网络命令空间和路由表实现容器之间的通信。
calico工作模式:
面试题:介绍flannel和calico
flannel插件:默认的地址是10.244.0.0/16。它有三种模式:UDP、VXLAN、HOST-GW。它的功能简单,不具备复杂的网络策略的配置能力。适用于小集群或者简单的网络。
calico插件:模式是BGP直接路由模式,它的核心是路由维护,路由转发。它的默认网段:192.168.0.0/16。calico是一个可以对网络管理的插件,具备配置复杂网络配置的能力。但是本身的配置比较复杂,对开发人员、运维人员要求比较高。需要复杂配置的可以使用calico。
calico的安装
在master01主机上操作
拖入calico.yaml拖入master01
vim calico.yaml
修改为
如果没有镜像可以下载一个:docker pull docker.io/calico/node:v3.20.2
kubectl apply -f calico.yaml
这三个变成1/1即可