zoukankan      html  css  js  c++  java
  • Weave跨主机实现docker互通,固定ip及dns使用介绍

    一.weave介绍
    Weave是由weaveworks公司开发的解决Docker跨主机网络的解决方案,现在就采用它来实现Docker多宿主机互联的目的,它能够创建一个虚拟网络,用于连接部署在多台主机上的Docker容器,这样容器就像被接入了同一个网络交换机,那些使用网络的应用程序不必去配置端口映射和链接等信息。

    外部设备能够访问Weave网络上的应用程序容器所提供的服务,同时已有的内部系统也能够暴露到应用程序容器上。Weave能够穿透防火墙并运行在部分连接的网络上,另外,Weave的通信支持加密,所以用户可以从一个不受信任的网络连接到主机。

    技术图片

    Weave会在主机上创建一个网桥,每一个容器通过veth pair连接到该网桥上,同时网桥上有个Weave router的容器与之连接,该router会通过连接在网桥上的接口来抓取网络包(该接口工作在Promiscuous模式)。

    在每一个部署Docker的主机(可能是物理机也可能是虚拟机)上都部署有一个W(即Weave router),它本身也可以以一个容器的形式部署。Weave run的时候就可以给每个veth的容器端分配一个ip和相应的掩码。veth的网桥这端就是Weave router容器,并在Weave launch的时候分配好ip和掩码。

    Weave网络是由这些weave routers组成的对等端点(peer)构成,每个对等的一端都有自己的名字,其中包括一个可读性好的名字用于表示状态和日志的输出,一个唯一标识符用于运行中相互区别,即使重启Docker主机名字也保持不变,这些名字默认是mac地址。

    每个部署了Weave router的主机都需要将TCP和UDP的6783端口的防火墙设置打开,保证Weave router之间控制面流量和数据面流量的通过。控制面由weave routers之间建立的TCP连接构成,通过它进行握手和拓扑关系信息的交换通信。 这个通信可以被配置为加密通信。而数据面由Weave routers之间建立的UDP连接构成,这些连接大部分都会加密。这些连接都是全双工的,并且可以穿越防火墙。

    Weave优劣势

    1.Weave优势

    支持主机间通信加密。

    支持container动态加入或者剥离网络。

    支持跨主机多子网通信。

    2.Weave劣势

    只能通过weave launch或者weave connect加入weave网络。

    二.创建weave网络
    1.环境
    安装docker主机两台
    主机1:190.168.3.250
    主机2:190.168.3.251

    2.安装:
    wget -O /usr/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
    chmod +x /usr/bin/weave

    主机1:
    weave launch 
    也可以weave launch --ipalloc-range 192.168.0.0/24指定网段
    下来就是自己安装镜像

    主机2:
    weave launch 190.168.3.250

    3.宿主机使用
    weave expose 192.168.0.250/24 可以给宿主机添加同容器同一网段的地址
    weave hide 192.168.0.250/24 可以删去给宿主机添加的地址

    4.容器使用
    第一种添加 --net=weave
    docker run -it --net=weave --name=test1 busybox sh
    这样创建会自动生成weave地址

    第二种将环境变量写入配置文件
    [root@server1 ~]# weave env
    export DOCKER_HOST=unix:///var/run/weave/weave.sock ORIG_DOCKER_HOST=
    [root@server1 ~]# export DOCKER_HOST=unix:///var/run/weave/weave.sock
    [root@server1 ~]# echo $DOCKER_HOST

    将这个环境变量写进source /etc/profile,让docker启动自动连接创建weave地址

    启动容器时通过传值的方式固定ip地址https://www.jkys120.com/
    docker run -it --net=weave --name=test1 -e WEAVE_CIDR=192.168.0.10/24 busybox sh

    5.dns使用
    weave创建起来自带dns
    例:host1:
    [root@server1 ~]# docker run -d --name c1 -it -e WEAVE_CIDR=192.168.0.11 busybox sh

    host2:
    [root@server2 ~]# docker run -d --name c2 -it -e WEAVE_CIDR=192.168.0.12 busybox sh

    在c1里面 ping c2 是可以ping通的

    在我这边的实际工作中,这个没有ping通,先使用weave status 查看dns,并使用以下命令创建可以dns通信
    docker run -d --hostname=test3.weave.local --name c3 -it -e WEAVE_CIDR=192.168.0.13 busybox sh
    只有加了.weave.local的主机之前可以通过主机名访问,别的主机可以通过ping test3 来判断dns是否正常,但只能容器之间通过dns访问

  • 相关阅读:
    常见压缩/解压缩及打包命令
    黑盒测试和白盒测试
    基础命令的操作

    转]DLL-多个进程间共享动态链接库的原理
    Ansi UNICODE,GBK,UTF-8区别
    Cppunit 源码 SynchronizedObject
    二分查找实现
    Androdi 开发学习四 Activity和Intent
    Android开发学习三:adb启动失败
  • 原文地址:https://www.cnblogs.com/zqw111/p/11310517.html
Copyright © 2011-2022 走看看