kubernetes之网络组件calico
最近搭建k8s生产集群使用的网络组件就是calico,顺便写一点东西加深自己的记忆
-
calico大体是什么东西呀
calico就是为OpenStack虚机,docker创建的容器,k8s创建的pod这类的东西相互之间实现网络通信。
在生产中判断calico是否安装成功呀,主要的依据之一是看看路由信息是否写入。
-
calico的核心组件
Flixe: 跑在每天需要运行的节点上,主要负责配置路由和ACLs信息,通过这样保证与endpoint的连通性。
Etcd: 分布式键值存储,存储一些网络数据,保证calico的网络状态的准确性吧。BGPclient:主要就是负责把一些路由配置和ACLs信息(说白了就是Flixe负责的东西)写到内核当中
BGP Route Reflector:大规模部署时使用,通过一个或者多个BGP Route Reflector来完成集中式的路由分发
-
calico的网络方式
IPiP:就是按照字面意思ip套ip,就是一层ip上封装一层ip,就是基本上实现了一个基于ip的网桥,就是在通信的两端写上路由从而实现互相通信。
BGP:边界网关协议,是互联网上一个核心的去中心化自治路由协议。
-
在生产上布置calico出现的问题
其中的关键字BIRD is not ready: Failed to stat() nodename file: stat /var/lib/calico/nodename: no such file or directory
主要原因:calico 没有自己创建的nodename文件导致检测是未发现nodename信息所以导致报错
解决方法:就是在每一台主机上安装上面提供的创建目录增加权限然后写一个nodename文件
#创建目录和文件
mkdir /var/lib/calico/
touch /var/lib/calico/nodename
#将ip写进nodename文件中
echo "192.168.12.10" > /var/lib/calico/nodename
还有另一个问题
关键字:
calico/node is not ready: BIRD is not ready: BGP not established with 10.203.14.223,10.203.15.206,10.203.15.87,10.203.15.6,10.203.15.78
主要原因:在一个集群中有很多主机,一般情况主机的网卡interfance是一样的,还有一种情况是不一样的比如ens33,bond1,等。这个问题就是网络接口不一样导致的。
解决方法:修改yaml文件,找到interfance="ens33"这样的字段吧,将其改成自己对应的网络接口名称,我们环境bond1,bond2这样的网卡就是需要修改测interfance=“bond1$”,如果是bond1,ens33这种的interfance=“bond1|ens33”,示例如下:
- name: IP_AUTODETECTION_METHOD
value: "interfance"="bond1$"
- name: IP6_AUTODETECTION_METHOD
value: "interfance"="bond1$"
- name: IP_AUTODETECTION_METHOD
value: "interfance"="bond1|ens33"
- name: IP6_AUTODETECTION_METHOD
value: "interfance"="bond1|ens33"