Docker容器(八)网络安全临时

一    docker 网络模式

(1)基本网络配置

(2)高级网络配置

(3)网络解决方案进阶

二    原生网络

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

#  yum whatprovides */brctl-->brctl的工具!

#  bridge-utils-1.5-9.el7.x86_64

docker network ls

524ffb6b9445        bridge              bridge              local  # 桥接
e6fd58664b30        host                host                local  # 仅主机
46f9825d487f        none                null                local  # 禁用网络

(1)bridge网络

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

[root@docker1 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces	
docker0		8000.0242fc73f70c	no              # 说明:由于没有建立容器,所以没有接口

缺点:bridge模式下容器没有一个公有ip(缺点1),只有宿主机可以直接访问外部主机是不可见的(缺点-->私有网络,内部隔离),但容器通过宿主机的NAT规则(地址转换)后可以访问外网。

说明:默认是桥接的方式,不需要指定

说明:通过docker0接口的网关(gateway),然后进行路由转发(ip_forward)与宿主机通信!

虚拟网络对--->一根网线的两根,连接各自的namespace(网络命名空间)

说明:docker安装的时候默认帮我们开启了路由转发!

SDN( Software Define Network),软件定义网络,用户不需要直接操作硬件,鼠标点一点,隔离了用户对于硬件的依赖!

(2)host模式

host网络模式需要在容器创建时指定--network=host,host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性

说明host模式是桥接模式的有力补充,即桥接模式下容器没有公共的IP(解决bridge的问题)!

缺点:宿主机和容器共享一份网络资源,端口不能冲突,使用一个网络命名空间,所以有资源争抢的问题

[root@docker2 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02427b9fda13	no	

# 由于共享网络资源,所以没有接口(用bridge,会有接口)

说明:会引起安全问题,宿主机和网络机共享,不经过docker0!

host的其它好处:用localhost来访问!

host方式补充容器间共享一个网络资源

Container 网络模式是 Docker 中一种较为特别的网络的模式,在容器创建时使用--network=container:connam指定

处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信

一个应用:不知道IP的情况下,这种模式容器之间可以通过localhost:3306(数据库)来访问,原来通过TCP,现在通过回环地址(lo)搞定,加快网络通信的速度!

(3)none模式

特点:是指禁用网络功能只有lo接口,在容器创建时使用,--network=none指定。

容器特殊存在:生成token,存储一些敏感密码文件,不需要网络通信,必须做这些隔离

[root@docker2 ~]# docker run -it --name vm2 --network=none ubuntu
root@eff58bc49e6e:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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
root@eff58bc49e6e:/# 

说明:没有网络,必须在本机,否则无法访问

二   高级网络配置

(1)自定义网络模式,docker提供了三种自定义网络驱动:bridge、overlay、macvlan

1)bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。

建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。

自定义的桥接和默认原生的桥接区别自定义内置DNS解析

2)overlay

作用:应用层(开发人员),可以支持更多的虚拟子网,用于跨主机!

3)macvlan

作用:用在底层二层(CT人员),通过物理接口(etho网卡),用在跨主机,运营开发商!

说明:作为PASS云的体系,不知道用户的体系,overlay和macvlan都有!

(2)创建网络

[root@docker2 ~]# docker network create my_net1
6f56371978a715ced6917edffccad05c9bff9fe735fff4df229671a897a534d7
[root@docker2 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
21e12cecf441        bridge              bridge              local
94120fcefcf0        host                host                local
6f56371978a7        my_net1             bridge              local
0a9bf240468c        none                null                local

容器之间除了使用ip通信外,还可以使用容器名称通信。
docker 1.10开始,内嵌了一个DNS server,dns解析功能必须在自定义网络中使用

docker引擎又自动给我们创建了桥接口,默认是动态单调递增的释放后会回收

需求:创建自定义网桥,指定网段和网关

说明:创建两个容器,并桥接到不同的网桥上,默认彼此是不通信的(隔离)!

补充:使用--ip参数可以指定容器ip地址,但必须是在自定义网桥上,默认的bridge模式不支持,同一网桥上的容器是可以互通的

docker在设计上就是要隔离不同network的

iptables -S

-A DOCKER-ISOLATION-STAGE-1 -i br-d39efc8fa01f ! -o br-d39efc8fa01f -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-6f56371978a7 ! -o br-6f56371978a7 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN

需求:使不同网桥的进行通信

使用 docker network connect命令为vm1添加一块my_net2 的网卡

root@18c49c18bae4:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
22: eth1@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:1e:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.30.0.3/24 brd 172.30.0.255 scope global eth1
       valid_lft forever preferred_lft forever
root@18c49c18bae4:/# 

说明:又增加一块网卡(两个网段的IP

[root@docker2 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
br-6f56371978a7		8000.0242a53d3aa3	no	veth1a9ed7d
br-d39efc8fa01f		8000.02424ad6e5e1	no	veth0edde9d
					                veth24cff9e
docker0		8000.02427b9fda13	no	

实质:在 vm6中添加一个网卡(不同网段的IP)!

说明:容器之间其它的通信方式

--link是连接两个容器

说明:ctrl+(p|q)->打入后太   --->docker container attach vm1

注意:不要rm调容器!

说明:会把变量信息注册到当前的容器中!

link -->变量不变(解析变了),本地解析!-->比较私密的联系(变量的利用)!

link -->把关闭的容器,重新拉起来!

docker run -d --name nginx nginx:1.16

docker run -it --name vm1 --link nginx:web ubuntu # 说明:类似于起个别名!

cat /etc/hosts  

env

#######################

docker container stop nginx  # 注意是停止而不是删除

docker run -d nginx:1.16     # 说明:上面停止之后,会释放IP资源,所以这里开启一个先占用IP!

docker container start nginx # 把容器起起来

/etc/hosts发生变化!           # IP发生变化,环境变量不变!

补充:容器如何访问外网是通过iptables的SNAT实现的

需求:外网如何访问容器----->选项指定映射端口(-p port:port)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值