0、背景及calico简介

为了搞定 AI on k8s的网络环境,即夸节点容器通信的问题,在k8s多个网路解决方案中选择了延迟表现最好的-calico方案,本文主要介绍calico 架构、组件及网络通信原理,更多的细节在之后的文章中分享。
Calico是一个纯3层的数据中心网络方案,而且无缝集成像OpenStack这种IaaS云架构,能够提供可控的VM、容器、裸机之间的IP通信。
Calico的原理是通过修改每个主机节点上的iptables和路由表规则,实现容器间数据路由和访问控制,并通过Etcd协调节点配置信息的。因此Calico服务本身和许多分布式服务一样,需要运行在集群的每一个节点上。

一、calico on k8s 架构

calico on k8s 架构
主要组件:

  • Felix:Calico Agent,跑在每台需要运行Workload的节点上,主要负责配置路由及ACLs等信息来确保Endpoint的连通状态;
  • etcd:分布式键值存储,主要负责网络元数据一致性,确保Calico网络状态的准确性;
  • BGP Client(BIRD):主要负责把Felix写入Kernel的路由信息分发到当前Calico网络,确保Workload间的通信的有效性;
  • BGP Route Reflector(BIRD):大规模部署时使用,摒弃所有节点互联的mesh模式,通过一个或者多个BGP Route Reflector来完成集中式的路由分发。

二、calico 夸节点容器通讯分析

calico 跨节点通信的模式: IPIP模式(默认)和BGP模式(需要交换机支持BGP协议)。
其中IPIP模式分为两种CrossSubnet (我们采用的模式)和 ALL; ALL:所有节点通信都通过ip隧道,CrossSubnet: 跨网段的使用ip 隧道,走三层,通过tunl0网口转发,同一网段的直接把宿主机作为路由,走二层,通过eth0网口转发。

CrossSubnet同一网段实例 (10.10.102.67 和 10.10.102.68 主机上容器通信)

在这里插入图片描述

CrossSubnet夸网段实例(10.39.14.92 和 10.39.66.182 主机上容器通信),使用ip隧道

calico 夸网段通信实例

在这里插入图片描述
从源容器经过源宿主机,经过数据中心的路由,然后到达目的宿主机最后分配到目的容器的过程,整个过程中始终都是根据iptables规则进行路由转发,并没有进行封包,解包的过程。

ip隧道协议栈

在这里插入图片描述

三、k8s 上部署 calico

在kube-system namespace上部署calico服务

kubectl create -f calico.yaml

calico.yaml下载地址
部署完成,pod 情况:
在这里插入图片描述

四、Reference

calico controller :https://docs.projectcalico.org/v3.3/reference/kube-controllers/configuration

calico cni : https://docs.projectcalico.org/v3.3/reference/cni-plugin/configuration

k8s 网络策略: http://docs.kubernetes.org.cn/777.html and https://segmentfault.com/a/1190000012692009

docker 网络模式原理:https://blog.csdn.net/horsefoot/article/details/51245163

k8s 网络模式原理:https://www.kubernetes.org.cn/2059.html

calico controller git https://github.com/projectcalico/kube-controllers

calico cni git https://github.com/projectcalico/cni-plugin

calico node https://github.com/projectcalico/node

calico felix https://github.com/projectcalico/felix

calico bird https://github.com/projectcalico/bird

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐