Network Namespace在Openstack中的应用

本文以DHCP为例,介绍了network namespace的基本原理,以及他在OpenStack中的应用。

基本概念

1: Linux系统的全局资源

1)user:用户ID和组ID

2)uts:主机名和域名

3)pid:进程ID

4)mount:文件系统挂载点

5)network:网路资源

6)ipc:进程间通信

2:Linux Namespace Linux Namespaces提供了一种隔离系统全局资源的方法, 通过这个方法,每个namespace都了有一份独立的资源。这样,不同的进程在各自的namespace里对同一种资源的访问不会发生冲突。

每个Namespace看上去就像一个单独的Linux系统,从而实现了系统的隔离(Isolating Your System with Linux Namespaces)。与hypervisor比较,这是一个轻量级的系统虚拟化解决方案。被OpenStack广泛使用,并且是docker的核心技术之一。

3:Linux Network Namespace

Network namespace主要实现了网络资源的隔离,网络资源包括网络设备、IPv4和IPv6协议栈、IP路由表、防火墙、socket等。给一个或多个进程私有的网络资源。在OpenStack里,用来实现L3层网路的虚拟化。

4:DHCP在Openstack中的实现

DHCP的基本功能就是给客户端动态提供IP,具体原理不在这里描述,下面只是简单地介绍一下DHCP在OpenStack里的如何工作的。

(1):neutron-dhcp-agent 用参数"--dhcp-hostsfile=filename" 启动dnsmasq服务。当新的port被创建或者旧的port被删除时,OpenStack以dnsmasq-format的格式更新hostsfile文件。如下例所示:

fa:17:4e:86:18:a6,,192.168.10.10,192800

fa:17:4e:78:18:9b,,192.168.10.20,192800

(2):当OpenStack从hostsfile增加或者删除一条记录时,他给dnsmasq服务发送一个HUP信号,dnsmasq会重新读取配置文件和hostsfile。当VM发出DHCP-Discover后,dnsmasq分配IP地址给VM。

管理Network Namespace

1)新建network namespace

经过上面几步,创建出如下的网络拓扑图:

2)创建veth pair

创建一个veth pair, 一端接在在新建的namespace中, 通常命名为eth0,一端接在Open vSwitch, 通常命名为veth。通过Open vSwitch进行路由转发, 达到两个namespace通信的目的。

对green namespace做同样的操作,把他和openvswitch也连起来。

3)配置IP地址

给eth-r和eth-g配置IP地址后,两个namespace就可以互相交流了。

DHCP在Openstack中的实现

虚拟机,DHCP服务和Linux bridge在OpenStack中的逻辑结构图如下图所示。本文以linux bridge为例来解释说明。

虚拟机和dhcp namespace都连在linux bridge上,dnsmasq服务在dhcp namespace的veth pair端口监听虚拟机dhcp的请求。具体实现步骤如下:

1)新建一个namespace:dhcp-r

2)新建一个veth-pair(tab-1,ns-1)

3)把dhcp的Ip地址配置在ns-1端口上

4)起dnsmasq服务,让他监听在ns-1上

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2016-04-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏晓晨的专栏

使用Docker安装Jenkins

3181
来自专栏写代码的海盗

Docker学习总结之Run命令介绍 Operator exclusive options

Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢!...

3315
来自专栏jeremy的技术点滴

docker排雷记

3373
来自专栏恰童鞋骚年

Java微服务之Spring Boot on Docker

本文学习前提:Java, Spring Boot, Docker, Spring Cloud

2804
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Docker Swarm安装和保护OpenFaaS

无服务器架构从开发人员隐藏服务器实例,并且通常公开允许开发人员在云中运行其应用程序的API。这种方法可以帮助开发人员快速部署应用程序,因为他们可以将配置和维护实...

4581
来自专栏算法修养

Docker 学习应用篇三:使用docker搭建的环境,安装thinksns

Thinksns 是一个开源的社交网站,因为目前的项目需要用到这个,所以就下载一个安装试试看。 之前在windows上用了wamp,安装的很顺利。但是项目是要部...

3958
来自专栏用户画像

中断向量 中断向量表

1、中断标识码(中断类型号):由硬件(通常是中断控制器)产生,以标识不同的中断源。

1073
来自专栏小狼的世界

Kubernetes基础:Pod的详细介绍

Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。Pod中包含了一个或多个容器...

1464
来自专栏Samego开发资源

IDEA配置Tomcat服务器并创建Java Web项目

3023
来自专栏linux运维学习

linux学习第十九篇:压缩介绍,gzip,bzip2,xz压缩工具

file命令可查看文件是压缩文件或者test文件等,如file 1.txt 可查看1.txt是什么类型的文件 linux压缩打包介绍 在windows下我们接...

2657

扫码关注云+社区

领取腾讯云代金券