
More info on
Flannel: https://github.com/coreos/flannel
You will need to have 1 or more etcd server(s). We will be using a single node for this demo.
On etcd Server(s)
1. Install etcd
2. Configure etcd -
/etc/etcd/etcd.conf
#
cat /etc/etcd/etcd.conf | grep -v '^#'
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:7001,http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
3. Enable and start etcd
# systemctl
enable etcd && systemctl start etcd
4. Define etcd
network:
etcdctl
mk /blah.com/network/config '{"Network":"172.17.0.0/16"}'
You should be able
to get the json for that key.
#
curl -s -L http://ETCD_SERVER:2379/v2/keys/blah.com/network/config
| python -m json.tool
On
worker/slave/client(s)… any machine that is going to have flannel running
1. Install flannel
2. Configure flannel -
/etc/sysconfig/flanneld
#
cat /etc/sysconfig/flanneld | grep -v '^#'
FLANNEL_ETCD="http://ETCD_SERVER:2379"
FLANNEL_ETCD_KEY="/blah.com/network"
3. If Docker is
already installed, stop and remove docker interface.
# systemctl
stop docker
ip
link delete docker0
systemctl
start flanneld && systemctl enable flanneld
systemctl
start docker
Rinse
and repeat for all other desired docker hosts:
You
should be able to see the networking configs and subnets being created.
#
curl -s -L http://master:2379/v2/keys/blah.com/network/config
| python -m json.tool
#
curl -s -L http://master:2379/v2/keys/blah.com/network/subnets
| python -m json.tool
You should now be
able to ping containers between different hosts!
After starting a few containers on different hosts, try it out. Each host gets its own subnet if you notice below.
Host A:
# docker inspect
f41cd57b4ef5 | grep -i ipaddress
"IPAddress":
"172.17.24.3",
"SecondaryIPAddresses": null,
Host B:
# docker inspect
1b5b48c6be47 | grep -i ipaddress
"IPAddress":
"172.17.80.16",
"SecondaryIPAddresses": null,
From Host A container, ping container 1b5b48c6be47 on Host B:
# docker exec -it f41cd57b4ef5 ping 172.17.80.16
PING 172.17.80.16
(172.17.80.16): 56 data bytes
64 bytes from
172.17.80.16: seq=0 ttl=62 time=2.336 ms
64 bytes from
172.17.80.16: seq=1 ttl=62 time=0.438 ms
64 bytes from
172.17.80.16: seq=2 ttl=62 time=0.506 ms
^C
Host A is even able to ping container on Host B:
# ping 172.17.80.16
PING 172.17.80.16
(172.17.80.16) 56(84) bytes of data.
64 bytes from
172.17.80.16: icmp_seq=1 ttl=63 time=0.386 ms
64 bytes from
172.17.80.16: icmp_seq=2 ttl=63 time=0.438 ms
^C
Host B is running a
nginx container at port 80. Lets curl port 80 on that container from a container on Host A. (will only work if curl installed on container):
# docker exec -it f41cd57b4ef5 curl 172.17.80.16:80
% Total
% Received % Xferd Average
Speed Time Time
Time Current
Dload Upload
Total Spent Left
Speed
0
0 0 0
0 0 0
0 --:--:-- --:--:-- --:--:--
0<!DOCTYPE html>
<html>
<head>
<title>Welcome
to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial,
sans-serif;
}
</style>
</head>
<body>
<h1>Welcome
to nginx!</h1>
<p>If you see
this page, the nginx web server is successfully installed and
working. Further
configuration is required.</p>
<p>For online
documentation and support please refer to
<a
href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support
is available at
<a
href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank
you for using nginx.</em></p>
</body>
</html>
100 612
100 612 0
0 321k 0 --:--:-- --:--:-- --:--:-- 597k
And from Host A:
# curl
172.17.80.16:80
<!DOCTYPE
html>
<html>
<head>
<title>Welcome
to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial,
sans-serif;
}
</style>
</head>
<body>
<h1>Welcome
to nginx!</h1>
<p>If you see
this page, the nginx web server is successfully installed and
working. Further
configuration is required.</p>
<p>For online
documentation and support please refer to
<a
href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support
is available at
<a
href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank
you for using nginx.</em></p>
</body>
</html>
No comments:
Post a Comment