二進制文件安裝安裝flannel
overlay網絡簡介
覆蓋網絡就是應用層網絡,它是面向應用層的,不考慮或很少考慮網絡層,物理層的問題。
詳細說來,覆蓋網絡是指建立在另一個網絡上的網絡。該網絡中的結點可以看作通過虛擬或邏輯鏈路而連接起來的。雖然在底層有很多條物理鏈路,但是這些虛擬或邏輯鏈路都與路徑一一對應。例如:許多P2P網絡就是覆蓋網絡,因為它運行在互連網的上層。覆蓋網絡允許對沒有IP地址標識的目的主機路由信息,例如:Freenet 和DHT(分布式哈希表)可以路由信息到一個存儲特定文件的結點,而這個結點的IP地址事先並不知道。
覆蓋網絡被認為是一條用來改善互連網路由的途徑,讓二層網絡在三層網絡中傳遞,既解決了二層的缺點,又解決了三層的不靈活!
Flannel的工作原理
Flannel實質上是一種“覆蓋網絡(overlay network)”,也就是將TCP數據包裝在另一種網絡包里面進行路由轉發和通信,目前已經支持UDP、VxLAN、AWS VPC和GCE路由等數據轉發方式。
默認的節點間數據通信方式是UDP轉發。

工作原理
數據從源容器中發出后,經由所在主機的docker0虛擬網卡轉發到flannel0虛擬網卡,這是個P2P的虛擬網卡,flanneld服務監聽在網卡的另外一端。
Flannel通過Etcd服務維護了一張節點間的路由表,詳細記錄了各節點子網網段 。
源主機的flanneld服務將原本的數據內容UDP封裝后根據自己的路由表投遞給目的節點的flanneld服務,數據到達以后被解包,然后直接進入目的節點的flannel0虛擬網卡,然后被轉發到目的主機的docker0虛擬網卡,最后就像本機容器通信一下的有docker0路由到達目標容器。
#by love19791126 107420988@qq.com # 安裝flannel 在node01-02節點部署 # vim /etc/profile # PATH=$PATH:/opt/kubernetes/bin # source /etc/profile
#設置網絡 在master執行 etcdctl --ca-file=/opt/kubernetes/ssl/ca.pem --cert-file=/opt/kubernetes/ssl/server.pem --key-file=/opt/kubernetes/ssl/server-key.pem --endpoints="https://192.168.1.251:2379,https://192.168.1.252:2379,https://192.168.1.253:2379" set /coreos.com/network/config '{"Network":"172.17.0.0/16","Backend":{"Type":"vxlan"}}'
#解壓fannle 在master執行 tar zxvf flannel-v0.11.0-linux-amd64.tar.gz
#scp文件到節點 在master執行 scp flanneld mk-docker-opts.sh root@192.168.1.252:/opt/kubernetes/bin/ scp flanneld mk-docker-opts.sh root@192.168.1.253:/opt/kubernetes/bin/
#配置文件 在node01-02節點部署 vim /opt/kubernetes/cfg/flannel FLANNEL_OPTIONS="--etcd-endpoints=https://192.168.1.251:2379,https://192.168.1.252:2379,https://192.168.1.253:2379 -etcd-cafile=/opt/kubernetes/ssl/ca.pem --etcd-certfile=/opt/kubernetes/ssl/server.pem --etcd-keyfile=/opt/kubernetes/ssl/server-key.pem"
#修改docker啟動文件 在node01-02節點部署 vim /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify EnvironmentFile=-/run/flannel/subnet.env ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS ExecReload=/bin/kill -s HUP $MAINPID TimeoutStartSec=0 Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target
#加載配置文件 在node01-02節點部署 systemctl daemon-reload systemctl start docker
#配置flanneld文件 在node01-02節點部署 vim /opt/kubernetes/cfg/flanneld.service [Unit] Description=Flannel overlay address etcd agent After=network-online.target network.target Before=docker.service [Service] Type=notify EnvironmentFile=/opt/kubernetes/cfg/flannel ExecStart=/opt/kubernetes/bin/flanneld --ip-masq $FLANNEL_OPTIONS ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env Restart=on-failure [Install] WantedBy=multi-user.target
#加載配置文件 啟動flannel 在node01-02節點部署 cp /opt/kubernetes/cfg/flanneld.service /usr/lib/systemd/system/flanneld.service systemctl daemon-reload systemctl start flanneld systemctl restart docker
#查看網絡 etcdctl --ca-file=/opt/kubernetes/ssl/ca.pem --cert-file=/opt/kubernetes/ssl/server.pem --key-file=/opt/kubernetes/ssl/server-key.pem --endpoints="https://192.168.1.251:2379,https://192.168.1.252:2379,https://192.168.1.253:2379" ls /coreos.com/network/subnets
#獲取容器是在那個節點上 etcdctl --ca-file=/opt/kubernetes/ssl/ca.pem --cert-file=/opt/kubernetes/ssl/server.pem --key-file=/opt/kubernetes/ssl/server-key.pem --endpoints="https://192.168.1.251:2379,https://192.168.1.252:2379,https://192.168.1.253:2379" get /coreos.com/network/subnets/172.17.98.0-24