VXLAN:將源數據包封裝到UDP中,并使用基礎網絡的 IP/MAC作為外層報文頭進行封裝,然后在以太網上傳輸,到達目的地后由隧道端點解封裝并將數據發送給目標地址
Flannel:是Overlay網絡的一種,也是將源數據包封裝在另一種網絡包里面進行路由轉發和通信,目前已經支持UDP、VXLAN、AWS、VPC和GCE路由等數據轉發方式

Flannel簡介

Flannel是 CoreOS 團隊針對 Kubernetes 設計的一個覆蓋網絡(Overlay Network)工具,其目的在于幫助每一個使用 Kuberentes 的 CoreOS 主機擁有一個完整的子網
Flannel通過給每臺宿主機分配一個子網的方式為容器提供虛擬網絡,它基于Linux TUN/TAP,使用UDP封裝IP包來創建overlay網絡,并借助etcd維護網絡的分配情況。

Flannel原理

Flannel是CoreOS團隊針對Kubernetes設計的一個網絡規劃服務,簡單來說,它的功能是讓集群中的不同節點主機創建的Docker容器都具有全集群唯一的虛擬IP地址。
在默認的Docker配置中,每個Node的Docker服務會分別負責所在節點容器的IP分配。Node內部得容器之間可以相互訪問,但是跨主機(Node)網絡相互間是不能通信。
Flannel設計目的就是為集群中所有節點重新規劃IP地址的使用規則,從而使得不同節點上的容器能夠獲得"同屬一個內網"且"不重復的"IP地址,并讓屬于不同節點上的容器能夠直接通過內網IP通信。
Flannel 使用etcd存儲配置數據和子網分配信息。flannel 啟動之后,后臺進程首先檢索配置和正在使用的子網列表,然后選擇一個可用的子網,然后嘗試去注冊它。
etcd也存儲這個每個主機對應的ip。flannel 使用etcd的watch機制監視/coreos.com/network/subnets下面所有元素的變化信息,并且根據它來維護一個路由表。
為了提高性能,flannel優化了Universal TAP/TUN設備,對TUN和UDP之間的ip分片做了代理。

Flannel原理圖

如圖所示Flannel的工作原理可以解釋為:

數據從源容器中發出后,經由所在主機的docker0虛擬網卡轉發到flannel0虛擬網卡,這是個P2P的虛擬網卡,flanneld服務監聽在網卡的另外一端。
Flannel通過Etcd服務維護了一張節點間的路由表,該張表里保存了各個節點主機的子網網段信息。
源主機的flanneld服務將原本的數據內容UDP封裝后根據自己的路由表投遞給目的節點的flanneld服務,數據到達以后被解包,然后直接進入目的節點的flannel0虛擬網卡,然后被轉發到目的主機的docker0虛擬網卡,最后就像本機容器通信一樣的由docker0路由到達目標容器。

除了UDP,Flannel還支持很多其他的Backend:

udp:使用用戶態udp封裝,默認使用8285端口。由于是在用戶態封裝和解包,性能上有較大的損失
vxlan:vxlan封裝,需要配置VNI,Port(默認8472)和GBP
host-gw:直接路由的方式,將容器網絡的路由信息直接更新到主機的路由表中,僅適用于二層直接可達的網絡
aws-vpc:使用 Amazon VPC route table 創建路由,適用于AWS上運行的容器
gce:使用Google Compute Engine Network創建路由,所有instance需要開啟IP forwarding,適用于GCE上運行的容器
ali-vpc:使用阿里云VPC route table 創建路由,適用于阿里云上運行的容器

實驗部署
實驗環境

Master01:192.168.80.12
Node01:192.168.80.13
Node02:192.168.80.14
本篇實驗部署是接上篇文章部署的,所以實驗環境不變,Flannel只需要在node節點部署,master中不需要部署

Flannel部署

在node01、node02節點中部署docker容器

[root@node01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2     //安裝依賴包
已加載插件:fastestmirror
base                                                                                  | 3.6 kB  00:00:00
extras                                                                                | 2.9 kB  00:00:00
...
[root@node01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo        //設置阿里云鏡像源
已加載插件:fastestmirror
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@node01 ~]# yum install -y docker-ce           //安裝Docker-CE
已加載插件:fastestmirror
docker-ce-stable                                                                      | 3.5 kB  00:00:00
(1/2): docker-ce-stable/x86_64/updateinfo                                             |   55 B  00:00:01
(2/2): docker-ce-stable/x86_64/primary_db                                             |  37 kB  00:00:01
Loading mirror speeds from cached hostfile
...
[root@node01 ~]# systemctl start docker.service       //啟動docker服務
[root@node01 ~]# systemctl enable docker.service      //配置開機自啟
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@node01 ~]# tee /etc/docker/daemon.json <<-\\\'EOF\\\'                //配置鏡像加速
> {
>   registry-mirrors: [https://**********.aliyuncs.com]
> }
> EOF
{
registry-mirrors: [https://**********.aliyuncs.com]
}
[root@node01 ~]# systemctl daemon-reload         //重新加載進程
[root@node01 ~]# systemctl restart docker       //重啟docker
[root@node01 ~]# vim /etc/sysctl.conf           //編輯開啟路由轉發功能
...
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1
:wq
[root@node01 ~]# sysctl -p            //重新加載
net.ipv4.ip_forward = 1
[root@node01 ~]# service network restart          //重啟網絡
Restarting network (via systemctl):                        [  確定  ]
[root@node01 ~]# systemctl restart docker      //重啟docker服務
[root@node01 ~]# docker version
Client: Docker Engine - Community           //查看docker版本
Version:           19.03.5
API version:       1.40
Go version:        go1.12.12
...                       //docker服務部署完成

master01中操作

[root@master01 etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints=https://192.168.80.12:2379,https://192.168.80.13:2379,https://192.168.80.14:2379 set /coreos.com/network/config \\\'{ Network: 172.17.0.0/16, Backend: {Type: vxlan}}\\\'             //寫入分配的子網段到ETCD中,供flannel使用
{ Network: 172.17.0.0/16, Backend: {Type: vxlan}}
[root@master01 etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints=https://192.168.80.12:2379,https://192.168.80.13:2379,https://192.168.80.14:2379 get /coreos.com/network/config           //查看是否成功寫入
{ Network: 172.17.0.0/16, Backend: {Type: vxlan}}
[root@master01 etcd-cert]# cd ..         //回到k8s目錄
[root@master01 k8s]# ls                  //查看flannel軟件包是否存在
cfssl.sh   etcd-v3.3.10-linux-amd64            kubernetes-server-linux-amd64.tar.gz
etcd-cert  etcd-v3.3.10-linux-amd64.tar.gz
etcd.sh    flannel-v0.10.0-linux-amd64.tar.gz
[root@master01 k8s]# scp flannel-v0.10.0-linux-amd64.tar.gz flannel.sh root@192.168.80.13:/root   //將軟件包拷貝到node01節點
root@192.168.80.13\\\'s 
flannel-v0.10.0-linux-amd64.tar.gz                                         100% 9479KB  61.1MB/s   00:00
flannel.sh: No such file or directory
[root@master01 k8s]# scp flannel-v0.10.0-linux-amd64.tar.gz flannel.sh root@192.168.80.14:/root    //將軟件包拷貝到node02節點
root@192.168.80.14\\\'s 
flannel-v0.10.0-linux-amd64.tar.gz                                         100% 9479KB 119.3MB/s   00:00
flannel.sh: No such file or directory

node01、node02節點同步操作

[root@node01 ~]# ls            //查看軟件包是否成功拷貝
anaconda-ks.cfg  flannel-v0.10.0-linux-amd64.tar.gz
[root@node01 ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz     //解壓軟件包
flanneld
mk-docker-opts.sh
README.md
[root@node01 ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p      //遞歸創建k8s工作目錄
[root@node01 ~]# mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/   //移動腳本文件到工作目錄下的bin目錄
[root@node01 ~]# vim flannel.sh          //編輯flannel執行腳本  并生成配置文件
#!/bin/bash

ETCD_ENDPOINTS=${1:-http://127.0.0.1:2379}

cat <<EOF >/opt/kubernetes/cfg/flanneld

FLANNEL_OPTIONS=--etcd-endpoints=${ETCD_ENDPOINTS} \\\\
-etcd-cafile=/opt/etcd/ssl/ca.pem \\\\
-etcd-certfile=/opt/etcd/ssl/server.pem \\\\
-etcd-keyfile=/opt/etcd/ssl/server-key.pem

EOF

cat <<EOF >/usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service

[Service]
Type=notify
EnvironmentFile=/opt/kubernetes/cfg/flanneld
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

EOF

systemctl daemon-reload
systemctl enable flanneld
systemctl restart flanneld
:wq
[root@node01 ~]# bash flannel.sh https://192.168.80.12:2379,https://192.168.80.13:2379,https://192.168.80.14:2379          //執行flannel腳本文件開啟flannel網絡功能
Created symlink from /etc/systemd/system/multi-user.target.wants/flanneld.service to /usr/lib/systemd/system/flanneld.service.
[root@node01 ~]# vim /usr/lib/systemd/system/docker.service   //配置docker啟動腳本連接flannel
...
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
EnvironmentFile=/run/flannel/subnet.env          //添加連接運行語句
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS  -H fd:// --containerd=/run/containerd/containerd.sock                       //添加變量
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
...
:wq
[root@node01 ~]# cat /run/flannel/subnet.env      //查看docker運行時連接flannel文件
DOCKER_OPT_BIP=--bip=172.17.49.1/24
DOCKER_OPT_IPMASQ=--ip-masq=false
DOCKER_OPT_MTU=--mtu=1450
DOCKER_NETWORK_OPTIONS= --bip=172.17.49.1/24 --ip-masq=false --mtu=1450    //bip指定啟動時的子網 注意:此處node01與node02指定啟動時的子網IP地址都屬于172.17.0.0/24網段

查看網絡

[root@node01 ~]# systemctl daemon-reload      //重新加載進程
[root@node01 ~]# systemctl restart docker      //重新啟動docker
[root@node01 ~]# ifconfig                      //查看網絡信息
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
      inet 172.17.49.1  netmask 255.255.255.0  broadcast 172.17.49.255   //docker0網卡IP地址
      ...
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.80.13  netmask 255.255.255.0  broadcast 192.168.80.255
   ...
flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
    inet 172.17.49.0  netmask 255.255.255.255  broadcast 0.0.0.0      //flannel網卡地址
    ...

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    ... 

node02服務器操作


   [root@node02 ~]# ifconfig
   docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    inet 172.17.63.1  netmask 255.255.255.0  broadcast 172.17.63.255   //docker網卡信息
    ...

   ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.80.14  netmask 255.255.255.0  broadcast 192.168.80.255
    ...

  flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
    inet 172.17.63.0  netmask 255.255.255.255  broadcast 0.0.0.0     //flannel網卡信息
    ...

  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    ...
  [root@node02 ~]# ping 172.17.49.1              //使用ping命令測試網絡是否互通
  PING 172.17.49.1 (172.17.49.1) 56(84) bytes of data.
  64 bytes from 172.17.49.1: icmp_seq=1 ttl=64 time=0.344 ms
  64 bytes from 172.17.49.1: icmp_seq=2 ttl=64 time=0.333 ms
  64 bytes from 172.17.49.1: icmp_seq=3 ttl=64 time=0.346 ms
  ^C
  --- 172.17.49.1 ping statistics ---
  3 packets transmitted, 3 received, 0% packet loss, time 2000ms
  rtt min/avg/max/mdev = 0.333/0.341/0.346/0.005 ms

node01、node02節點服器操作

[root@node01 ~]# docker run -it centos:7 /bin/bash     //運行docker鏡像
Unable to find image \\\'centos:7\\\' locally
7: Pulling from library/centos
ab5ef0e58194: Pull complete
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:7
[root@e8ee45a4fd28 /]# yum install net-tools -y     //容器中安裝網絡工具
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirrors.163.com
* extras: mirrors.163.com
...

node01服器操作


   [root@e8ee45a4fd28 /]# ifconfig            //查看網卡信息
   eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
    inet 172.17.49.2  netmask 255.255.255.0  broadcast 172.17.49.255
    ...

    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    ...

node02服器操作

   [root@47aa8b55a61a /]# ifconfig          //查看網卡信息
   eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
    inet 172.17.63.2  netmask 255.255.255.0  broadcast 172.17.63.255
    ...
   lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    ...
   [root@47aa8b55a61a /]# ping 172.17.49.2     //node02服務器中docker容器使用ping命令測試與node01服務器中docker是否可以通信
   PING 172.17.49.2 (172.17.49.2) 56(84) bytes of data.
   64 bytes from 172.17.49.2: icmp_seq=1 ttl=62 time=0.406 ms
   64 bytes from 172.17.49.2: icmp_seq=2 ttl=62 time=0.377 ms
   64 bytes from 172.17.49.2: icmp_seq=3 ttl=62 time=0.389 ms
   64 bytes from 172.17.49.2: icmp_seq=4 ttl=62 time=0.356 ms
   ^C
   --- 172.17.49.2 ping statistics ---
   4 packets transmitted, 4 received, 0% packet loss, time 3001ms
   rtt min/avg/max/mdev = 0.356/0.382/0.406/0.018 ms  //成功通信

Flannel組件部署完成

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » k8s部署---Flannel組件部署(二)

登錄

找回密碼

注冊

主站蜘蛛池模板: 精品久久久久久久久午夜福利| 国产亚洲精品AA片在线爽| 成人精品国产一区二区网| 秋霞无码一区二区| 国产一区精品在线免费看| 偷拍精品一区二区三区| 国产性一交一乱一伦一色一情| 性色在线视频精品| 国产精品中文第一字幕| 少妇人妻真实偷人精品| 97精品国产91久久久久久久| 中文无码热在线视频| 国产精品夜夜春夜夜爽久久小| 少妇尿尿一区二区在线免费| 国产成人亚洲综合图区| 美女把尿囗扒开让男人添| 少妇高潮尖叫黑人激情在线| 影音先锋人妻啪啪av资源网站 | 亚洲av国产成人精品区| 汕头市| 国产精品三级中文字幕| 亚洲人成网站18禁止无码| 青青草国产线观看| 成人激情视频一区二区三区| 国色天香中文字幕在线视频| 国产亚洲精品久久久久久久软件| 灌南县| 人妻少妇偷人精品一区| 中文字幕人妻丝袜美腿乱| 亚洲av网一区天堂福利| 国产精品久久久一区二区三区| 久久99亚洲网美利坚合众国| 精品一区二区成人码动漫| 动漫AV纯肉无码AV电影网| 荡乳尤物h| 国产成人无码av大片大片在线观看 | 亚洲国产精品午夜福利| 精品久久久久久中文字幕202| 无码伊人66久久大杳蕉网站谷歌| 国产在线精品福利91香蕉| 米易县|