libnetwork

容器网络管理
授权协议 Apache
开发语言 Google Go
所属分类 管理和监控、 DevOps/运维工具
软件类型 开源软件
地区 不详
投 递 者 胡和煦
操作系统 Linux
开源组织 Docker
适用人群 未知
 软件概览

Libnetwork 提供一个原生 Go 实现的容器连接,是容器的网络。libnetwork 的目标是定义一个健壮的容器网络模型(Container Network Model),提供一个一致的编程接口和应用程序的网络抽象。

Libnetwork一开始的代码只是 libcontainer 和 Docker Engine 中网络部分代码的合并,Docker 官方的愿景是希望 libnetwork 能像 libcontainer 一样,成为一个多平台的容器网络基础包。

受之前的一个 GitHub issue 启发,libnetwork 引入了容器网络模型(CNM)的概念,CNM 定义了三个新的术语,分别是网络沙箱、Endpoint、Network。网络沙箱指的是在每一个容器中,将会有一个隔离的用于网络配置的环境。Endpoint 是一个网络接口,可用于某一网络上的交流。Network 是一个唯一的且可识别的 Endpoint组。

接下来,Docker 公司将会把 libnetwork 集成到 Docker Engine,并在 Docker CLI 中使用新的网络命令。具体的项目路线图读者可以参考 GitHub

注意:libnetwork 项目正在大力开发中,还不适合日常使用!

使用示例:

// Create a new controller instance
        controller := libnetwork.New()
        // Select and configure the network driver
        networkType := "bridge"
        driverOptions := options.Generic{}
        genericOption := make(map[string]interface{})
        genericOption[options.GenericData] = driverOptions
        err := controller.ConfigureNetworkDriver(networkType, genericOption)
        if err != nil {
                return
        }
        // Create a network for containers to join.
        // NewNetwork accepts Variadic optional arguments that libnetwork and Drivers can make of
        network, err := controller.NewNetwork(networkType, "network1")
        if err != nil {
                return
        }
        // For each new container: allocate IP and interfaces. The returned network
        // settings will be used for container infos (inspect and such), as well as
        // iptables rules for port publishing. This info is contained or accessible
        // from the returned endpoint.
        ep, err := network.CreateEndpoint("Endpoint1")
        if err != nil {
                return
        }
        // A container can join the endpoint by providing the container ID to the join
        // api which returns the sandbox key which can be used to access the sandbox
        // created for the container during join.
        // Join acceps Variadic arguments which will be made use of by libnetwork and Drivers
        _, err = ep.Join("container1",
                libnetwork.JoinOptionHostname("test"),
                libnetwork.JoinOptionDomainname("docker.io"))
        if err != nil {
                return
        }
  • 本文讲的是为什么Kubernetes不使用Libnetwork?, 【编者的话】Libnetwork是2015年5月1日Docker发布的容器网络管理项目。Libnetwork使用Go语言编写,目标是定义一个容器网络模型(CNM),并为应用程序提供一致的编程接口以及网络抽象。为什么后来发布的Kubernetes在网络管理方面,没有使用Docker中的Libnetwork呢?且听Google工程师怎

  • 基于OpenStack-Queens搭建安装本地Zun、kuryr-libnetwork和Zun-ui服务: 以controller和compute双节点搭建OpenStack-Queens为例安装三个服务及部署操作。 一、安装本地Zun服务 Zun是Openstack中提供容器管理服务的组件,Zun的目标是提供统一的Openstack API用于启动和管理容器,支持多种容器技术,包括Docker

  • 以下内容均在libnetwork/driverapi目录下 Driver接口如下所示: // Driver is an interface that every plugin driver needs to implement. type Driver interface {   discoverapi.Discover   // NetworkAllocate invokes the dri

  • Kubernetes 在 1.0 版本之前就已经有了最初的网络插件。与此同时 Docker 也引入了 libnetwork 和 Container Network Model (CNM)。现在 Docker 已经发布并支持了网络插件 libnetwork,然而 Kubernetes 的插件却还停留在 alpha 阶段。 那么一个显而易见的问题是为什么 Kubernetes 还没有采用 libnet

  • /root/GOPATH/pkg/mod/github.com/docker/libnetwork@v0.5.6/osl/namespace_linux.go:13:2: case-insensitive import collision: "github.com/Sirupsen/logrus" and "github.com/sirupsen/logrus" 在go.mod文件中,将githu

 相关资料
  • 本文向大家介绍Docker容器的网络管理和网络隔离的实现,包括了Docker容器的网络管理和网络隔离的实现的使用技巧和注意事项,需要的朋友参考一下 一、Docker网络的管理 1、Docker容器的方式 1)Docker访问外网 Docker容器连接到宿主机的Docker0网桥访问外网;默认自动将docker0网桥添加到docker容器中。 2)容器和容器之间通信 需要管理员创建网桥;将不同的容器

  • Kubernetes网络模型 IP-per-Pod,每个Pod都拥有一个独立IP地址,Pod内所有容器共享一个网络命名空间 集群内所有Pod都在一个直接连通的扁平网络中,可通过IP直接访问 所有容器之间无需NAT就可以直接互相访问 所有Node和所有容器之间无需NAT就可以直接互相访问 容器自己看到的IP跟其他容器看到的一样 Service cluster IP尽可在集群内部访问,外部请求需要通过

  • 本章介绍Kubernetes的网络模型以及常见插件的原理和使用方法,主要包括 Host Network:最简单的网络模型就是让容器共享Host的network namespace,使用宿主机的网络协议栈。这样,不需要额外的配置,容器就可以共享宿主的各种网络资源。 共享容器网络:多个容器共享同一个netns,只需要第一个容器配置网络。比如Kubernetes Pod就是所有容器共享同一个pause容

  • Container network model (CNM)是Docker的网络模型,主要由Sandbox、Network以及Endpoint组成。 Sandbox:一个Sandbox对应一个容器的网络栈,能够对该容器的interface、route、dns等参数进行管理。一个Sandbox中可以有多个Endpoint,这些Endpoint可以属于不同的Network。Sandbox的实现可以为li

  • Container Network Interface (CNI) 最早是由CoreOS发起的容器网络规范,是Kubernetes网络插件的基础。其基本思想为:Container Runtime在创建容器时,先创建好network namespace,然后调用CNI插件为这个netns配置网络,其后再启动容器内的进程。现已加入CNCF,成为CNCF主推的网络模型。 CNI插件包括两部分: CNI

  • 最简单的网络模型就是让容器共享Host的network namespace,使用宿主机的网络协议栈。这样,不需要额外的配置,容器就可以共享宿主的各种网络资源。 优点 简单,不需要任何额外配置 高效,没有NAT等额外的开销 缺点 没有任何的网络隔离 容器和Host的端口号容易冲突 容器内任何网络配置都会影响整个宿主机