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 

posted @ 2020-11-27 09:46  南昌拌粉的成长  阅读(525)  评论(0编辑  收藏  举报