跨主机web集群的weave网络

实验环境

ip 服务 备注
192.168.1.11 nginx host1
192.168.1.12 Docker已安装 host2
192.168.1.13 Docker已安装 host3
192.168.1.14 Docker已安装 host4

weave网络web集群

实验目的

host2运行两台web容器,web1和web2,网段地址为10.32.0.0/12,,默认的weave网段

host3运行两台web容器,web3和web4,网段地址为10.10.10.0/24,需要手动指定

要求host2集群页面内容为”ChaiYanJiang”,host3集群页面内容为”PeiJinfeng”

host1使用nginx代理两台主机的web集群

host2和host3也可互相访问,需要做路由

host4能与host1的web1容器通信,也能与host2的web3通信

实验步骤

为了方便区分,已经提前设置好了对应的hostname

运行web集群

host2

下载weave

[root@host2 ~]# curl -L git.io/weave -o /usr/local/bin/weave
[root@host2 ~]# chmod +x /usr/local/bin/weave

启动weave服务

[root@host2 ~]# weave launch

防火墙策略

[root@host2 ~]# iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
[root@host2 ~]# iptables-save

查看网段地址

[root@host2 ~]# docker network inspect  weave
...
                    "Subnet": "10.32.0.0/12"
...

使用weave网络启动web集群

[root@host2 ~]# eval $(weave env)
# 创建映射目录
[root@host2 ~]# mkdir htdocs
[root@host2 ~]# echo "ChaiYanJiang" >> htdocs/index.html
[root@host2 ~]# docker run -itd -p 80 --name web1 --volume /root/htdocs/:/usr/local/apache2/htdocs httpd
faafaa1ae1929871fa1b61ab0783e06e222d94a225bb6113c375285e9d5fd937
[root@host2 ~]# docker run -itd -p 80 --name web2 --volume /root/htdocs/:/usr/local/apache2/htdocs httpd
b0fd89c1759f1b8bb58af00b7688f7ba21c442ed7466843e2db285b5925104e3

查看集群ip,web1ip为10.32.0.1/12,web2ip为10.32.0.2/12

[root@host2 ~]# docker run -it  --rm --network container:web1 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
16: ethwe@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1376 qdisc noqueue 
    link/ether 6e:ef:32:b4:25:78 brd ff:ff:ff:ff:ff:ff
    inet 10.32.0.1/12 brd 10.47.255.255 scope global ethwe
       valid_lft forever preferred_lft forever

[root@host2 ~]# docker run -it  --rm --network container:web2 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
20: ethwe@if21: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1376 qdisc noqueue 
    link/ether 02:55:11:48:2c:c3 brd ff:ff:ff:ff:ff:ff
    inet 10.32.0.2/12 brd 10.47.255.255 scope global ethwe
       valid_lft forever preferred_lft forever
/ # exit

设置主机可以访问两个容器

[root@host2 ~]# weave expose
10.32.0.3
[root@host2 ~]# curl 10.32.0.1
ChaiYanJiang
[root@host2 ~]# curl 10.32.0.2
ChaiYanJiang

host3

下载weave

[root@host3 ~]# curl -L git.io/weave -o /usr/local/bin/weave
[root@host3 ~]# chmod +x /usr/local/bin/weave

启动weave服务

指定10.10.10.0/24的网段

[root@host3 ~]# weave launch --ipalloc-range 10.10.10.0/24

防火墙策略

[root@host3 ~]# iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
[root@host3 ~]# iptables-save

查看网段地址

[root@host2 ~]# docker network inspect weave
...
                    "Subnet": "10.10.10.0/24"
...

使用weave网络启动web集群

[root@host3 ~]# eval $(weave env)
[root@host3 ~]# mkdir htdocs
[root@host3 ~]# echo "PeiJinfeng" >> htdocs/index.html
[root@host3 ~]# docker run -itd -p 80 --name web3 --volume /root/htdocs/:/usr/local/apache2/htdocs httpd
e70c302e8a1002f0dad4261627148746710f34345af5146e8141970d7371fa34
[root@host3 ~]# docker run -itd -p 80 --name web4 --volume /root/htdocs/:/usr/local/apache2/htdocs httpd
bb5c5585e79f49ff963a11ebe980c25d80a8a152dc4d29d676d2c0aa7a90fa64

查看集群ip,web3ip为10.10.10.1/24,web4ip为10.10.10.2/24

[root@host3 ~]# docker run -it --rm --network container:web3 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
16: ethwe@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1376 qdisc noqueue 
    link/ether 5e:24:f5:3a:d2:da brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.1/24 brd 10.10.10.255 scope global ethwe
       valid_lft forever preferred_lft forever
/ # exit
[root@host3 ~]# docker run -it --rm --network container:web4 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
20: ethwe@if21: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1376 qdisc noqueue 
    link/ether 7e:b4:f9:73:65:6e brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.2/24 brd 10.10.10.255 scope global ethwe
       valid_lft forever preferred_lft forever

设置主机可以访问两个容器

[root@host3 ~]# weave expose
10.10.10.3
[root@host3 ~]# curl 10.10.10.1
PeiJinfeng
[root@host3 ~]# curl 10.10.10.2
PeiJinfeng

host2与host3互相访问

host2添加路由

[root@host2 ~]# ip route add 10.10.10.0/24 via 192.168.1.13 dev ens33

验证

[root@host2 ~]# curl 10.10.10.1
PeiJinfeng
[root@host2 ~]# curl 10.10.10.2
PeiJinfeng

host3添加路由

[root@host3 ~]# ip route add 10.32.0.0/12 via 192.168.1.12 dev ens33

验证

[root@host3 ~]# curl 10.32.0.1
ChaiYanJiang
[root@host3 ~]# curl 10.32.0.2
ChaiYanJiang

host1添加路由

因为host1需要直接代理host2与host3的容器ip,所以也需要可以访问他们的容器ip

[root@host1 ~]# ip route add 10.10.10.0/24 via 192.168.1.13 dev ens33
[root@host1 ~]# ip route add 10.32.0.0/12 via 192.168.1.12 dev ens33

验证

[root@host1 ~]# curl 10.10.10.1
PeiJinfeng
[root@host1 ~]# curl 10.10.10.1
PeiJinfeng
[root@host1 ~]# curl 10.10.10.2
PeiJinfeng
[root@host1 ~]# curl 10.32.0.1
ChaiYanJiang
[root@host1 ~]# curl 10.32.0.2
ChaiYanJiang

host1安装nginx代理容器

拖包

[root@host1 ~]# yum -y install pcre-devel openssl-devel
[root@host1 ~]# tar zxf nginx-1.11.1.tar.gz -C /usr/src
[root@host1 ~]# cd /usr/src/nginx-1.11.1/
[root@host1 nginx-1.11.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@host1 nginx-1.11.1]# make && make install
[root@host1 ~]# useradd -M -s /sbin/nologin nginx
[root@host1 ~]# ln -s /usr/local/nginx/sbin/* /usr/sbin

修改配置文件进行代理

[root@host1 ~]# vim /usr/local/nginx/conf/nginx.conf
# server模块上面添加
    upstream webcluster {
        server 10.32.0.1 weight=1;
        server 10.32.0.2 weight=1;
        server 10.10.10.1 weight=1;
        server 10.10.10.2 weight=1;
    } 
# location模块修改为
        location / {
            proxy_pass    http://webcluster;
        }

启动nginx

[root@host1 ~]# nginx

使用host4验证

[root@host4 ~]# curl 192.168.1.11
ChaiYanJiang
[root@host4 ~]# curl 192.168.1.11
ChaiYanJiang
[root@host4 ~]# curl 192.168.1.11
PeiJinfeng
[root@host4 ~]# curl 192.168.1.11
PeiJinfeng

host4访问web1和web3

只需要针对ip地址做路由即可

[root@host4 ~]# ip route add 10.32.0.1 via 192.168.1.12 dev ens33
[root@host4 ~]# ip route add 10.10.10.1 via 192.168.1.13 dev ens33

访问验证

web2和web4的ip确实访问不到

[root@host4 ~]# curl 10.32.0.1
ChaiYanJiang
[root@host4 ~]# curl 10.10.10.1
PeiJinfeng
[root@host4 ~]# curl 10.10.10.2
^C
[root@host4 ~]# curl 10.32.0.2
^C

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0