kubernetes-flannel

在多个Node组成的Kubernetes集群内,跨主机的容器间网络互通是Kubernetes集群能够正常工作的前提条件。Kubernetes本身并不会对跨主机容器网络进行设置,这需要额外的工具来实现,开源工具flannel,Open vSwitch,Weave,Calico等都能实现跨主机的容器之间网络互通,

1. flannel(覆盖网络)

flannel采用覆盖网络(Overlay Network)模型来完成对网络的打通

1.1 安装etcd

由于flannel使用etcd作为数据库,需要安装etcd

https://blog.csdn.net/wanchaopeng/article/details/102912191

设置etcd为外网访问http://192.168.1.53:6379

1.2 安装flannel

需要在每台node上安装flannel,falnnel下载地址为

https://github.com/coreos/flannel/releases

下载压缩包flannel-<version>-linux-amd64.tar.gz解压,把二进制文件flanneld和mk-docker-opts.sh复制到/usr/bin(或其他PATH环境变量中的目录),即可完成对flannel的安装。

[root@node_01 /home/tools]# mv flanneld mk-docker-opts.sh /usr/bin/

1.3 配置flannel

对flanneld服务进行配置

 vim /usr/lib/systemd/system/flanneld.service
[Unit]
Description=flannel

[Service]
ExecStart=/usr/bin/flanneld \
-etcd-endpoints=http://192.168.1.53:2379

[Install]
WantedBy=multi-user.target

编辑配置文件/etc/sysconfig/flannel,设置etcd的URL地址

# flanneld configuration options

# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD="http://192.168.1.53:2379"

# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_KEY="/coreos.com/network"

        在启动flanneld服务之前,需要在etcd中添加一条网络配置记录,这个配置将用于flanneld 分配给每个Docker的虚拟IP地址段

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

1.4 由于flannel将覆盖docker0 网桥,所以如果Docker服务已启动,则停止Docker服务

1.5 启动flanneld 服务

systemctl restart flanneld 

1.6 设置docker0网桥的Ip地址

mk-docker-opts.sh -i 
source /run/flannel/subnet.env
ifconfig docker0 $FLANNEL_SUBNET

 cat subnet.env

FLANNEL_NETWORK=10.1.0.0/16
FLANNEL_SUBNET=10.1.81.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false

完成后确认网络接口docker 0的IP地址属于flannel0的子网;

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 10.1.81.1  netmask 255.255.255.0  broadcast 10.1.81.255
flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1472
        inet 10.1.81.0  netmask 255.255.255.255  destination 10.1.81.0

1.7 重新启动docker

systemctl restart docker 

完成flannel覆盖网络的设置

        使用ping命令验证各Node上docker0之间的相互访问。例如在Node(docker0 IP=10.1.10.1)机器上ping Nod2的docker0(docker0's IP=10.1.30.1),通过flannel能够成功链接到其他物理机的Docker网络

我们也可以在etcd中查看flannel设置的flannel0地址与物理机IP地址的对应规则

etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/10.1.71.0-24
/coreos.com/network/subnets/10.1.8.0-24
/coreos.com/network/subnets/10.1.81.0-24
[root@kubernetes /etc/etcd]# etcdctl get /coreos.com/network/subnets/10.1.71.0-24
{"PublicIP":"192.168.1.53"}
[root@kubernetes /etc/etcd]# etcdctl get /coreos.com/network/subnets/10.1.8.0-24
{"PublicIP":"192.168.1.51"}
[root@kubernetes /etc/etcd]# etcdctl get /coreos.com/network/subnets/10.1.81.0-24
{"PublicIP":"192.168.1.52"}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值