k8s网络基础

1. CNM模型

DOCKER公司提出,主要通过如下三个组件实现:

1.1 Network Sandbox

  • 作用: 容器内部网络栈,包括网络接口、路由表、DNS等配置的管理。
  • 实现:可用 linux网络命名空间、FreeBSD Jail等机制实现
  • 说明:一个Sandbox可以包含多个Endpoint。

1.2 Endpoint

  • 作用:用于将容器内部Sandbox与外部网络相连的网络接口。
  • 实现:可用veth对、Open vSwitch内部port等技术实现。
  • 说明:一个Endpoint仅可加入一个Network

1.3 Network

  • 作用:可以直接相互连接的Endpoint的集合。
  • 实现:可用linux网桥、VLAN等技术实现。
  • 说明:一个Network包含多个Endpoint

2. CNI模型

由CoreOS公司提出的一种容器网络规范。被kubernetes等项目采纳。
其对容器网络的设置和操作都通过插件完成,有如下两种类型:

2.1 CNI Plugin

作用:负责为容器配置网络资源。

包括如下3个基本接口的定义:

  • ADD:将容器添加到某个网络
  • DELETE:容器销毁时将容器从某个网络中删除
  • CHECK:检查容器网络是否正确
  • VERSION:查询网络插件支持的CNI规范版本号

2.2 IPAM Plugin

作用:负责对容器的IP地址进行分配和管理。如:为容器分配IP、网关、路由、DNS。


下边介绍集中常用的网络组件

3. Flannel

3.1 实现原理

1) 协助kubernetes,给每个node上的容器分配互不冲突的IP地址
2)建立一个覆盖网络(Overlay Network),通过该网络将数据原封不动的传给目标容器。

3.2 网络架构

image.png
  • flannel0的网桥一端谅解docker0,一端连接flanneld 服务进程

  • flanneld进程连接etcd
    利用etcd管理可分配的IP地址网段资源
    监控etcd中每个Pod的实际地址,并在内存中建立一个Pod节点的路由表

  • flanneld进程下连docker0和物理网络
    使用内存中的Pod路由表,将docker0发来的数据包包装起来,利用物理网络投递到目标flanneld上。
    目标flanneld解包,发送给docker0(因此daocker0得到的是原始数据)

4. calico-BGP模式

4.1 实现原理

一个基于BGP的纯三层网络方案
在每个计算节点上由一个vRouter 来负责转发,每个vRouter通过BGP1协议把本节点上运行的容器路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则

4.2网络架构

image.png

4.3 calico 组件

  • Felix:
    是一个Calico Agent,运行在每个node上,负责为容器设置网络资源(如IP地址、路由规则、iptables规则等),保证跨主机容器网络互通

  • etcd:后端存储

  • BGP Client
    负责把Felix在各Node上设置的路由信息通过BGP协议广播到Calico网络

  • Route Reflector:
    通过一个或多个BGP Reflector 来完成大规模集群的分级路由分发

  • CalicoCtl
    Calico的命令行管理工具。

4.4 IP Pool 的两种模式

  • IPIP模式
    将各Node的路由之间做一个tunnel,再把两个网络连接起来。如图所示:
image.png
  • BGP模式
    直接使用物理机作为虚拟路由器(vRouter),不再创建额外的tunnel

  • 设置方法
    calico-node的容器中变量设置为:
    ipip模式: CALICO_IPV4POOL_IPIP="always"
    BGP模式: CALICO_IPV4POOL_IPIP="off"


你可能感兴趣的:(k8s网络基础)