一、overlay網絡
1、容器網段獨立,不存在於物理世界。
2、container1是172.168.1.200,發包給172.168.1.201。container1發出的包首先默認網關到所在node1,這一步操作是很常規的。
3、包進入node1后,經過netfilters入包流程,判定匹配路由規則:
172.168.1.201/32 via 192.168.2.101 dev tun0
這條規則的特殊之處在於,tun0是一個隧道設備,這條規則中的via將會指導tun0將流入的包進行2層封裝IP頭,將實際目標IP地址設置為192.168.2.101,源地址也將改為192.168.2.100。
4、原先的IP包作為payload封裝在新的IP頭內,因為新的目標IP地址和源地址都是物理世界IP,可以經過任意網絡結構傳輸。node2收到包后,會自動拆去IP封裝得到payload中的原始IP包,然后經過netfilters判斷路由后,將法網container2 IP的包送入容器的虛擬網卡
二、flannel的配置文件的目錄
Ⅰ、指定pod的網段 kubeadm init --pod-network-cidr=10.244.0.0/16
Ⅱ、subnet.env文件目錄 /run/flannel
[root@k8s-master flannel]# cat subnet.env FLANNEL_NETWORK=10.244.0.0/16 FLANNEL_SUBNET=172.100.0.1/24 FLANNEL_MTU=1450 FLANNEL_IPMASQ=true
三、flannel的原理
1、Flannel為每個host分配一個subnet,容器從這個subnet中分配IP,這些IP可以在host間路由,容器間無需使用nat和端口映射即可實現跨主機通信
2、每個subnet都是從一個更大的IP池中划分的,flannel會在每個主機上運行一個叫flanneld的agent,其職責就是從池子中分配subnet
3、建立一個覆蓋網絡(overlay network),通過這個覆蓋網絡,將數據包原封不動的傳遞到目標容器Flannel使用etcd存放網絡配置、已分配
的subnet、host的IP等信息
4、Flannel數據包在主機間轉發是由backend實現的,目前已經支持UDP、VxLAN、host-gw、AWS VPC和GCE路由等多種backend
四、flannel的架構圖