Docker网络管理
来源:互联网 发布:医疗器械软件描述范例 编辑:程序博客网 时间:2024/06/05 06:04
前言
目前管理docker环境在网络层面亟需解决的问题,1、宿主机上每个容器的IP固定问题;2、不同宿主机上docker容器网络互通。
一、容器IP固定
1.1 新网络环境的IP固定
所谓新网络环境,是指在宿主机上还未部署docker容器,在创建容器之初就为容器固定住IP。由于docker网络管理是使用默认的‘NAME=bridge’,并在创建容器时自动分配IP地址,这样给docker管理带来的麻烦是:当因故重启容器或重启宿主机时,宿主机上分配给全部容器的IP就会刷新;
为了便于管理,SA就需要创建‘NAME=xxxx’的新网络。
docker network create --driver bridge --gateway 192.168.2.254 --subnet 192.168.2.0/24 new_net_0
上面这条命令即创建一个‘NAME=gengmei0’的新网络
docker run -d --name test-network -h test-network --network new_net_0 --ip 192.168.2.1 image_name
上面这条命令在创建容器之初就为容器分配了固定IP,这样即使重启容器或是重启宿主机也不会影响到容器集群的IP变化
上述两条就能实现容器IP固定的问题,当时应当注意,即使使用标志‘–network & --ip’指定了网络,但是还有是有docker0网卡存在的。因此,若想实现跨主机间的容器通信,SA还需要注意在/etc/default/docker里面指定DOCKER_OPTS的‘–bip’标志的值与其它主机上相同标志的值不同。
1.2 旧网络环境的IP固定
所谓旧网络环境,是指宿主机上已部署了大量的容器,不便于重新创建容器,若强行使用上一节的方法,便是徒增管理难度。好在docker官方提供了docker network connect命令,解决了复杂容器集群中IP固定的问题。
docker network create --driver bridge --gateway 192.168.3.254 --subnet 192.168.3.0/24new_net_0
创建‘NAME=new_net_0’的网路
docker network connectnew_net_0 --ip 192.168.3.34 conntainer-id
将IP为192.168.2.34的容器containerid添加到new_net_0网络中
二、跨主机容器网络互通
1.1 flannel docker 网络管理
如上图所示,若想打通容器到容器之间的网络,就需要先打通路由;启动flannel服务后,flannel自动分配一个网关,宿主机A上的容器到宿主机B上容器的数据包先通过宿主机B上flannel的网关,再由宿主机B内部路由实现通信。
但是我们希望数据包直接到达宿主机B上容器内,因此我们需要做的有:1、宿主机内部路由,保留flannel网关到docker0网关(影响这条路由通信的路由务必删除);2、宿主机flannel网关“IP ADDR”-“MAC”对应关系,改为docker容器的IP段与flannel网卡MAC的对应关系。
内部路由处理
删除影响flannel网卡与docker0设备通信的路由
route del -net 172.16.0.0 netmask 255.240.0.0 gw 10.172.183.247 dev eth0
vim /etc/network/interface #注释掉相关路由项
外部路由处理
./etcdctl ls /coreos.com/network/subnets #找到原flannel网卡的IP信息;./etcdctl get /coreos.com/network/subnets/172.16.95.0-24 #获取IP-MAC键值信息
./etcdctl set /coreos.com/network/subnets/172.16.65.0-24 '{"PublicIP":"124.16.23.152","BackendType":"vxlan","BackendData":{"VtepMAC":"4a:6e:6d:54:7f:9f"}}' #将原键值信息改为docker容器IP段与MAC的键值信息
./etcdctl rm /coreos.com/network/subnets/172.16.95.0-24 #删除原键值信息
参考文献:
DockOne技术分享 http://dockone.io/article/618
- Docker网络管理
- docker 网络管理
- Docker网络管理
- docker的网络管理
- 使用weave管理docker网络
- 使用weave管理docker网络
- 使用weave管理docker网络
- Docker网络管理-外部访问容器
- Docker之Flannel管理网络-yellowcong
- Docker网络管理及容器跨主机通信(四)
- 多主机网络下 Docker Swarm 模式的容器管理
- 多主机网络下 Docker Swarm 模式的容器管理
- 多主机网络下 Docker Swarm 模式的容器管理
- 多主机网络下 Docker Swarm 模式的容器管理
- 使用Docker网络相关的命令管理容器
- Docker网络管理及容器跨主机通信
- docker网络
- Docker网络
- github初使用
- android Retrofit+OkHttp使用自制的证书实现https安全传输
- CodeForces 269D
- JDK1.5新特性5-增强for循环
- Spring的点点滴滴之动态代理
- Docker网络管理
- Android笔记:仿系统图片库(GridView的多选删除)实用篇
- 微软发布Visual Studio Mac预览版
- Leetcode 453 Minimum Moves to Equal Array Elements
- IE兼容性问题(二)
- emWin 2天速成实例教程009_ListView列表框控件使用方法
- java垃圾回收机制
- BindService与StartService的综合使用案例
- cxf+spring 权限验证(1)