欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker flannel网络实验

程序员文章站 2024-01-15 15:39:16
...

docker flannel网络实验

环境准备

主机准备

系统 数量
ubuntu16.04 3
  • 注意,三台设备都需要装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
    

架构如下

docker flannel网络实验

  • 网络部分
    网卡 网段 作用
    eth0 172.16.80.0/24 局域网内的外网网卡,可以理解为公司内网的公网
    eth1 10.80.0.0/24 局域网的内网网卡,可以理解为公司某个机房的内网
    eth2 13.13.13.0/24 自建局域网的网卡,可以理解为我自己创建了私有网段,只用于沟通属于我的所有的设备

etcd准备

  • 版本需求
    flannel版本 etcd版本
    v0.12.0 3.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
    
    docker flannel网络实验
  • 配置用于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.sock ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip=10.2.46.1/24 --mtu=1450
        docker.service中的修改条目 subnet.env中的配置
        –bip FLANNEL_SUBNET
        –mtu FLANNEL_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通,可能和我用的云平台有关系,但是目前不确定原因。
相关标签: Docker 网络