OpenStack简介
OpenStack版本发展
OpenStack版本系列字母以A~Z命名,从2010年发布的第一个版本"Austin"到当前稳定版本"ocata"一共经历了15个版本,第16个版本"pike"正在开发中。
这七年中OpenStack在不断的更新迭代,虽然还未完全歩入商用化,但是已经受到很多厂商的青睐,很多厂商基于OpenStack做公有云或私有云的云计算操作系统。容器的出现为OpenStack的发展又加了一管血,OpenStack与容器协作可以有效提高开发团队的速度和效率,尤其是在OpenStack私有云环境中。随着容器与OpenStack结合,容器的应用范围将会进一步扩大,另一方面容器也将会对OpenStack市场深化产生助推作用。
OpenStack架构
OpenStack 是一个开源云计算操作系统,通过一个数据中心管理大量的计算、存储、网络资源。管理员通过dashboard高效地管控这些资源,用户则通过web接口使用这些资源。
OpenStack支持多种类型的云环境,试图打造一个部署简单、操作灵活、可大规模扩展、标准统一的云计算管理平台。OpenStack通过各种各样的服务灵活地提供基础设施即服务(IaaS)解决方案,并且每种服务都提供了API接口以便更加灵活的集成。OpenStack的服务主要包括:
dashboard
a) horizon:提供了一个基于web的自服务门户,与OpenStack底层服务交互,用户无需通过命令,直接在dashboard界面上就能够完成创建实例、分配IP地址以及配置访问控制等操作。计算服务
a) nova:在OpenStack环境中计算实例的生命周期管理。按需响应完成生成、调度、回收虚拟机等操作。除了管理虚拟机外还可以管理网络,如分配网络地址、vlan和隔离等。网络服务
a) neutron:neutron之前被称为quantum,主要负责为其它OpenStack服务提供网络连接即服务,neutron基于插件架构因此可以支持众多的网络提供商和技术。基于neutron服务,用户可以在openstack上建立负载平衡、VPN、route、配置网络地址和网段等。存储服务:
a) 对象存储swift: swift的实现方式像是一个文件服务器需要挂载目录,在这样的方式下,swift将对象和文件写到多个存储装置中。swift上存储的一般是图片、文字和多媒体等,基于数据复制和可扩展架构的swift具有很高的容错性,当一台存储装置故障时,其他存储装置中仍然保留着资料。
b) 块存储cinder:为运行实例而提供的持久性块存储。可插拔驱动的架构有助于创建和管理块存储设备。管理员可以通过cinder创建volume、创建虚拟机快照等。共享服务:
a) identity(keystone):为其他OpenStack服务提供认证和授权服务,为所有的OpenStack服务提供一个端点目录。keystone本身无法提供身份验证,但是可以集成各种其他目录服务实现多种形式的身份验证。
b) image(glance):存储和检索虚拟机磁盘镜像,OpenStack计算服务会在部署实例时使用glance服务。
c) telemetry:为OpenStack云的计费、基准、扩展性以及统计等目的提供监测和计量。高层次服务:
a) 编排:Orchestration服务支持多样化的综合的云应用,通过调用OpenStack-native REST API和CloudFormation-compatible Query API,支持:term:HOT <Heat Orchestration Template (HOT)>
格式模板或者AWS CloudFormation格式模板。
OpenStack架构图如下所示:
- 位于最上面的dashboard是图形用户界面,底层服务提供ui接口给dashboard,dashboard可以与底层服务交互从而为用户提供web自服务。
- network不仅向dashboard提供ui,还需要为compute服务提供网络连接。
- compute被认为是OpenStack的核心,负责处理工作负载流程。compute服务不仅依赖network服务为其提供网络连接,还需要block存储服务提供volumes。此外compute服务会将镜像存储在镜像服务中。
- image服务负责存储和检索虚拟机磁盘镜像,compute服务会将镜像存储在image中,并且需要依赖image中的镜像部署vm。
- image将disk文件存储在object存储中,vm通过restful API将对象数据存储在swift中,cinder也可以将volumes备份到swift中。
- block存储为compute服务提供volumes, 在VM看来block存储提供的volume就像是虚拟硬盘,可以用来存储数据
- identity为所有服务提供认证和权限管理,简而言之,OpenStack上的每一个操作都需要通过keystone的审核。
OpenStack Ocata版本安装
1 安装环境
从官网文档获悉,安装一套openstack环境至少需要两台虚拟机,一台作为controller节点,一台作为compute节点,block存储节点和object节点可以选择性安装。本次仅安装controller节点和compute节点。
即使是搭建概念验证环境,OpenStack也对环境有一定的要求,最低标准如下所示:
- Controller Node: 1 processor, 4 GB memory, and 5 GB storage
- Compute Node: 1 processor, 2 GB memory, and 10 GB storage
2 安装准备
2.1 设置hostname
- 编辑控制节点上的/etc/hosts文件,修改控制器节点的hostname。
- 编辑计算节点上的/etc/hosts文件,修改计算节点的hostname。
2.2 设置网络接口
1、将控制节点上的第二个网口设置为provide interface,无需为其分配IP。编辑/etc/network/interface文件,添加下面内容后重启控制节点。
auto ens192(第二块网口名称)
iface ens192 inet manual
up ip link set dev $IFACE up
down ip set dev $IFACE down
2、将计算节点上的第二个网口设置为provide interface,具体操作与上面相同。
2.3 网络时间协议NTP
在各个节点上安装chrony,确保各个节点能够准确同步服务。
控制节点
1、安装chrony
apt install chrony
2、确保计算节点能够连接控制上的chrony,在/etc/chrony/chrony.conf中添加:
server NTP_SERVER iburst
allowe 172.171.0.0/24(计算节点网段)
3、重启NTP服务
service chrony restart
计算节点
1、安装chrony
apt install chrony
2、确保计算节点能够连接控制上的chrony,在/etc/chrony/chrony.conf中添加:
server NTP_SERVER iburst
注释下述内容 :
pool 2.debian.pool.ntp.org iburst
3、重启NTP服务
service chrony restart
验证
1、在控制节点上执行下述命令,结果中带星号的是NTP当前同步的地址。
chronyc sources
2、 在计算节点上执行下述命令,结果中“Name/IP address”一栏显示的应该是控制节点的hostname。
chronyc sources
2.4 启用openstack库
在所有节点执行下列操作,启用openstack库:
apt install software-properties-common
add-apt-repository cloud-archive:ocata
apt update
apt dist-upgrade # 升级包
apt install python-openstackclient #安装openstack客户端
2.5安装数据库
1、在控制节点安装数据库
apt install mariadb-server python-pymysql
2、创建/etc/mysql/mariadb.conf.d/99-openstack.cnf,并编辑内容如下
bind-address = [controller-ip]
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
3、运行mysql_secure_installation脚本来保证数据库安全,为root账户设置一个合适的密码
mysql_secure_installation
2.6 安装消息队列服务
1、使用RabbitMQ消息队列服务,在controller安装消息队列服务
apt install rabbitmq-server
2、添加用户,用合适的密码替代‘RABBIT_PASS’。
rabbitmqctl add_user openstack RABBIT_PASS
3、用户权限配置
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
2.7 安装memcache
1、认证服务的认证机制使用Memcached来缓存token,一般运行在控制节点上。在控制节点上执行:
apt install memcached python-memcache
2、编辑/etc/memcached.conf,将”-i 127.0.0.1“中的IP改成控制节点IP。
3、重启memcache服务
service memcached restart
3 认证服务
用户使用OpenStack时,通常第一个接触的服务就是认证服务,只有经过认证服务认证,用户才能使用其他OpenStack服务。另外认证服务还可以和一些外部用户管理系统(如LDAP)进行集成。认证服务的主要组成包括:
- Server:通过RESTful接口提供认证、授权服务的中央服务器;
- Drivers:集成到中央服务器中,负责获取OpenStack外部仓库中的认证信息。
- Modules:运行于使用认证服务的OpenStack组件的地址空间中,负责拦截服务请求,提取用户证书后发往中央服务器请求授权。
认证服务安装在控制节点,以下就是具体安装步骤。
3.1 先决条件
1、使用root用户进入数据库,创建keystone数据库,并赋予适当的权限:
mysql -u root -p
> CREATE DATABASE keystone;
> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
其中 'KEYSTONE_DBPASS'是自己设置的密码,由于安装过程中设置的密码较多,建议设置成易记的密码。
3.2安装配置组件
1、安装keystone
apt install keystone
2、编辑/etc/keystone/keystone.conf:
[database]
connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
#KEYSTONE_DBPASS是创建keystone数据库时设置的密码
[token]
provider=fernet
3、同步认证服务数据库
su -s /bin/sh –c "keystone-manage db_sync" keystone
4、初始化Fernet key仓库
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
5、bootstrap认证服务
keystone-manage bootstrap --bootstrap-password ADMIN_PASS --bootstrap-admin-url http://controller:35357/v3/ --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url http://controller:5000/v3/ --bootstrap-region-id RegionOne
其中‘ADMIN_PASS’是admin用户的密码,请自行定义。
3.3. 配置Apache HTTP服务器
1、 编辑/etc/apache2/apache2.conf,添加
ServerName controller
3.4 完成安装
1、 重启Apache服务,删除默认的SQL数据库
service apache2 restart
rm -f /var/lib/keystone/keystone.db
2、 配置管理员帐号
$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN_PASS
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:35357/v3
$ export OS_IDENTITY_API_VERSION=3
ADMIN_PASS是bootstrap认证服务时设置的密码。
3、Identity service为其他OpenStack服务提供认证服务,而认证服务需要domains, projects, users和roles。因此安装好keystone后先创建service项目:
openstack project create --domain default --description "Service Project" service
4、一般的操作无需使用admin用户,创建一个demo项目和用户,作为普通用户使用。
#创建一个demo项目
openstack project create --domain default --description "Demo Project" demo
#创建一个demo 用户
openstack user create --domain default --password-prompt demo
6、创建user角色,并且将user角色添加到demo项目和用户中:
openstack role create user
openstack role add --project demo --user demo user
认证服务到此安装完成,在安装其他服务前先验证认证服务。
3.5. 验证操作
1、安全起见,禁用暂时的认证令牌机制。编辑/etc/keystone/keystone-paste.ini,将[pipeline:public_api]、 [pipeline:admin_api]、 [pipeline:api_v3] sections 中的admin_token_auth删除。
2、取消设置临时的OS_AUTH_URL和 OS_PASSWORD环境变量
unset OS_AUTH_URL OS_PASSWORD:
unset OS_AUTH_URL OS_PASSWORD
3、admin用户请求认证token
openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
4、demo用户请求认证token
openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue
3.6. 创建脚本
1、创建openstack客户端环境脚本admin-openrc:
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS #admin用户的密码
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
2、为demo用户创建demo-openrc脚本:
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS #demo用户的密码
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
3、加载admin-openrc文件,作为admin用户运行客户端,请求认证token:
. admin-openrc
openstack token issue
4 镜像服务
镜像服务是IaaS的核心服务,可以接受disk镜像或server镜像的API请求,也可以接受终端用户和OpenStack计算组件的metadata定义,并且支持存储镜像到多种类型的仓库中,包括OpenStack的对象存储中。用户可以使用镜像服务发现、注册、获取虚拟机镜像,而且可以通过镜像服务提供的rest api查询虚拟机镜像的metadata并获取镜像。镜像服务的主要组件包括:
- glance-api:接收镜像API的调用,诸如镜像发现、恢复、存储。
- glance-registry:存储、处理、获取镜像的metadata,镜像的metadata中包含镜像的大小、类型等信息。
- Database:存储镜像metadata,可以根据喜好选择数据库,通常用户会选用MySQL 或 SQLite。
- Storage repository for image files:支持多种类型的仓库,包括普通文件系统、对象存储、RADOS块设备、VMware datastore以及HTTP。需要注意,其中一些仓库仅支持只读方式使用。
- Metadata definition service:为厂商、admin、服务、用户提示的通用API,用于自定义metadata,定义的metadata可以用于各种各样的资源,例如镜像、卷、配额等。
镜像服务也安装在控制节点上,以下是镜像服务的具体安装过程。
4.1. 先决条件
1、 进入数据库,创建glance数据库,并赋权限
mysql -u root -p
> CREATE DATABASE glance;
> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
将'GLANCE_DBPASS'替换成自定义的密码。
2、 导入admin证书,获取admin权限。
. admin-openrc
3、 创建glance用户,并设置密码
openstack user create --domain default --password-prompt glance
4、 添加管理员角色到glance用户和service项目中
openstack role add --project service --user glance admin
5、添加glance服务实体
openstack service create --name glance --description "openstack image" image
6、添加image服务api endpoint
openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292
4.2. 安装配置组件
1、安装glance
apt install glance
2、编辑/etc/glance/glance-api.conf文件
[database]
connection=mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
#glance数据库密码
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=glance
password=GLANCE_PASS #glance用户密码
[paste_deploy]
flavor = keystone
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
3、编辑/etc/glance/glance-registry.conf
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
#glance数据库密码
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = GLANCE_PASS #glance用户密码
[paste_deploy]
flavor = keystone
3、更新镜像服务数据库
su -s /bin/sh -c "glance-manage db_sync" glance
4、重启镜像服务
service glance-registry restart
service glance-api restart
4.3. 验证操作
1、以admin用户身份运行客户端,并下载cirros镜像
. admin-openrc
wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
2、以qcow2格式上传镜像到镜像服务,设置为public确保其他服务可以使用该镜像。
openstack image create "cirros" --file cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public
3、查看上传好的镜像
openstack image list
5 计算服务
5.1. 安装配置控制节点
5.1.1 先决条件
1、进入mysql,创建数据库nova_api、nova、nova_cell0,并赋予一定的权限。
create database nova_api;
create database nova;
create database nova_ce110;
grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_api.* to 'nova'@'%' identified by 'NOVA_DBPASS';
grant all privileges on nova.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova.* to 'nova'@'%' identified by 'NOVA_DBPASS';
grant all privileges on nova_ce110.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_ce110.* to 'nova'@'%' identified by 'NOVA_DBPASS';
其中'NOVA_DBPASS'是自定义的数据库密码。操作完成后则退出数据库。
2、创建计算服务证书
#以admin身份运行客户端
. admin-openrc
#创建nova用户
openstack user create --domain default --password-prompt nova
#将admin角色添加到nova用户
openstack role add --project service --user nova admin
#创建nova服务体
openstack service create --name nova --description "openstack compute" compute
3、创建Compute API service endpoints:
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
4、创建placement服务用户,并自行设置密码
openstack user create --domain default --password-prompt placement
5、添加placement用户到service项目中,并赋予admin角色。
openstack role add --project service --user placement admin
创建placement api实体
openstack service create --name placement --description "placement api" placement
创建placement api服务endpoint
openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778
5.1.2安装配置组件
1、安装nova组件
apt install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler nova-placement-ap
2、编辑/etc/nova/nova.conf文件
[api_database]
connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
#NOVA_DBPASS是nova数据库的密码
[database]
connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
#RABBIT_PASS是在rabbitmq中创建的openstack帐号对应的密码
[api]
auth_strategy=keystone
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=NOVA_PASS
#NOVA_PASS是nova用户对应的密码
[DEFAULT]
my_ip=10.0.0.11
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver
#注释掉[default]中的log_dir
[vnc]
enabled=true
vncserver_listen=$my_ip
vncserver_proxyclient_address=$my_ip
[glance]
api_servers=http://controller:9292
[oslo_concurrency]
lock_path=/var/lib/nova/tmp
[placement]
os_region_name=RegionOne
project_domain_name=Default
project_name=service
auth_type=password
user_domain_name=Default
auth_url=http://controller:35357/v3
username=placement
password=PLACEMENT_PASS
#PLACEMENT_PASS是placement用户对应的密码
3、更新nova-api数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
报错如下所示:
解决方法:
编辑/etc/nova/nova.conf文件,注释[database]和[api_database]中“connection=sqlite:////var/lib/nova/nova.sqlite”。再次执行更新数据库命令。
4、注册cell0数据库
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
5、创建cell1 cell
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
6、 更新nova数据库
su -s /bin/sh -c "nova-manage db sync" nova
7、确认cell0和cell1注册成功
nova-manage cell_v2 list_cells
8、重启计算服务
service nova-api restart
service nova-consoleauth restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart
5.2. 安装配置计算节点
5.2.1. 安装配置组件
1、安装nova组件
apt install nova-compute
2、编辑/etc/nova/nova.conf文件
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
#RABBIT_PASS是在rabbitmq中创建的openstack帐号对应的密码
[api]
auth_strategy=keystone
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=NOVA_PASS
#NOVA_PASS是 nova用户的密码
[DEFAULT]
my_ip=MANAGEMENT_INTERFACE_IP_ADDRESS
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver
#MANAGEMENT_INTERFACE_IP_ADDRESS是计算节点上管理网络的IP。
#注释掉[default]中的log_dir
[vnc]
enabled=true
vncserver_listen=0.0.0.0
vncserver_proxyclient_address=$my_ip
novncproxy_base_url=http://controller:6080/vnc_auto.html
[glance]
api_servers=http://controller:9292
[oslo_concurrency]
lock_path=/var/lib/nova/tmp
[placement]
os_region_name=RegionOne
project_domain_name=Default
project_name=service
auth_type=password
user_domain_name=Default
auth_url=http://controller:35357/v3
username=placement
password=PLACEMENT_PASS
#PLACEMENT_PASS是placement用户的密码
3、检查硬件是否支持虚拟化,返回值大于0则硬件支持虚拟化,否则需要进行额外的配置。
egrep -c '(vmx|svm)' /proc/cpuinfo
当返回值为0时,表明硬件不支持虚拟机,则编辑/etc/nova/nova-compute.conf文件,将libvirt类型从kvm改成qemu。
4、重启服务
service nova-compute restart
5.2.2. 添加计算节点到cell数据库
在控制节点执行以下操作步骤
1、获取admin权限,确认数据库中有计算节点
. admin-openrc
openstack hypervisor list
2、发现计算节点,新增计算节点时都需要执行该操作。
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
5.2.3. 确认操作
1、确认操作也在控制节点执行,获取admin权限,查看服务组件,应该运行着4个服务,“nova-consoleauth”、“nova-scheduler”、“nova-conductor”在控制节点,"nova-compute"在计算节点。
. admin-openrc
openstack compute service list
nova-conductor服务起不来,查看日志发现一直报错:“AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN”。
解决方法:分析发现可能是因为openstack用户创建不成功,查看rabbitmqctl中的用户,发现确实没有用户,重新创建openstack用户。
#查看rabbitmq中的用户
rabbitmqctl list_users
#添加用户,RABBIT_PASS是openstack用户的密码,须与之前配置的保持一致
rabbitmqctl add_user openstack RABBIT_PASS
#再次查看rabbitmq中的用户
rabbitmqctl list_users
创建用户后,重启nova服务,再次执行以上步骤确认nova服务安装完成。
2、列出认证服务中的API endpoints,确认认证服务的连接性
openstack catalog list
3、列出镜像,确认镜像服务的连接性
openstack image list
4、检查cells和placement api正常运行
nova-status upgrade check
6 网络服务
neutron允许创建、插入其他OpenStack服务管理的接口设备,采用插件式结构因此可以容纳各种类型的网络设备和软件,提供了OpenStack架构和部署的灵活性。neutron主要包括以下模块:
- neutron-server:接收和路由API请求到合适的OpenStack网络插件。
- OpenStack网络插件和代理:负责插、拔port,创建网络和子网,以及提供IP地址。
- 消息队列:通常安装OpenStack的时候都会遇到,负责在neutron-server和各种各样的代理进程之间路由信息,也可以作为数据库存储一些插件的网络状态。
6.1. 安装配置控制节点
6.1.1. 先决条件
1、登录数据库,创建neutron数据库,并赋予权限:
create database neutron;
#NEUTRON_DBPASS是数据库密码,自行定义即可
grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'NEUTRON_DBPASS';
grant all privileges on neutron.* to 'neutron'@'%' identified by 'NEUTRON_DBPASS';
2、获取admin权限,创建网络服务相关credentials:
. admin-openrc
#创建neutron用户
openstack user create --domain default --password-prompt neutron
#添加admin角色到neutron用户
openstack role add --project service --user neutron admin
#创建neutron服务体
openstack service create --name neutron --description "openstack networking" network
3、创建网络服务api endpoint:
openstack endpoint create --region ReginOne network public http://controller:9696
openstack endpoint create --region ReginOne network internal http://controller:9696
openstack endpoint create --region ReginOne network admin http://controller:9696
部署Self-service 网络
部署网络服务有两种选择:
1)采用简单的结构部署网络服务,仅支持实例连接provider 网络(外部网络),不支持私有网络、路由服务、浮动IP等。另外,只有admin或其他管理员用户才能管理provide网络;
2)选项2在选项1的基础上添加了三层服务,支持实例连接私有网络。普通用户可以管理自己的私有网络,以及连接公网和私有的路由器。另外,外部网络可以借助浮动IP地址访问私有网络。
本次安装中,选择选项2:部署Self-service networks。
1、在控制节点安装服务组件。
apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
2、编辑/etc/neutron/neutron.conf文件
[database]
connection=mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
#NEUTRON_DBPASS是neutron数据库密码
[DEFAULT]
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=true
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
auth_strategy=keystone
#RABBIT_PASS是在rabbitmq中创建的openstack帐号对应的密码
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=neutron
password=NEUTRON_PASS
#NEUTRON_PASS是neutron用户密码
[DEFAULT]
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[nova]
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=nova
password=NOVA_PASS
#NOVA_PASS是nova用户密码
3、配置ML2插件,编辑/etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
#配置支持的网络类型
type_drivers=flat,vlan,vxlan
#self-service网络支持vxlan
tenant_network_types=vxlan
mechanism_drivers=linuxbridge,l2population
#注释掉type_drivers的值
[ml2]
extension_drivers=port_security
[ml2_type_flat]
flat_networks=provider
[ml2_type_vxlan]
vni_ranges=1:1000
[securitygroup]
enable_ipset=true
4、配置Linux bridge代理,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini:
[linux_bridge]
#映射provider虚拟网络到provider物理网络接口,PROVIDER_INTERFACE_NAME是第二块网卡名称
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME
#OVERLAY_INTERFACE_IP_ADDRESS是物理网络接口的IP地址
[vxlan]
enable_vxlan=true
local_ip=OVERLAY_INTERFACE_IP_ADDRESS
l2_population=true
[securitygroup]
enable_security_group=true
firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
5、配置三层代理,编辑/etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver=linuxbridge
6、配置DHCP代理,编辑/etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver=linuxbridge
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata=true
7、配置metadata agent,编辑/etc/neutron/metadata_agent.ini
#METADATA_SECRET是metadata proxy的密码,自行定义
[DEFAULT]
nova_metadata_ip=controller
metadata_proxy_shared_secret=METADATA_SECRET
8、配置计算服务使用网络服务,编辑/etc/nova/nova.conf
#NEUTRON_PASS是neutron用户的密码,METADATA_SECRET是metadata proxy的密码
[neutron]
url=http://controller:9696
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=neutron
password=NEUTRON_PASS
service_metadata_proxy=true
metadata_proxy_shared_secret=METADATA_SECRET
9、更新数据库
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
10、重启计算API服务和网络服务
service nova-api restart
service neutron-server restart
service neutron-linuxbridge-agent restart
service neutron-dhcp-agent restart
service neutron-metadata-agent restart
#选择网络服务二,还需要重启3层服务
service neutron-l3-agent restart
6.2. 安装配置计算节点
计算节点负责处理实例的连接和安全组。
6.2.1. 安装配置组件
1、安装组件
apt install neutron-linuxbridge-agent
2、配置通用组件,编辑/etc/neutron/neutron.conf
[database]
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
[DEFAULT]
auth_strategy=keystone
[keystone_authtoken]
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=neutron
password=NEUTRON_PASS
6.2.2.部署Self-service网络
1、在计算节点上也配置网络选项2:Self-service networks,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
#PROVIDER_INTERFACE_NAME是底层provider物理网络接口,网卡2的名称
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME
#OVERLAY_INTERFACE_IP_ADDRESS是物理网络地址,即计算节点的IP地址
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
2、配置计算服务使用网络服务,编辑/etc/nova/nova.conf
[neutron]
url=http://controller:9696
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=neutron
password=neutron
3、完成安装,重启计算服务
service nova-compute restart
service neutron-linuxbridge-agent restart
4、验证安装,在控制节点执行:
. admin-openrc
openstack extension list --network
查看neutron服务的agent是否都启动,理论上控制节点上有4个agent,计算节点上各有1个:
. admin-openrc
openstack network agent list
7 Dashboard
7.1. 安装配置
1、将 Dashboard安装在控制节点上,执行以下命令安装组件:
apt install openstack-dashboard
2、编辑/etc/openstack-dashboard/local_settings.py
OPENSTACK_HOST="controller"
##所有主机都可以访问
ALLOWED_HOSTS=‘*’
SESSION_ENGINE='django.contrib.sessions.backends.cache'
CACHES={
'default': {
'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION':'controller:11211',
}
}
#启用第三版认证API
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
#配置为支持域
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
#配置API版本
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 2,
}
#通过dashboard创建的用户的默认域为default
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
#通过dashboard创建的用户默认角色为user
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
3、重新加载web 服务器配置
service apache2 reload
7.2. 验证
1、登录http://controller/horizon,查看dashboard页面,确认dashboard安装成功。默认域为default,可以使用admin用户登录,也可以实验demo用户登录。
访问horizon,报错500,网上解决方法如下
cd /var/lib/openstack-dashboard/
ls –ltrh
chown www-data:www-data /var/lib/openstack-dashboard/secret_key
ls –ltrh
service apache2 reload
2、horizon页面出来,输入用户名和密码,报错如下:
查看/var/log/apache2/error.log日志,错误信息“RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable”
解决方法:
1)、修改/etc/openstack-dashboard/local_settings.py,
将‘SESSION_ENGINE = 'django.contrib.sessions.backends.cache'改成
’SESSION_ENGINE = 'django.contrib.sessions.backends.file'
2)、重新加载web 服务器配置
service apache2 reload
3、登录控制面板后创建flavor、创建实例,访问实例控制器,发现无法连接。因为vnc地址是127.0.0.1,而不是controller IP。
解决方法:
1)、修改controller上的/etc/nova/nova.conf
novncproxy_base_url=http://$my_ip:6080/vnc_auto.html
2)、修改computer上的/etc/nova/nova.conf
novncproxy_base_url=http://172.171.3.20:6080/vnc_auto.html
3)、重启nova相关服务
#控制节点
service nova-api restart
service nova-consoleauth restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart
#计算节点
service nova-compute restart
安装参考文档链接:
http://www.10tiao.com/html/625/201703/2652502241/1.html
http://www.10tiao.com/html/625/201703/2652502241/3.html
https://docs.openstack.org/ocata/install-guide-ubuntu/InstallGuide.pdf
http://wangzhijian.blog.51cto.com/6427016/1912487
http://wangzhijian.blog.51cto.com/6427016/1913082?utm_source=tuicool&utm_medium=referral
https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron.html