docker flannel网络实验

docker flannel网络实验

环境准备

主机准备

系统数量
ubuntu16.043
  • 注意,三台设备都需要装docker
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    apt-get update
    apt-get install -y docker-ce
    

架构如下

在这里插入图片描述

  • 网络部分
    网卡网段作用
    eth0172.16.80.0/24局域网内的外网网卡,可以理解为公司内网的公网
    eth110.80.0.0/24局域网的内网网卡,可以理解为公司某个机房的内网
    eth213.13.13.0/24自建局域网的网卡,可以理解为我自己创建了私有网段,只用于沟通属于我的所有的设备

etcd准备

  • 版本需求
    flannel版本etcd版本
    v0.12.03.3.20(应该是3.3.x都可以)
  • etcd下载命令
    wget https://github.com/etcd-io/etcd/releases/download/v3.3.20/etcd-v3.3.20-linux-amd64.tar.gz
  • flannel
    • flannel网上没有现成的,必须自己编译
    • 步骤(建议参考cloudman的霉天分钟学习docker的flannel部分)
      • 拉取编译所需的镜像
        docker pull cloudman6/kube-cross:v1.6.2-2
        docker tag cloudman6/kube-cross:v1.6.2-2 gcr.io/google_containers/kube-cross:v1.6.2-2
        
      • 下载flannel源码
        git clone https://github.com/coreos/flannel.git
      • 构建flannel
        cd flannel
        make dist/flanneld-amd64
        scp dist/flanneld-amd64 dockerNode2:/user/local/bin/
        scp dist/flanneld-amd64 dockerNode3:/user/local/bin/
        

flanneld vxlan网络实验

  • 启动etcd
    # 注意,这里我用的IP是eth1网卡,可以自行选择,但是选择不同网卡是否会造成其他影响目前还不清楚
    nohup etcd --listen-client-urls http://${IP}:2379 --advertise-client-urls http://10.80.0.79:2379 &
    
  • 测试etcd
    etcdctl --endpoints="http://10.80.0.79:2379" set foo "bar"
    etcdctl --endpoints="http://10.80.0.79:2379" get foo
    
    在这里插入图片描述
  • 配置用于flannel的网段信息
    • flannel的network配置示例
     {
     	"Network": "10.2.0.0/16",
     	"SubnetLen": 24,
     	"Backend": {
         	"Type": "vxlan"
      	}
     }
    
    • 添加到etcd
    # IP 需与启动时的IP相同
    etcdctl --endpoints="http://${IP}:2379" set /docker-test/network/config < ~/flannel-pkg/flannel-config.json
    
  • 启动flannel(DockerNode2 DockerNode3)
    nohup flanneld-amd64 -etcd-endpoints=http://${etcd server ip}:2379 -iface=eth0 -etcd-prefix=/docker-test/network &
    
    • iface可以自由选择网卡,但是目前还有未能解决的坑
  • 启动docker
    • 修改docker daemon
      • 查看flannel启动后的子网段,路径为/run/flannel/subnet.env

        # demo
        FLANNEL_NETWORK=10.2.0.0/16
        FLANNEL_SUBNET=10.2.46.1/24
        FLANNEL_MTU=1450
        FLANNEL_IPMASQ=false
        
      • 修改docker.service文件,我的docker.service文件路径为/lib/systemd/system/docker.service

        修改条目修改后
        ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip=10.2.46.1/24 --mtu=1450
        docker.service中的修改条目subnet.env中的配置
        –bipFLANNEL_SUBNET
        –mtuFLANNEL_MTU
    • 启动docker
    systemctl daemon-reload && systemctl restart docker.service
    
    • 测试
      • 在DockerNode2上启动容器bbox1
         docker run -itd -name bbox1 busybox
         docker exec bbox1 ip r
        
      • 在DockerNode3上启动容器bbox2
        docker run -itd -name bbox2 busybox
        docker exec bbox2 ip r
        
      • bbox1 ping bbox2
        docker exec bbox1 ping -c 3 ${bbox2的IP}
        

flanneld host-gw网络实验

  • 这个部分网络实验没用成功,不管用哪个网卡都没有用,可能跟我用的云平台有关系,后续在补充吧
  • host-gw的配置如下
    {
    	"Network": "10.2.0.0/16",
    	"SubnetLen": 24,
    	"Backend": {
    		"Type": "host-gw"
    	}
    }
    

问题总结

  • flannel与etcd的版本问题
    我最开始使用的etcd3.4.x版本,结果flannel访问etcd时,报错,报错内容是/docker-test/network/config的json格式有问题,后续就改成了3.3.20,就没问题了。
  • flannel在vxlan下使用网卡会导致不同的结果
    我测试过,在公网网卡eth0和自定义局域网网卡eth2上的vxlan通信都没有问题,但是在云主机的内网网卡eth1上时,DockerNode2和DockerNode3的容器就无法ping通,可能和我用的云平台有关系,但是目前不确定原因。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值