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访问

  • 相关阅读:
    Codeforces 1255B Fridge Lockers
    Codeforces 1255A Changing Volume
    Codeforces 1255A Changing Volume
    leetcode 112. 路径总和
    leetcode 129. 求根到叶子节点数字之和
    leetcode 404. 左叶子之和
    leetcode 104. 二叉树的最大深度
    leetcode 235. 二叉搜索树的最近公共祖先
    450. Delete Node in a BST
    树的c++实现--建立一棵树
  • 原文地址:https://www.cnblogs.com/zqw111/p/11310517.html
Copyright © 2011-2022 走看看