使用weave实现docker跨宿主机连接

技术类 专栏收录该内容
12 篇文章 0 订阅

使用weave实现docker跨宿主机连接

docker之于微服务,就好像人体的经脉之于血液。一个人充满血液但没有经脉,冲其量就是打肿脸冲胖子。经脉要互通,docker之间要互联。目前最主流的技术有Weave和Kubernetes两种,这里就来介绍weave的使用:

  • 安装docker
  • 安装和使用weave
  • 校验docker是否跨主机连接

安装docker

Linux环境

Ubuntu 16.04(LTS)


简单方法

$ sudo apt-get update

$ sudo apt-get install docker

是不是轻松,搞定!(太low了。。。有木有。。。)
但是这种方法有一个缺点:安装的不一定是最新的docker,安装版本是1.10.2,不过,对于docker使用没任何什么问题,如果要后续升级方便,可以使用下面的方法。


另一种方法

1.切换到root权限或者用sudo

su -i

2.升级source列表并保证https和ca证书成功安装

# apt-get update

# apt-get install apt-transport-https ca-certificates

3.增加新的GPG 密钥

# sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

4.新增或编辑source列表里的docker.list文件

# sudo sh -c “echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list”

5.按照系统版本增加entry(Ubuntu Xenial 16.04 (LTS))

# sudo sh -c “echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list”

6.重新执行更新操作,并删除老的repo

# apt-get purge lxc-docker //没有安装的话,跳过,没有问题的

7.查看是否有正确的可用版本

# apt-cache policy docker-engine

8.如果上步没有可用版本,可执行

# apt-get install docker.io

9.从14.04版本以上开始docker推荐安装linux-image-extra

# apt-get install linux-image-extra-$(uname -r)

10.安装docker

# apt-get update

# apt-get install docker-engine

# service docker start

# docker run hello-world

到此结束,the end!

root@wli-Presario-CQ32-Notebook-PC:~# docker version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.6.2
Git commit: 092cba3
Built: Thu Nov 2 20:40:23 2017
OS/Arch: linux/amd64


Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.6.2
Git commit: 092cba3
Built: Thu Nov 2 20:40:23 2017
OS/Arch: linux/amd64
Experimental: false

安装和使用Weave

网上安装weave的方法有很多,这里介绍有效的一种方法,楼主亲身测试可行:
直接从github下载二进制文件安装。

# sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
# sudo chmod a+x /usr/local/bin/weave

启动weave路由器,这个路由器其实也是以容器的形式运行的。

# weave launch

此时会发现多生成有两个网桥,一个是Docker默认生成的,另一个是Weave生成的。

root@wli-Presario-CQ32-Notebook-PC:~# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242ea343c68 no
weave 8000.5a711493d6dd no vethwe-bridge


root@wli-Presario-CQ32-Notebook-PC:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1130690bd6e7 weaveworks/weave:latest “/home/weave/weave…” 4 minutes ago Up 4 minutes weave

接下来就可以运行应用容器,使用weave提供的网络功能了。

校验docker是否跨主机连接

准备
1. host1: 10.10.2.77
2. host2: 10.10.2.78
3. host1上的应用容器1: 192.168.0.2/24 host1上的应用容器2: 192.168.1.2/24
4. host2上的应用容器1: 192.168.0.3/24
两台机上均安装Docker及Weave,并均启动好Weave路由容器。

在两台机上均启动一个应用容器。可以直接使用weave run命令,也可以先使用docker run启动好容器,然后使用weave attach命令给容器绑定IP地址。

# weave run 192.168.0.2/24 -itd ubuntu bash
(别挣扎了,weave run被干掉了,不能用了哦。。。)

或者

(来,用这个)
# docker run -itd ubuntu bash
# weave attach 192.168.0.2/24 $ID

此时发现两个容器之间是不通的,ping不通就对了
ping的通还有weave干嘛!!!
需要使用weave connect命令在两台weave的路由器之间建立连接。

# weave connect 10.10.2.78

会发现,此时位于两台不同主机上的容器之间可以相互ping通了。magic哈哈!!!
但是处于不同子网的两个容器是不能互联的,这样我们就可以使用不同子网进行容器间的网络隔离了。

重点补充

我们会发现,如果不使用Docker的原生网络,在容器内部是不能访问宿主机以及外部网络的。此时我们可以使用weave expose 192.168.0.1/24来给weave网桥添加IP,以实现容器与宿主机网络连通。但是,此时在容器内部依然不能访问外部网络。
我们可以同时使用Docker的原生网络和weave网络来实现容器互联及容器访问外网和端口映射。使用外部网络及端口映射的时候就使用docker0网桥,需要容器互联的时候就使用weave网桥。每个容器分配两个网卡。

安全性:可以通过weave launch -password Lhola 设置一个密码用于weave peers之间加密通信

查看weave路由状态:weave ps

问题须知

容器重启问题
如果使用weave,则就不能再使用docker自带的auto-restart feature(如docker run –restart=always redis),因为weave是在docker之外为容器配置的网络,容器重启的时候docker本身不会做这些事情。因而,还需额外的工具来管理容器的状态(比如systemd, upstart等),这些工具要调用weave命令(weave run/start/attach)来启动容器。


多少人忙得连写博客的时间都没有哟!

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值