Linux企业运维——Docker网络

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux企业运维——Docker网络相关的知识,希望对你有一定的参考价值。

Linux企业运维——Docker(五)网络

1、Docker原生网络

Docker自身有4种网络工作方式:

网络模式工作模式
host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
Container创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围
None该模式关闭了容器的网络功能
Bridge此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信

docker安装后会自动创建3种原生网络:bridge、host、none。

1.1、bridge网络

  • bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。
  • 容器通过宿主机的NAT规则后可以访问外网。

docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口

安装查看桥接工具

1.2、host网络

  • host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

    关闭harbor仓库,使用host网络模式运行容器

1.3、none网络

  • none模式是指禁用网络功能,只有lo接口,在容器创建时使用
    –network=none指定。

使用none网络模式运行容器

1.4、网络ip分配规则

先运行两个容器

查看它们分别的ip


当容器停掉时,资源会释放,重新启动按照启动顺序分配动态ip
关闭demo1和demo2,再重启,启动顺序为先demo2再demo1

再次查看他们的网卡

2、Docker自定义网络

  • 自定义网络模式,docker提供了三种自定义网络驱动:
    bridge、overlay、macvlan
    bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。
  • 建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。

2.1、自定义网络创建

(1)创建自定义网桥

(2)使用自定义网络启动容器

测试可以ping通demo1

2.2、不同网桥的容器如何通信

(1)删除demo1和自定义网络mynet1,使用带参数的方法重新创建新的自定义网络,使用新的自定义网络运行demo容器

  • –subnet: 子网掩码
    镜像信任功能能够保证镜像的安全,只有打了信任标签的镜像才能被拉取
  • –gateway: 网关



(2)使用自定义网络再启动busybox镜像容器,测试连通性

(3)在创建一个新的自定义网络mynet2

(4)用mynet2启动busybox镜像容器

此时无法ping通172.20.0.10

(5)为该容器配置第二块网卡

再查看其ip,已经有了另一网段的ip,且可以ping通了

3、容器通信

3.1、使用容器名称通信

Container 网络模式是 Docker 中一种较为特别的网络的模式。
Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。
在容器创建时使用–network=container:vm指定(vm指定的是运行的容器名)

–link 可以用来链接2个容器
–link的格式: –link:alias
name和id是源容器的name和id,alias是源容器在link下的别名。


重新创建demo容器并进行连接,可以ping通

查看busybox的容器的域名解析文件,看到demo对应的ip是172.17.0.2

停掉demo容器,用ngix镜像拉起容器test

可以看到test的ip是172.17.0.2

再启动demo,查看ip


连接到运行中的busybox的容器

查看域名解析文件,demo对应的ip变成172.17.0.4了

3.2、容器访问外网


查看容器ip

3.3、外网访问容器

外网访问容器用到了docker-proxy和iptables DNAT

删除test和demo容器

重新生成demo容器,-p指定映射端口
宿主机把80端口映射到Docker容器上,访问宿主机的80端口就相当于访问Docker的80端口

查看目的地转换规则

删除第6条


访问该容器80端口,可以正常访问

查看网络状态,杀死docker-proxy进程

现在外网就无法访问容器了

恢复目的地转换规则第6条链


外网又可以成功访问了

4、跨主机容器网络

  • 跨主机网络解决方案: docker原生的overlay和macvlan 第三方的flannel、weave、calico
  • 众多网络方案是如何与docker集成在一起的 libnetwork docker容器网络库 CNM (Container Network Model)这个模型对容器网络进行了抽象
  • CNM分三类组件 Sandbox:容器网络栈,包含容器接口、dns、路由表。(namespace) Endpoint:作用是将sandbox接入network (veth pair)
    Network:包含一组endpoint,同一network的endpoint可以通信。

4.1、跨主机同网段容器通信

  • server1:

网卡监听模式设为混杂模式

移除两个自定义网络

创建macvlan1网络

使用macvlan1网络运行busybox镜像容器

  • server2:

导入busybox

创建macvlan1网络,并使用macvlan1网络运行busybox镜像容器

测试可以相互ping通

4.2、跨主机不同网段容器通信

  • macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
  • vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094。

server1和server2新加一块网卡eth1


新的网卡还没有任何配置

编写eth1的配置文件

启用eth1网卡并开启混杂模式

创建macvlan2网络

server2也做相同的操作

再server1和server2上,使用macvlan2网络运行busybox镜像容器


可以看到相互都可以ping通

server1将容器以macvlan1网络模式连接到demo容器


server2以macvlan1网络模式运行busybox镜像容器,二者可以相互ping通

查看网络规则表

以上是关于Linux企业运维——Docker网络的主要内容,如果未能解决你的问题,请参考以下文章

Linux企业运维——Docker数据卷

企业运维容器之 docker 网络

Linux企业运维——Docker安装部署与镜像构建

Linux企业运维——Docker镜像封装及优化

Linux企业运维——Docker三剑客之Docker Machine

Linux企业运维——DockerRegistry仓库