docker-跨主机访问

所谓跨主机访问

# 什么是跨主机互连,感觉前面学过了,又好像不是那么一回事
# 总结一下前面的连接部分
# 1. 访问外部
# 2. 外部访问
# 3. 容器间连接
# 4. 访问过滤

# 差的就是跨主机互连了
# 这个可能没有想的那么广,更细节一点的话,应该称作
# 容器间跨主机互连
# 不是别的主机访问容器,而是另一台主机的容器访问另一台主机的容器
# 这个就不像之前的那么容易了

网络互连

# 也回顾一下网络访问的几个要素
# 1. 同一个网络可以直接进行访问
# 2. 多个网络之间通过网桥进行连接
# 3. 网桥本身拥有ip

# 这也就说明了几个问题
# 1. 为什么运行docker会出现docker0
# 1.1 docker多个容器,网络都是接在docker0上的
# 1.2 多个容器连接相当于是docker的局域网,通过docker0与宿主机网络相连

# 几种场景归纳
# 1. docker容器间访问
# 通过网关docker0进行数据转发,然后传输到指定容器

# 2. 本机访问容器
# 首先访问docker0,然后数据进行转发

# 3. 其他主机访问容器
# 3.1 首先访问本机网卡
# 3.2 然后转发到docker0
# 3.3 最后docker0转发到指定容器

# 也就是说,我们必须先路由,层级跳转
# 经由每一层的数据转发最终把数据传达到指定容器
# 最后一层就是docker0的网桥了

# 总结一下
# 1. 让网络之间贯通,然后docker0进行数据转发
# 2. 或者能够自己直接进行转发,或转发到docker0

基础配置

# 前面不是说过替换docker0的办法么
vim /etc/default/docker

DOCKER_OPTS="-b=new_br"

# 如果本机的网卡是eth0
DOCKER_OPTS="-b=eth0"
# 把本机的网卡直接作为docker0的网络接入
# 当直接访问本机的时候不就能够直接转发到容器了么

# 只是需要注意的一点
sudo brctl addbr new_br
# 通过外部工具进行的网卡配置,重启之后是不会存在的
# 如果需要配置的话建议采用手动配置

auto eth0
iface eth0 inet static # 配置为静态地址,如果dhcp动态的话怎么找啊
address 10.10.10.10    # 配置接入地址啦
netmask 255.255.255.0  # 掩码不解释
gateway 10.10.10.1     # 数据为什么能找到这台机器,因为网关的转发,所以,要配
bridge_ports eth0


# 然后重启机器
sudo reboot
# 或者重启网络服务
sudo service network restart

# 最后补充一点
--fixed-cidr
# 通过这个东西就能控制docker为容器分配的地址了
--fixed-cidr 12.12.12.12/24
# 这个就是把12.12.12.12当做网关
# 后面的24掩码就是限制能够分配的ip的个数啦,从12.12.12.13开始算起

DOCKER_OPTS="-b=eth0 --fixed-cidr=12.12.12.12/24"
# 这个是docker配置,别忘了


# 优缺点
# 说一个缺点就够了
# 居然要独占IP?这个就够了,生产环境哪有那么多的资源和权限啊

Open vSwitch

# Open vSwitch使用

# 1. 安装open vSwitch工具
sudo apt-get install -y openswitch-switch
# 2. 创建一个网桥obth
sudo ovs-vsctl add-br obth
# add-br 添加网桥
# obth网桥名称

# 3. 为网桥添加gre接口
sudo ovs-vsctl add-port obth gre0
# add-port 添加隧道
# obth 指定网桥
# gre0 隧道名称

# 4. 设置接口接向
sudo ovs-vsctl set interface gre0 type=gre options:remote_ip=remote_linux_ip
# set interface 设置隧道参数
# gre0 指定隧道
# type=gre 连接类型,gre隧道类型
# option 设置额外选项
# remote_ip 设置要连接的远程地址
# remote_linux_ip 远程主机的ip

# 5. 查看一下设置
sudo ovs-vsctl show
# 好像应该放在第一个的
# 但是终归要查看,合二为一只写一遍


# docker网桥设置

# 1. 添加新网桥
sudo brctl addbr nb
# brctl之前说过,反正操作都差不多

# 2. 设置ip和掩码
sudo ifconfig nb nbip netmask mask
# 这个nbip的话就是准备给docker用的了,就是docker网桥的ip
# 后面就是靠这个ip给各容器进行数据转发 

# 3. 设置网桥连接
sudo btctl addif nb obth
# 最后把两个网桥连接起来,使得数据能够进行转发
# 也就是说nb的数据能够转发到obth上,然后obth又能够去连接远端的主机

# 最后就是docker配置了
-b=nb
# 多的不用写了


# 最后,总结一下
# 1. 网络访问需要进行数据转发
# 2. 一般容器数据通过docker0或者配置的网桥nb进行转发
# 3. 把nb的数据也转发到中间网桥上obth,然后通过obth进行数据转发

# 各种情况的数据转发
# 1. 本机访问容器
# host转发docker0转发容器

# 2. 容器间访问
# 容器转发docker0转发容器

# 3. 外部主机访问
# 外部转发主机网卡转发docker0转发容器

# 4. 跨主机访问
# 容器转发docker0转发外部主机网卡转发本机网卡转发docker0转发容器

# 5. 中间工具转发
# 容器转发docker0转发中间网桥转发主机网卡转发docker0转发容器

# 可以看到,其实就是搭建了中间隧道,把数据转发到指定的ip
# 所以操作简单的就是
# 1. 创建转发隧道,挂载到指定网卡,并设置转发目的地
# 2. 把docker0数据转发到挂载隧道的网卡上,隧道自动转发到指定主机

weave

# 1. 安装weave
wget -o target_dir github_weave
# target_dir 指定下载文件的存放目录
# github_weave 是weave的github地址
# 下载完毕之后会下载启动一个weavework的容器

chmod a+x *
# 记得给文件赋予执行权限

# 2. 启动weave
sudo weave lanch remote_host_ip
# launch 启动命令
# remote_host_ip 远程主机ip

# 3. 启动容器
weave run 12.12.12.12/24 -it --name weave_test ubuntu bash
# 3.1 通过weave代替docker作为启动命令
# 3.2 会返回启动的容器id,也支持命名,和docker用法一致
# 3.3 启动时传入的ip会作为启动容器的ip,需要指定掩码
ifconfig
# 在启动的容器中查看ifconfig,会看到ethwe的自动添加的网卡,这个就是weave自动新增管理的网卡


# 梳理一下转发流程
# 容器转发docker0转发weave转发远程主机转发docker0转发容器

# 没错,记住一个关键点
# 每次的转发都是独立的一条线
# 容器间的收发其实并不是同一条转发路线
# 所谓的跨主机访问,其实只是数据包的各种转发
# 通常为了转发的便捷管理,都是新增一个中间转发,通过这个半路嫁接的通道进行数据转发

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值