K8S 网络
一、flannel
Flannel.1是一个overlay网络的设备,用来进行vxlan报文的处理(封包和解包),不同node之间的pod数据流量就是从overlay设备以隧道的形式发送到对端

->:pod中产生数据,根据pod的路由信息,将数据发送到cni0 ->:Cni0根据节点的路由表,将数据发送到隧道设备Flannel.1 ->:Flannel.1查看数据包的目的ip,从flanneld获得对端隧道设备的必要信息,封装数据包 ->:Flannel.1将数据包发送到对端设备,对端节点的网卡接收到数据包 ->:对端节点发现数据包为overlay数据包,解开外层封装,并发送到本机flannel.1设备 ->:Flannel.1设备查看数据包,根据路由表匹配,将数据发送到Cni0设备 ->:Cni0匹配路由表,发送数据给网桥上对应的端口(pod)
二、calico介绍
Calico节点组网可以直接利用数据中心的网络结构(支持L2或者L3),不需要额外的NAT、端口映射、隧道或者VXLAN overlay network,扩展性和性能都很好,

二、calico部署
calico核心组件:
Felix:calico的agent,运行在每一台node节点上,其主要是维护路由规则,汇报当前节点状态以确保pod的跨主机通信 BGP Client:每台node都运行,其主要是负责监听node节点上由felix生成的路由信息,然后通过BGP协议广播至其他剩余的node节点,从而相互学习路由实现pod通信 Route Reflector:集中式的路由反射器,calico V3.3开始支持,当calicoBgp客户端将路由从其FIB(Forward Information database,转发信息库)通告到Route Reflector时,Route Reflector会将这些路由通过给部署集群中的其他节点,
Route Reflector专门用于管理BGP网络路由规则,不会产生pod数据通信
1、部署calico认证:
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
2、下载calico配置文件
wget https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
3、配置文件解析
kind: ConfigMap
apiVersion: v1
metadata:
name: calico-config
namespace: kube-system
data:
# To enable Typha, set this to "calico-typha" *and* set a non-zero value for Typha replicas
# below. We recommend using Typha if you have more than 50 nodes. Above 100 nodes it is
# essential.
typha_service_name: "none"
# Configure the Calico backend to use.
calico_backend: "bird" //Calico的后端,默认为bird
# Configure the MTU to use
veth_mtu: "1440"
# The CNI network configuration to install on each node. The special
# values in this config will be automatically populated.
cni_network_config: |- //符合CNI规范的网络配置,其中type=calico表示,Kubelet从 CNI_PATH(默认为/opt/cni/bin)找名为calico的可执行文件,用于容器IP地址的分配
{
"name": "k8s-pod-network",
"cniVersion": "0.3.0",
"plugins": [
二、查看calico的配置
# kubectl describe IPPool default-ipv4-ippool
Name: default-ipv4-ippool
Namespace:
Labels: <none>
Annotations: projectcalico.org/metadata: {"uid":"3507663f-f659-11ea-bd73-b4055d102a60","creationTimestamp":"2020-09-14T07:09:19Z"}
API Version: crd.projectcalico.org/v1
Kind: IPPool
Metadata:
Creation Timestamp: 2020-09-14T07:09:19Z
Generation: 2
Resource Version: 353676851
Self Link: /apis/crd.projectcalico.org/v1/ippools/default-ipv4-ippool
UID: 35077770-f659-11ea-bb45-6c92bffa81a2
Spec:
Block Size: 26
Cidr: 10.42.0.0/16 //子网的范围
Ipip Mode: CrossSubnet //子网的模式
Nat Outgoing: true
Events: <none>
三、数据包转发过程

1、3层方案则pod和node ip不同,其本质是在node下发pod ip的路由规则,令pod ip可以物理3层送达pod所在node。
host-gw 模式的工作原理,其实就是将每个 Flannel 子网(Flannel Subnet,比如:10.244.1.0/24)的“下一跳”,设置成了该子网对应的宿主机的 IP 地址。
2、所以说,Flannel host-gw 模式必须要求集群宿主机之间是二层连通的
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 169.254.1.1 0.0.0.0 UG 0 0 0 eth0 169.254.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
四、配置文件解析
配置文件目录:/etc/cni/net.d/10-calico.conflist

浙公网安备 33010602011771号