總體架構目錄:ASP.NET Core分佈式項目實戰-目錄html
k8s架構目錄:Kubernetes(k8s)集羣部署(k8s企業級Docker容器集羣管理)系列目錄node
flannel是CoreOS提供用於解決Dokcer集羣跨主機通信的覆蓋網絡工具。它的主要思路是:預先留出一個網段,每一個主機使用其中一部分,而後每一個容器被分配不一樣的ip;讓全部的容器認爲你們在同一個直連的網絡,底層經過UDP/VxLAN等進行報文的封裝和轉發。docker
引用官方給出的圖片服務器
那麼一條網絡報文是怎麼從一個容器發送到另一個容器的呢?微信
一、容器直接使用目標容器的ip訪問,默認經過容器內部的eth0發送出去。
二、報文經過veth pair被髮送到vethXXX。
三、vethXXX是直接鏈接到虛擬交換機docker0的,報文經過虛擬bridge docker0發送出去。
四、查找路由表,外部容器ip的報文都會轉發到flannel0虛擬網卡,這是一個P2P的虛擬網卡,而後報文就被轉發到監聽在另外一端的flanneld。
五、flanneld經過etcd維護了各個節點之間的路由表,把原來的報文UDP封裝一層,經過配置的iface發送出去。
六、報文經過主機之間的網絡找到目標主機。
七、報文繼續往上,到傳輸層,交給監聽在8285端口的flanneld程序處理。
八、數據被解包,而後發送給flannel0虛擬網卡。
九、查找路由表,發現對應容器的報文要交給docker0。
十、docker0找到連到本身的容器,把報文發送過去。網絡
根據以前文章中的環境規劃,flanneld環境目前是部署在node節點上。(連個node服務器都按此步驟操做便可)架構
須要兩個文件,一個是flanneld 二進制包、一個是配置文件生成命令文件(此文件須要入QQ羣找羣主獲取,QQ羣號在下面)asp.net
cp flanneld mk-docker-opts.sh /opt/kubernetes/bin/分佈式
命令:工具
/opt/kubernetes/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.161.151:2379,https://192.168.161.152:2379,https://192.168.161.153:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
第一:在cfg中建立 flanneld 文件:vi /opt/kubernetes/cfg/flanneld
FLANNEL_OPTIONS="--etcd-endpoints=https://192.168.161.151:2379,https://192.168.161.152:2379,https://192.168.161.153:2379 -etcd-cafile=/opt/kubernetes/ssl/ca.pem -etcd-certfile=/opt/kubernetes/ssl/server.pem -etcd-keyfile=/opt/kubernetes/ssl/server-key.pem"
第二:建立 docker.service => /usr/lib/systemd/system/docker.service
第三:建立 /usr/lib/systemd/system/flanneld.service
systemctl start flanneld
systemctl enable flanneld
systemctl daemon-reload
systemctl restart docker
asp.net Core 交流羣:787464275 歡迎加羣交流
若是您認爲這篇文章還不錯或者有所收穫,您能夠點擊右下角的【推薦】按鈕精神支持,由於這種支持是我繼續寫做,分享的最大動力!
微信公衆號:歡迎關注 QQ技術交流羣: 歡迎加羣