为安全容器配置网络

通过CNI方式配置安全容器网络

CNI即Container Network Interface,是CNCF的一个项目,由一组用于配置Linux容器的网络接口的规范和库组成。

为什么需要CNI呢,现在有各种各样的容器平台,也有各种各样的网络解决方案(flannel、calico等),如果每出现一种新的解决方案,都要为容器平台和相应的网络解决方案做适配,那工作量将是巨大。一旦有新的网络方案出现,只要它能满足CNI标准,那么它就能为同样满足该协议的所有容器平台提供网络功能。

CNI插件是独立的可执行文件,被上层容器管理平台调用。

安全容器支持CNI

需要在配置文件configuration.toml中开启配置选项如下:

  1. [netmon]
  2. # If enabled, the network monitoring process gets started when the
  3. # sandbox is created. This allows for the detection of some additional
  4. # network being added to the existing network namespace, after the
  5. # sandbox has been created.
  6. # (default: disabled)
  7. enable_netmon = true
  8. # Specify the path to the netmon binary.
  9. path = "/usr/bin/kata-netmon"
  10. # If enabled, the runtime will not create a network namespace for shim and hypervisor processes.
  11. # This option may have some potential impacts to your host. It should only be used when you know what you're doing.
  12. # `disable_new_netns` conflicts with `enable_netmon`
  13. # `disable_new_netns` conflicts with `internetworking_model=tcfilter` and `internetworking_model=macvtap`. It works only
  14. # with `internetworking_model=none`. The tap device will be in the host network namespace and can connect to a bridge
  15. # (like OVS) directly.
  16. # If you are using docker, `disable_new_netns` only works with `docker run --net=none`
  17. # (default: false)
  18. #disable_new_netns = true

tap设备网络支持

安全容器技术是基于VM实现的,对于物理机系统来说,安全容器就相当于是一个VM,所以安全容器可以在Neutron网络中将VM通过TAP技术接入外部网络。我们这里不需要关心TAP设备的创建和网桥对接等问题,只需要将指定的TAP设备(host已经存在)热插进pause容器的VM,并更新网卡信息即可。