Calico针对容器、虚拟机的开源网络和网络安全解决方案。是纯三层的数据中心网络方案。
Calico在每一个计算节点利用Linux Kernel实现了一个高效的虚拟路由器vRouter
来负责数据转发,而每个vRouter
通过BGP协议负责把自己上运行的workload的路由信息向整个Calico网络内传播。(小规模部署可以直接互联 BGP full mesh
,大规模下可通过指定的BGP route reflector
来完成)。 这样保证最终所有的workload
之间的数据流量都是通过IP路由的方式完成互联的。Calico节点组网可以直接利用数据中心的网络结构(无论是L2或者L3),不需要额外的NAT
,隧道或者Overlay Network
。
Calico还基于iptables
还提供了丰富而灵活的网络Policy
,保证通过各个节点上的ACLs
来提供Workload的多租户隔离、安全组以及其他可达性限制等功能。
calico组件
在Kubernetes平台之上calico/node
容器会通过DaemonSet部署到每个节点,并运行三个守护程序:
- Felix:用于管理路由规则,负责状态上报。
- BIRD:BGP的客户端,用于将Felix的路由信息加载到内核中,同时负责路由信息在集群中的分发。
- confd:用于监视Calico存储(etcd)中的配置变更并更新
BIRD
的配置文件。
calicoctl使用问题
|
|
默认情况下,calicoctl
将使用位于的默认KUBECONFIG
从 Kubernetes APIServer 读取$(HOME)/.kube/config
。
如果默认的 KUBECONFIG
不存在,或者想从指定的存储访问信息,则需要单独配置。
|
|
calico 安装配置
开始前准备
确定calico数据存储
Calico同时支持kubernetes api和etcd数据存储。官方给出的建议是在本地部署中使用K8S API,仅支持Kubernetes模式。而官方给出的etcd则是混合部署(Calico作为Kubernetes和OpenStack的网络插件运行)的最佳数据存储。
使用kubernetes api作为数据存储的安装
|
|
修改Pod CIDR
Calico默认的Pod CIDR使用的是192.168.0.0/16
,这里一般使用与controller-manager中的--cluster-cidr
保持一,取消资源清单内的 CALICO_IPV4POOL_CIDR
变量的注释,并将其设置为与所选Pod CIDR相同的值。
calico的IP分配范围
Calico IPAM从ipPool
分配IP地址。修改Pod的默认IP范围则修改清单calico.yaml
中的 CALICO_IPV4POOL_CIDR
配置Calico的 IP in IP
默认情况下,Calico中的IPIP已经禁用,这里使用的v3.17.2 低版本默认会使用IPIP
要开启IPIP mode则需要修改配置清单内的 CALICO_IPV4POOL_IPIP
环境变量改为 always
修改secret
|
|
修改configMap
|
|
在卷装载中设置440将解决此问题
/calico-secrets/etcd-cert: permission denied
|
|
找到资源清单内的对应容器(calico-kube-controllers
)的配置。
|
|
使用单独的etcd作为calico数据存储还需要修改calicoctl数据存储访问配置
calicoctl
在默认情况下,查找配置文件的路径为/etc/calico/calicoctl.cfg
上。可以使用--config
覆盖此选项默认配置。
如果calicoctl
无法获得配置文件,将检查环境变量。
|
|
reference:
|
|
集群节点损坏
|
|
这是k8s不支持当前calico版本的原因, calico版本与k8s版本支持关系可到calico官网查看:
|
|
配置SW
|
|
配置路由器间的ospf
|
|
配置两个k8s节点与路由器之间的bgp
|
|