Kubernetes Flannel网络部署

之前的博客已经介绍了部署一个简单的Kubernetes集群,但是这个集群环境没有一个合理的网络配置。在实际生产中要实现集群中各个组件的通信,就需要使用第三方提供的网络插件。

Flannel 二进制安装

1、下载fannel组件

wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz

2、安装Flannel 网络组件

tar xf flannel-v0.10.0-linux-amd64.tar.gz
cp flanneld  /usr/bin/
cp mk-docker-opts.sh  /usr/bin/

3、由于是二进制的文件,将flanneld拷贝到有系统环境变量的可执行路径就完成了安装。下面讲解具体的配置过程和原理。

Flannel 配置

我们之所以要单独使用第三方的网络插件来扩展k8s,主要原因是在使用docker的环境中,在每个node节点的docker0默认的网段都是172.17.0.0/16的网络。如果要实现不同宿主node上pod(这里也可以理解为容器)互相通信,就不能使用默认的docker0提供的网段,我们需要部署一个覆盖网络,让每个node节点的docker0网络都处于不同的网段,这样,通过添加一些路由转发策略,就能让集群中各个pod在同一个虚拟的网络中实现通信。

1、这里编写flanneld的systemd文件:

# cat /usr/lib/systemd/system/flanneld.service 

[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
Before=docker.service

[Service]
EnvironmentFile=-/etc/kubernetes/flanneld
ExecStartPre=/usr/bin/remove-docker0.sh
ExecStart=/usr/bin/flanneld  ${FLANNEL_ETCD} $FLANNEL_OPTIONS
ExecStartPost=/usr/bin/mk-docker-opts.sh -d /run/flannel/docker
Type=notify

[Install]
WantedBy=multi-user.target
RequiredBy=docker.service

对上面的文件做一下解释:

  • Flannel网络必须在宿主机网络能对外(其它node节点)正常通信的情况下启动才有意义,所以这里定义 After=network.target
  • 只有当Flannel 网络启动之后,才能创建一个与其它节点不会冲突的网络,而docker的网络需要和fannel 网络相同才能保证跨主机通信,所以docker必须要在flannel网络创建后才能启动,这里定义 Before=docker.service
  • /etc/kubernetes/flanneld 文件中,我们会指定flannel相关的启动参数,这里由于需要指定etcd集群,会有一部分不通用的参数,所以单独定义。
  • 当前创建flannel网络时,我们会执行 /usr/bin/remove-docker0.sh 这个脚本,将如果已经创建了docker0的网卡,就将他移除,防止产生冲突。(这个脚本来自k8s的源码包)
  • 启动之后,我们需要使用fannel自带的脚本,创建一个docker使用的启动参数,这个参数就包含配置docker0网卡的网段。

2、配置fannel参数文件:

# cat /etc/kubernetes/flanneld 

FLANNEL_ETCD="-etcd-endpoints=http://10.0.0.1:2379"               # etcd集群
FLANNEL_ETCD_KEY="/coreos.com/network"                # etcd存储flannel网络信息的key

3、etcd中添加fannel的key, 这里指定了flannel的网段:

 etcdctl set /coreos.com/network/config ‘{ "Network": "10.1.0.0/16" }‘

4、启动fannel:

 systemctl daemon-reload
 systemctl start flanneld

docker配置

1、如果要使用flannel网络,在启动docker时,需要添加 --bip 参数,修改systemd启动文件:

#  vim /usr/lib/systemd/system/docker.service

[Unit]  # 添加如下内容
After=network-online.target firewalld.service flanneld.service
Wants=network-online.target
Requires=flanneld.service

[Service]   #增加EnvironmentFile=-/run/flannel/docker,并添加参数
 ...
EnvironmentFile=-/run/flannel/docker
ExecStart=/usr/bin/dockerd  $DOCKER_OPTS
 ... 

修改配置说明:

  • docker的网络配置需要依赖于Fannel, 所以定义 Requires=flanneld.service
  • 运行docker时,需要加载配置参数,而此文件是执行flannel脚本后生成的。
  • 在启动docker是指定参数。

2、验证docker0信息:

[[email protected] ~]# ifconfig docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 10.1.90.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:44:54:5b:c5  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3、在每个节点部署flannel,之后可以创建pod,验证不同节点上的pod能否ping通。这里就不做演示,可以参考我之前的博客。

Flannel 网络原理

Flannel是如何做到让不同主机上的pod 互通呢,下面的网络图很清楚的解释了这个问题:

原文地址:http://blog.51cto.com/tryingstuff/2121707

时间: 2024-11-04 10:54:39

Kubernetes Flannel网络部署的相关文章

Flannel网络部署

一.Flannel网络部署 为Flannel生成证书 [[email protected] ssl]# vim flanneld-csr.json { "CN": "flanneld", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C":

docker flannel网络部署和路由走向分析

1.flannel介绍 flannel是coreos开发的容器网络解决方案.flannel为每个host分配一个subnet,容器从此subnet中分配ip.这些ip可以在host间路由,容器间无需nat和port mapping就可以跨主机通讯. 每个subnet都是从一个更大的ip池中划分的,flannel会在每个主机上运行一个叫flanneld得agent,其职责是从ip池中分配subnet.为了在各个主机间共享信息,flannel用etcd存放网络配置,已分配的subnet,host的i

docker管理神器—kubernetes—flannel网络篇

直接启动: 5.1.flannel介绍 flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络 (overlay network) 工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网.Kubernetes 会为每一个 POD 分配一个独立的 IP 地址,这样便于同一个 POD 中的 Containers 彼此连接,flannel通过在集群中创建一个覆盖网格网络 (overlay mesh network) 为主机设定一个子

部署Flannel网络

部署Flannel网络 部署flannel网络需要执行以下步骤: 1)写入分配的子网段到etcd,供flanneld使用 2)下载二进制包 3)配置Flannel 4)systemd管理Flannel 5)配置Docker启动指定子网段 6)启动 第一步:下载flannel二进制包 wget https://github.com/coreos/flannel/releases/download/v0.9.1/flannel-v0.9.1-linux-amd64.tar.gz 第二步:解压flan

kubernetes之Flannel网络插件部署

Kubernetes系统上Pod网络的实现依赖于第三方插件,而Flannel是由CoreOS主推的目前比较主流的容器网络解决方案,CNI插件有两种功能:网络配置和网络策略,由于flannel比较简单,并不支持网络策略,flannel项目自身只是一个框架,真正提供网络功能的是它的后端实现,目前,Flannel支持三种不同后端实现,分别是: UDP VXLAN host-gw UDP是Flannel项目最早支持的一种方式,是性能最差的方式,目前已被废弃. 用的最多的是VXLAN和host-gw模式的

kubernetes容器集群部署Flannel网络

Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来. VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封并将数据发送给目的地址. Fannel:Overlay网络的一种,也是将源数据包封装在另一种网络包里面进行路由转发和通信,目前已经支持UDP.VXLAN.AWS VPC和GCE路由等数据转发方式. 多主机容器网络通信其他主流方案:隧道方案(We

Flannel网络组件部署

在部署K8S之前,需要在集群服务器上部署CNI容器网络组件,从而实现集群的网络互联互通.目前可选的组件比较多,例如flannel.calico.weave等,各容器网络组件对比可参考文档:http://dockone.io/article/2599 本文介绍flannel网络组件的部署,配置环境在完成前文etcd集群和tls认证配置后.一.生成flannel证书文件 # mkdir flanneld # cd flanneld # cat flanneld-csr.json { "CN"

二进制搭建kubernetes多master集群【二、配置flannel网络】

上一篇我们已经搭建etcd高可用集群,参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集群] 此文将搭建flannel网络,目的使跨主机的docker能够互相通信,也是保障kubernetes集群的网络基础和保障,下面正式开始配置. 一.部署 Flannel 在所有集群节点都安装Flannel,下面的操作以etcd集群的三个节点为例都执行一遍 1.下载安装Flannel wget https://github.com/coreos/flannel/relea

kubernetes使用flannel网络插件服务状态显示CrashLoopBackOff

使用Kubeadm安装K8s集群,在安装flannel网络插件后,发现pod: kube-flannel-ds 一直是CrashLoopBackOff 报错内容如下: log is DEPRECATED and will be removed in a future version. Use logs instead. I0823 03:28:21.342352 1 main.go:514] Determining IP address of default interface I0823 03