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