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地址

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

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

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

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

host2:
[[email protected] ~]# 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访问

原文地址:https://blog.51cto.com/anfishr/2427089

时间: 2024-11-11 07:01:34

Weave跨主机实现docker互通,固定ip及dns使用介绍的相关文章

为docker配置固定ip

docker默认使用bridge模式,通过网桥连接到宿主机,而容器内部的ip则从网桥所在的ip段取未用的ip.这样做一个不方便的地方在于容器内部的ip不是固定的,想要连接容器时只能通过映射到宿主机的端口,因而有很多项目使用overlay来为docker提供网络的配置,比如Pipework.Flannel.Kubernetes.Weave.opencontrail等. 想要使用overlay来为docker配置网络,需要首先了解下docker的网络模式: --net=bridge — The de

如何实现跨主机之间docker容器通信问题

这里采用最原始的桥接模式来实现跨主机直接docker容器通信问题 一些常用命令 brctl show br0 brctl addbr br0 brctl addif br0 eth0 ifconfig br0 down 1.先安装brctl工具包 apt-get install bridge-utils 2.创建一个docker的桥接网络类型(ip填写和同主机网段的ip) docker network create --subnet=192.168.17.100/16 br0 这里我的宿主机ip

Linux之如何进行固定IP、DNS等设置

前提:虚拟机Linux centOS6.6 Linux如何设置固定IP.dns.网关 1.切换到root账号 2.#cd  /etc/sysconfig/network-scripts 进入网卡的设置目录 3.#vi cfg-eth0   进入网卡配置文件 4.配置文件如下 5.进行设置 网关(GATEFIX)要与主机的网关保持一致 可以设置IPADDR固定IP 和DNS按照需要进行设置 6.设置后重启网络服务 #service network restart或者 #/etc/init.d/ne

Docker设置固定ip地址

Docker安装后,默认会创建下面三种网络类型: $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge local 1252da701e55 host host local 237ea3d5cfbf none null local 启动 Docker的时候,用 --network 参数,可以指定网络类型 docker run -itd --name test1 --network bridge --

docker 设置固定ip、配置网络

Docker安装后,默认会创建下面三种网络类型 $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge local 1252da701e55 host host local 237ea3d5cfbf none null local 启动 Docker的时候,用 --network 参数,可以指定网络类型 docker run -itd --name test1 --network bridge --i

使用pipework配置docker容器固定ip

首先讲一下docker的网络模式: 我们使用docker run创建容器时,可以使用--net选项指定容器的网络模式,docker一共有4中网络模式: 1:bridge模式,--net=bridge(默认). 这是dokcer网络的默认设置.安装完docker,系统会自动添加一个供docker使用的网桥docker0,我们创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址.并默认连接到docker0网桥,以此实现容器与宿主机的网络互通.如下: 2:host模式,--ne

Docker容器固定IP分配

我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定. container模式,使用--net=container:NAME_or_ID指定. none模式,使用--net=none指定. bridge模式,使用--net=bridge指定,默认设置. 默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址,这可能不是我们想要的,本文介绍在centos7 docker

实现跨主机的docker网络环境和网络控制节点

1. 安装3台centos7 Linux虚机, 公网分别是:114.112.62.75,114.112.62.76,114.112.62.77 私网分别是:192.168.1.4,  192.168.1.5,  192.168.1.6 2. 在3台机器上安装openvswitch 2.5. 根据openvswitch文档build RPM包,然后在每台机器上yum localinstall rpm 3. 在3台机器上安装docker,yum install docker. 4. 在3台机器上yu

Ubuntu 16设置固定IP和DNS

ubuntu 16  设置固定ip地址和dns 1.设置ip地址 vi /etc/network/interfaces 添加如下内容: # The primary network interface # ens160是网卡,不知道自己是什么样的网卡,可以通过命令ip addr查看auto ens160iface ens160 inet static # 设置固定的ip地址,如下示例address 10.0.0.2 # 子网和网关可以通过route -n查看netmask 255.255.255.