OpenStack Neutron的Docker libnetwork驱动程序
项目描述
kuryr-libnetwork
OpenStack Neutron的Docker
Kuryr-libnetwork是Kuryr的Docker libnetwork驱动程序,它使用Neutron提供网络服务。它为常见的Neutron插件提供容器化镜像。
此存储库提供libnetwork特定的功能,例如libnetwork api的处理方法。所有可以在不同的容器网络框架(如Docker的libnetwork、K8s的CNI等)之间共享的逻辑/实用程序,都维护在独立的Kuryr存储库中,作为公共库。
自由软件:Apache许可证
发布说明: https://docs.openstack.org/releasenotes/kuryr-libnetwork
特点
Docker libnetwork远程驱动程序
Docker libnetwork IPAM驱动程序
支持Linux Bridge、Open vSwitch、Midonet和IOvisor端口绑定
支持使用现有的Neutron网络
docker network create -d kuryr --ipam-driver=kuryr --subnet=10.10.0.0/24 --gateway=10.10.0.1 \ -o neutron.net.uuid=d98d1259-03d1-4b45-9b86-b039cba1d90d mynet docker network create -d kuryr --ipam-driver=kuryr --subnet=10.10.0.0/24 --gateway=10.10.0.1 \ -o neutron.net.name=my_neutron_net mynet
支持使用现有的Neutron端口
docker run -it --net=kuryr_net --ip=10.0.0.5 ubuntu if a port in the corresponding subnet with the requested ip address already exists and it is unbound, that port is used for the container.
支持Docker的“暴露”选项
docker run --net=my_kuryr_net --expose=1234-1238/udp -it ubuntu This feature is implemented by using Neutron security groups.
使用服务容器运行它
先决条件
运行Kuryr所需的环境组件包括
Keystone(最好配置为Keystone v3),
Neutron(最好为mitaka或更新版本),
数据库管理系统,如MySQL或MariaDB(用于Neutron和Keystone),
您选择的供应商的Neutron代理,
如果您的供应商的Neutron代理需要它,则Rabbitmq,
Docker 1.9+,
构建容器,
此存储库根目录下的Dockerfile可用于使用docker build生成wsgi Kuryr Libnetwork服务器容器,
docker build -t your_docker_username/libnetwork:latest .
此外,您还可以拉取上游容器,
docker pull kuryr/libnetwork:latest
注意,您也可以使用上面命令的标签代替latest,
如何运行容器,
首先,我们准备Docker以找到驱动程序,
sudo mkdir -p /usr/lib/docker/plugins/kuryr sudo curl -o /usr/lib/docker/plugins/kuryr/kuryr.spec \ https://raw.githubusercontent.com/openstack/kuryr-libnetwork/master/etc/kuryr.spec sudo service docker restart
然后启动容器,
docker run --name kuryr-libnetwork \ --net=host \ --cap-add=NET_ADMIN \ -e SERVICE_USER=admin \ -e SERVICE_PROJECT_NAME=admin \ -e SERVICE_PASSWORD=admin \ -e SERVICE_DOMAIN_NAME=Default \ -e USER_DOMAIN_NAME=Default \ -e IDENTITY_URL=http://127.0.0.1:5000/v3 \ -v /var/log/kuryr:/var/log/kuryr \ -v /var/run/openvswitch:/var/run/openvswitch \ kuryr/libnetwork
其中,
SERVICE_USER、SERVICE_PROJECT_NAME、SERVICE_PASSWORD、SERVICE_DOMAIN_NAME、USER_DOMAIN_NAME是OpenStack凭证,
IDENTITY_URL是OpenStack Keystone v3端点的URL,
创建了一个卷,以便日志在主机上可用,
授予NET_ADMIN能力,以便在主机命名空间上执行网络操作,如ovs-vsctl,
您可以在Docker run中的“-e”参数中设置其他选项,
CAPABILITY_SCOPE可以是“local”或“global”,后者适用于当集群存储插入docker引擎时,
LOG_LEVEL用于定义,例如,“DEBUG”日志消息,
PROCESSES用于定义使用多少个kuryr进程来处理libnetwork请求,
请注意,您可能需要更改127.0.0.1 IDENTITY_URL地址为Keystone运行地址。在这种情况下是127.0.0.1,因为示例假设在所有功能集成部署中运行容器,Keystone也绑定在本地,
或者,如果您有一个现有的kuryr.conf,您可以为容器使用它,
docker run --name kuryr-libnetwork \ --net host \ --cap-add NET_ADMIN \ -v /etc/kuryr:/etc/kuryr:ro \ -v /var/log/kuryr:/var/log/kuryr:rw \ -v /var/run/openvswitch:/var/run/openvswitch:rw \ kuryr/libnetwork
从源获取,
$ git clone https://opendev.org/openstack/kuryr-libnetwork $ cd kuryr-libnetwork
安装先决条件,
$ sudo pip3 install -r requirements.txt
安装Kuryr的libnetwork驱动程序,
运行以下命令将获取需求并安装Kuryr,
$ sudo pip3 install .
配置Kuryr,
运行以下命令生成示例配置,etc/kuryr.conf.sample,
$ ./tools/generate_config_file_samples.sh
重命名并复制到所需路径的配置文件,
$ cp etc/kuryr.conf.sample /etc/kuryr/kuryr.conf
对于使用Keystone v3,编辑/etc/kuryr/kuryr.conf中的Neutron部分,替换ADMIN_PASSWORD,
[neutron] auth_url = http://127.0.0.1:5000/v3/ username = admin user_domain_name = Default password = ADMIN_PASSWORD project_name = service project_domain_name = Default auth_type = password
或者,对于使用Keystone v2,编辑/etc/kuryr/kuryr.conf中的Neutron部分,替换ADMIN_PASSWORD,
[neutron] auth_url = http://127.0.0.1:5000/v2.0/ username = admin password = ADMIN_PASSWORD project_name = service auth_type = password
在同一文件中取消注释带有Kuryr vif绑定可执行文件路径的bindir参数。例如,如果您在Debian或Ubuntu上安装了它,
[DEFAULT] bindir = /usr/local/libexec/kuryr
运行Kuryr,
目前,Kuryr使用bash脚本来启动服务。确保在执行以下命令之前已安装tox,
如果需要启用SSL,请遵循以下步骤或跳到下一步,
$tox -egenconfig Add these 3 parameters in generated file[etc/kuryr.conf.sample]: ssl_cert_file <Absolute Path for Cert file> ssl_key_file <Absolute Path for private key> enable_ssl <True or False> $export SSL_ENABLED=True Add the path names in [contrib/tls/kuryr.json]: InsecureSkipVerify <false/true> CAFile: <Absolute Path for CA file> CertFile: <Absolute Path for Cert file> KeyFile: <Absolute Path for private key> Placement of cert files: By default Kuryr places it certs in /var/lib/kuryr/certs directory, Please make sure that certs are on proper location as mentioned in kuryr.conf Verification of kuryr.json: Please make sure that your kuryr.json look similar to below sample with appropiate paths of certs updated, and remove older .spec files if any exists. and https configuration url:: { "Name": "kuryr", "Addr": "https://127.0.0.1:23750", "TLSConfig": { "InsecureSkipVerify": false, "CAFile": "/var/lib/kuryr/certs/ca.pem", "CertFile": "/var/lib/kuryr/certs/cert.pem", "KeyFile": "/var/lib/kuryr/certs/key.pem" } } Optional: For locally generating and testing, please refer to below link: http://tech.paulcz.net/2016/01/secure-docker-with-tls/
使用以下命令运行Kuryr服务器。如果您已安装uwsgi,此命令将在其下运行Kuryr。您可以通过设置KURYR_USE_UWSGI=False来覆盖此行为,
$ sudo ./scripts/run_kuryr.sh
Kuryr启动后,请重新启动您的Docker服务,例如,
$ sudo service docker restart
bash脚本在缺失时创建以下文件,
/usr/lib/docker/plugins/kuryr/kuryr.json:libnetwork的Json规范文件。
请注意,运行pyroute2以创建和删除veth对需要root权限。
kuryr-libnetwork docker managed pluginv2
如何构建kuryr-libnetwork docker managed pluginv2
Docker Engine的插件系统允许您使用Docker Engine为docker 1.13及更早版本安装、启动、停止和删除插件。
下载kuryr-libnetwork源代码,并在kuryr-libentwork顶层文件夹中运行contrib/docker/v2plugin/v2plugin_rootfs.sh。此脚本将config.json复制到顶层文件夹并构建rootfs。
$ git clone https://opendev.org/openstack/kuryr-libnetwork $ cd kuryr-libnetwork $ ./contrib/docker/v2plugin/v2plugin_rootfs.sh $ docker plugin create kuryr/libnetwork2 ./
如何使用kuryr-libnetwork docker managed pluginv2
如果用户在本地构建pluginv2,用户需要启用pluginv2。
$ docker plugin enable kuryr/libnetwork2
如果用户从docker hub安装pluginv2,安装后pluginv2将直接启用。
$ docker plugin install kuryr/libnetwork2
当用户创建kuryr网络时,驱动程序名称和ipam-driver名称为kuryr/libnetwork2:latest。
$ docker network create --driver=kuryr/libnetwork2:latest --ipam-driver=kuryr/libnetwork2:latest ...
如何在本地尝试嵌套容器
安装运行devstack的OpenStack,使用所需的local.conf文件,但包括以下内容以使用OVS防火墙和启用Trunk端口
[[post-config|/$Q_PLUGIN_CONF_FILE]] [DEFAULT] service_plugins=trunk [securitygroup] firewall_driver=openvswitch
使用Neutron trunk端口启动VM。 <https://wiki.openstack.org/wiki/Neutron/TrunkPort>
在VM内部按照正常安装步骤安装kuryr和kuryr-libnetwork(参见上述步骤中的《安装Kuryr的libnetwork驱动程序》)。
重新配置VM内部的kuryr,使其指向neutron服务器并使用vlan驱动程序
配置/etc/kuryr/kuryr.conf
[binding] driver = kuryr.lib.binding.drivers.vlan link_iface = eth0 # VM vNIC [neutron] auth_url = http://KEYSTONE_SERVER_IP:5000/v3/ username = admin user_domain_name = Default password = ADMIN_PASSWORD project_name = service project_domain_name = Default auth_type = password
重启VM内部的kuryr服务
已知的嵌套容器限制
由于Neutron Trunk服务实现选择,使用iptables混合安全组驱动程序的部署不支持trunk服务。
由于Neutron错误,QoS规则没有正确应用于子端口,即嵌套容器端口。
测试Kuryr
为了快速检查Kuryr是否工作,创建一个IPv4网络
$ docker network create --driver kuryr --ipam-driver kuryr \ --subnet 10.10.0.0/16 --gateway=10.10.0.1 test_v4_net 785f8c1b5ae480c4ebcb54c1c48ab875754e4680d915b270279e4f6a1aa52283 $ docker network ls NETWORK ID NAME DRIVER SCOPE 785f8c1b5ae4 test_v4_net kuryr local
或者您可以使用双栈网络进行测试
$ docker network create --driver kuryr --ipam-driver kuryr \ --subnet 10.20.0.0/16 --gateway=10.20.0.1 --ipv6 --subnet 2001:db8:a0b:12f0::/64 \ --gateway 2001:db8:a0b:12f0::1 test_net 81e1a12eedfb168fbe73186faec4db5088aae4457244f960f38e14f4338e5760 $ docker network ls NETWORK ID NAME DRIVER SCOPE 81e1a12eedfb test_net kuryr local
已知的IPv6网络限制
由于Docker –ipv6标签错误,版本1.12和1.13在仅使用IPv6创建网络时存在问题。
生成文档
我们使用Sphinx来维护文档。您可以使用pip安装Sphinx
$ pip3 install -U Sphinx
除了Sphinx之外,您还需要以下要求(不包括在requirements.txt中)
$ pip3 install openstackdocstheme reno 'reno[sphinx]'
文档的源代码位于doc中,您可以使用以下命令生成html文件。如果生成成功,将在doc下创建一个build/html目录
$ cd doc $ make html
现在您可以将文档作为简单的网站在https://127.0.0.1:8080上提供服务
$ cd build/html $ python3 -m SimpleHTTPServer 8080
限制
Docker 1.12与SwarmKit(新的Swarm)不支持远程驱动程序。因此,它不能与Kuryr一起使用。此限制将在Docker 1.13中删除。
要创建具有相同/重叠cidr的子网段的Docker网络,需要在创建此类网络时预创建Neutron subnetpool,并传递池名称。应使用以下命令行选项-o和–ipam-opt传递池名称
$ neutron subnetpool-create --pool-prefix 10.0.0.0/24 neutron_pool1 $ sudo docker network create --driver=kuryr --ipam-driver=kuryr \ --subnet 10.0.0.0/16 --gateway=10.0.0.1 --ip-range 10.0.0.0/24 \ -o neutron.pool.name=neutron_pool1 \ --ipam-opt=neutron.pool.name=neutron_pool1 \ foo eddb51ebca09339cb17aaec05e48ffe60659ced6f3fc41b020b0eb506d364
现在Docker用户创建另一个网络,其cidr与上一个相同,即10.0.0.0/16,但具有不同的池名称,neutron_pool2
$ neutron subnetpool-create --pool-prefix 10.0.0.0/24 neutron_pool2 $ sudo docker network create --driver=kuryr --ipam-driver=kuryr \ --subnet 10.0.0.0/16 --gateway=10.0.0.1 --ip-range 10.0.0.0/24 \ -o neutron.pool.name=neutron_pool2 \ --ipam-opt=neutron.pool.name=neutron_pool2 \ bar 397badb51ebca09339cb17aaec05e48ffe60659ced6f3fc41b020b0eb506d786
或者,如果存在具有相同名称的多个池,Docker用户可以传递现有的池uuid
$ sudo sudo docker network create --driver=kuryr --ipam-driver=kuryr \ --subnet 10.0.0.0/16 --gateway=10.0.0.1 --ip-range 10.0.0.0/24 \ -o neutron.pool.uuid=2d5767a4-6c96-4522-ab1d-a06d7adc9e23 \ --ipam-opt=neutron.pool.uuid=2d5767a4-6c96-4522-ab1d-a06d7adc9e23 \ bar 0aed1efbe21f6c29dc77eccd0dd17ba729274f9275070e1469230c864f9054ff
外部资源
- 最新和最深入的文档可在以下位置找到
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
kuryr-libnetwork-14.0.0.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 245db12031379a10ec3cb2b8e7ea6a10278a23030a6d31e0312c0e8d98dd0e92 |
|
MD5 | f295ce8c79be5bfabb817bd2ce51e540 |
|
BLAKE2b-256 | f9020017c3e028d76e02e998e2d793dc2c3243266df82d37b9b9e8628e193899 |
kuryr_libnetwork-14.0.0-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 8d7de320b98245b33c47315e8e86030be6bb6f4657065cbe4138f4d1c948cfed |
|
MD5 | 85e97d1e40db6d4059f716591875f267 |
|
BLAKE2b-256 | b9d15bb9895026dbfc9c2dcff8546e53b530beb6ca42bff06aae1876a879cf2b |