Kubernetes网络插件详解 - Calico篇 - 概述

1.1.容器网络及策略

Kubernetes本身并没有自己实现容器网络,而是借助CNI标准,通过插件化的方式来集成各种网络插件,实现集群内部网络相互通信。任何人都可以编写CNI插件,只要实现CNI标准中定义的核心接口操作(ADD,将容器添加到网络;DEL,从网络中删除一个容器;CHECK,检查容器的网络是否符合预期等)。CNI插件通常聚焦在容器到容器的网络通信,Kubernetes构造的Services网络服务仍然是由kube-proxy处理,通过主机的IPtables确定Service后端的Pod服务,通过CNI插件将网络报文转发到目标Pod,如下图所示:

Kubernetes网络插件详解 - Calico篇 - 概述_第1张图片

CNI的接口并不是指HTTP,gRPC这种接口,CNI接口是指对可执行程序的调用(exec)可执行程序,Kubernetes节点默认的CNI插件路径为/opt/cni/bin。

Kubernetes网络插件详解 - Calico篇 - 概述_第2张图片

CNI通过JSON格式的配置文件来描述网络配置,当需要设置容器网络时,由容器运行时负责执行CNI插件,并通过CNI插件的标准输入(stdin)来传递配置文件信息,通过标准输出(stdout)接收插件的执行结果。从网络插件功能可以分为五类:

Kubernetes网络插件详解 - Calico篇 - 概述_第3张图片

(一)Main插件,创建具体网络设备(bridge:网桥设备,连接container和host;ipvlan:为容器增加ipvlan网卡;loopback:IO设备;macvlan:为容器创建一个MAC地址;ptp:创建一对Veth Pair;vlan:分配一个vlan设备;host-device:将已存在的设备移入容器内)。

(二)IPAM插件:负责分配IP地址(dhcp:容器向DHCP服务器发起请求,给Pod发放或回收IP地址;host-local:使用预先配置的IP地址段来进行分配;static:为容器分配一个静态IPv4/IPv6地址,主

你可能感兴趣的:(网络,kubernetes,docker)