容器安全技术容器网络支撑技术

容器网络

云计算
系统的发展来看,业界普遍的共识是,计算虚拟化和存储虚拟化已经不断突破和成熟,但网络虚拟 化的发展仍相对滞后,成为制约云计算发展的一大瓶颈。网络虚拟化、多租户、混合云等特性均不同程度地给云 网络的安全建设提出全新的挑战。容器技术提供了轻量级
虚拟化的能力,使实例资源占用大幅降低,提升了分布式计算系统的性能,但分布式 容器系统的网络仍是较为复杂的部分。本节将针对容器主机网络以及容器集群网络分别进行介绍。

容器网络支撑技术

容器网络虽然有多种形态,但多数使用了若干种支撑技术,例如网络命名空间(Network Namespa
ce)、 Linux网桥(Linux Bridge)以及虚拟网络接口对(Veth Pair)。1. 网络命名空间
网络命名空间是一种实现网络隔离的技术,创建一个网络命名空间后就有一个包括网络接口、路由、访问控 制规则(Iptables)等网络资源的独立网络环境,该命名空间的网络与其它网络隔离。
2. Linux 网桥
Linux网桥是 Linux系统中的虚拟网桥,它可以将不同主机的网络接口连接,从而实现主机间的通信。 Docker 启动后,会默认创建名为 docker0 的 Linux网桥。在未创建任何容器时,可以看到 docker0 网桥没有
接口连接。
brctl show
bridge name bridge id STP enabled interfaces docker0 8000
.0242d1837f60 no
当创建容器时(d458f9bd528),Docker 会为容器创建虚拟网络接口,并将其连接到 docker0 网桥上。

brctl show
bridge name  bridge id  STP enab[led](http://github5.com/search?f=p&wd=led)
  interfaces docker0   8000.0242f22b2de4  no  veth4d91464veth6ed0a8c 

2.3.1.3 虚拟网络接口对
为了实现容器与宿主机网络、外部网络之间的通信,需要通过虚拟网络接口对将容器与 Linux网桥连接。
当 Docker 启动一个容器时(d458f9bd528),会创建一个虚拟网络接口对,即两个相连的虚拟网络接口。 其中一个连接容器,成为容器 d458f9bd528 的网卡 eth0 ;另一个被连接到 docker0 网桥上,从而容器内部的数 据包先后经过 eth0 和 veth6ed0a8c 对到达 docker0 网桥,实现在同一子网内不同容器之间的通信。
通过下面命令可以得到容器的网卡 eth0 在宿主机上的编号(peer-ifindex)。

  • docker exec d458f9bd528 ethtool -S eth0 NIC statistics:
    peer_ifindex: 37
    继续执行下面命令找到宿主机上 peer_ifindex 为 37 的接口名称。
  • ip link | grep 37
    37: vethfaa2a17@if36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT
    运行 ethtool 可查找其对端接口编号。
  • ethtool -S vethfaa2a17 NIC statistics:
    peer_ifindex: 36
主机网络

以 Docker 为例,目前 Docker 容器主机网络(Host Network)主要分为以下 4 种模式。

  1. None 网络模式
    None 网络模式下,容器拥有自己的网络命名空间,但是并不为容器进行任何的网络配置。创建的容器只有 loopback 接口,需要用户为容器添加网卡、配置 IP 等。
    rkt 同样支持 None 网络模式。该网络模式的用途主要是测试容器、稍后为容器分配网络、以及一些对安全 性要求高且不需要联网的场景。
  2. Bridge 网络模式
    Bridge(网桥)网络模式主要是利用 Iptables 进行 NAT和端口映射,从而提供单主机网络。与虚拟机下的 NAT网络类似,这种网络模式下同一主机上的容器之间是可以互相通信的,但是分配给每个容器的 IP 地址从主 机外部不能访问。

Bridge 网络是 Docker 默认的网络类型,在安装完 Docker 后会默认创建 docker0 网桥,并通过虚拟网络接口 对连接容器和 docker0 网桥,这样主机上的所有容器就处在了一个二层网络中。

Container Container Container
eth0 eth0 eth0 veth veth veth
docker0
Host
eth0

  1. Host 网络模式
    Host(主机)网络模式下,Docker 服务启动容器时并不会为容器创建一个隔离的网络环境,容器将会被加 入主机所在网络,共享主机的网络命名空间(/var/run/docker/netns/default)。其网络配置(网络地址、路由表 和 Iptables 等)和主机保持一致,容器通过主机的网卡和 IP,实现与外部的通信。
    由于容器并没有独立的网络命名空间,容器服务的端口没有经过端口映射就直接暴露在主机上,因此容器中 服务的端口号不能与主机上已经使用的端口号冲突。
    以这种网络模式创建的容器虽然可以访问主机的所有网络接口,但除非在特权模式下部署,否则容器可能不 会重新配置主机的网络堆栈。Host 网络模式是 Apache Mesos 中默认使用的网络模式,如果没有指定网络类型, 新的网络命名空间将不会与容器相关联,而是与主机网络相关联。

    Container
    docker0
    Host
    eth0

  2. Container 网络模式
    Container(容器)网络模式比较特殊,新创建的容器和已经存在的某个容器共享同一个命名空间。该新容器 不会创建自己的网卡或配置自己的 IP,而是和一个指定容器共享 IP、端口范围等。
    这两个容器只有网络方面共享数据,文件系统、进程列表等其它方面还是隔离的。两个容器的进程可以通过 loopback 网卡通信。

    Container Container
    eth0
    veth
    docker0
    Host
    eth0

参考资料

绿盟 容器安全技术报告

友情链接

CSA 软件定义边界和零信任

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值