bian@TOC
OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。
openstack是一个云平台管理的项目,它不是一个软件。也就是说我们可以使用openstack来管理我们一个数据中心大量资源池。它里面包含了很多子项目。
官方文档:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/environment.html
我们此处配置的是双网卡:第一块网卡正常桥接、第二块网卡用于虚拟机之间的通信
参考官方文档:gogogo
step1:配置网络接口
[root@server1 ~]# cd /etc/sysconfig/network-scripts/
[root@server1 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@server1 network-scripts]# vim ifcfg-eth1
[root@controller network-scripts]# cat ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
[root@server1 network-scripts]# ifup eth1
step2:配置域名解析
设置节点主机名为 controller。
[root@server1 network-scripts]# hostnamectl set-hostname controller
[root@server1 network-scripts]# logout
Connection to 172.25.254.1 closed.
[westos@westos_student50 Desktop]$ ssh [email protected]
[email protected]'s password:
[root@controller ~]#
[root@controller ~]# yum install chrony
[root@controller ~]# vim /etc/chrony.conf
server 172.25.254.50 iburst 同步主机时间
[root@controller ~]# systemctl start chronyd
[root@controller ~]# systemctl is-enabled chronyd ##该服务默认开机自启
enabled
[root@controller ~]# chronyc sources -v
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? westos_student50.westos.> 0 8 0 - +0ns[ +0ns] +/- 0ns
[root@controller ~]# date
Mon Apr 11 16:44:18 CST 2022
顺便再提一嘴:只要涉及到集群,注意两点 一点是时间,(比如证书生效的时间、数据备份的时间)一点是解析!
在真机上操作:把mitaka解压到apache的发布目录下:
[root@westos_student50 media]# mkdir /var/www/html/openstack
[root@westos_student50 media]# tar xf mitaka.tar -C /var/www/html/openstack
虚拟机上操作:设置网络仓库
[root@controller ~]# cd /etc/yum.repos.d/
[root@controller yum.repos.d]# ls
dvd.repo redhat.repo
[root@controller yum.repos.d]# vim openstack.repo
[root@controller yum.repos.d]# cat openstack.repo
[openstack]
name=mitaka
baseurl=http://172.25.254.50/openstack/mitaka ##设置完检查一下该地址是否能访问到(下图显示没问题)
gpgcheck=0
(1)升级包:
[root@controller yum.repos.d]# yum upgrade
(2)安装 OpenStack 客户端
yum install python-openstackclient
参考文档:SQL数据库的配置
安全并配置组件
(1)安装软件包:
yum install mariadb mariadb-server python2-PyMySQL -y
(2)创建并编辑 /etc/my.cnf.d/openstack.cnf,然后完成如下动作:
[root@controller yum.repos.d]# vim /etc/my.cnf.d/openstack.cnf
[root@controller yum.repos.d]# cat /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 172.25.254.1 ##该值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库:
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
(3)启动数据库服务,并将其配置为开机自启:
systemctl enable --now mariadb.service
(4)为了保证数据库服务的安全性,运行mysql_secure_installation
脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。
mysql_secure_installation
消息队列:它主要用来暂存生产者生产的消息,供后续其他消费者来消费。
(1)安装包
yum install rabbitmq-server
(2)启动消息队列服务并设置开机自启
systemctl enable --now rabbitmq-server.service
(3)添加 openstack 用户
rabbitmqctl add_user openstack openstack ## 为方便操作 设置密码和用户都为一串字符
(4)给openstack用户配置写和读权限:
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
查看上述读写权限的划分:
[root@controller yum.repos.d]# rabbitmq-plugins list
[root@controller yum.repos.d]# rabbitmq-plugins enable rabbitmq_management
(1)安装软件包并设置开机自启
yum install memcached python-memcached -
systemctl enable --now memcached.service
(2)编辑/etc/sysconfig/memcached
在这里插入代码片
systemctl restart memcached.service
对于keystone的基本知识,可以参考这里,keystone详解
keystone是OpenStack的核⼼组件之⼀,为OpenStack⼤家族中的其他组件提供统⼀的⾝份认证服务,包括⾝份认证、令牌发放和校验服务列表、定义⽤户权限等。OpenStack中所有服务的授权和认证都需要经过keystone,因此keystone是OpenStack中第⼀个需要安装的核⼼组件。
keystone的具体功能如下:
管理⽤户及其权
限维护各种服务的endpoint
认证和鉴权
(1)根据下列步骤创建数据库
[root@controller yum.repos.d]# mysql -p ##用数据库连接客户端以 root 用户连接到数据库服务器
## 创建用户 对``keystone``数据库授予恰当的权限,使本地和远程都可以连接数据库 (注意密码规范 做一个记录表 别到最后忘了密码)
MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.00 sec)
## 将keystone数据库的所有权限授予本地用户keystone,登陆密码是keystone
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
-> IDENTIFIED BY 'keystone';
Query OK, 0 rows affected (0.00 sec)
## 将keystone数据库的所有权限授予远程用户keystone,登陆密码是keystone
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
-> IDENTIFIED BY 'keystone';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> bye #退出数据库客户端。
(2)生成一个随机值在初始的配置中作为管理员的令牌。
openssl rand -hex 10
因为目前keystone里面是没有任何认证用户的,那就需要一个初始令牌去调用api接口
(1)安装包
yum install openstack-keystone httpd mod_wsgi -y
(2)编辑文件 /etc/keystone/keystone.conf 并完成如下动作
[root@controller yum.repos.d]# openssl rand -hex 10
560054dc1d173f892f8e
vim /etc/keystone/keystone.conf
1 [DEFAULT]
2 admin_token = 560054dc1d173f892f8e ##这个令牌一定是刚刚生成的令牌
528 [database]
529 connection = mysql+pymysql://keystone:keystone@controller/keystone
## 我们使用的数据库是mysql,通过pymysql的插件连接数据库,通过keystone:keystone(用户名和密码)去连接controler上的keystone数据库
1985 [token]
1986 provider = fernet ##令牌提供方式
(3)初始化身份认证服务的数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone ## 切换成keystone用户来初始化数据库
[root@controller yum.repos.d]# cd /etc/keystone/
[root@controller keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
(1)编辑/etc/httpd/conf/httpd.conf
文件,配置ServerName
选项为控制节点:
96 ServerName controller
(2)创建文件 /etc/httpd/conf.d/wsgi-keystone.conf。
Listen 5000 ##公共的端口 谁都可以连
Listen 35357 ## 内部的 管理员 连接此端口
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
Require all granted
Directory>
VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
Require all granted
Directory>
VirtualHost>
(3)启动 Apache HTTP 服务并配置其随系统启动
systemctl enable httpd.service
(1)先决条件
[root@controller conf.d]# export OS_TOKEN=560054dc1d173f892f8e ##配置认证令牌
[root@controller conf.d]# export OS_URL=http://controller:35357/v3 ##配置端点URL
[root@controller conf.d]# export OS_IDENTITY_API_VERSION=3 ##配置认证 API 版本
(2)创建服务实体和API端点
在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。
endpoint是⼀个可以通过网络访问的地址,通常是⼀个URL,也就是⽹址。每个部署在OpenStack上的服务都通过endpoint提供⾃⼰的API,⽤户可以去访问这些⽹址来使⽤服务。
那么联想到刚才token上所说的认证过程,⽹址就在这⾥,keystone想要确保有权限的⽤户才能访问服务的话,就必须将这些endpoint管理起来,为它们挡住没有权限的⽤户的访问。
(1)创建域default
:
openstack domain create --description "Default Domain" default
(2)在刚刚创建的域中创建管理的项目、用户和角色:(admin)
首先,创建 admin 项目:
openstack user create --domain default \
--password-prompt admin
openstack user create --domain default --password admin admin
openstack role create admin
最后,添加admin
角色到 admin 项目和用户上,让他去管理:
openstack role add --project admin --user admin admin
此时 我们罗列一下
(3)本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建service
项目:
openstack project create --domain default \
--description "Service Project" service
(4)常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户。
openstack project create --domain default \
--description "Demo Project" demo
openstack user create --domain default --password demo demo ##用户名和密码都是demo
创建 user 角色:
openstack role create user
openstack role add --project demo --user demo user
(1)重置OS_TOKEN
和OS_URL
环境变量:
unset OS_TOKEN OS_URL ##将刚刚加的两个变量去掉
因为在keystone里面我们刚刚创建用户了,我们要通过指定的用户来进行认证。
(2)作为 admin 用户,请求认证令牌:
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
openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue
前一节中使用环境变量和命令选项的组合通过openstack
客户端与身份认证服务交互。为了提升客户端操作的效率,OpenStack支持简单的客户端环境变量脚本即OpenRC 文件。这些脚本通常包含客户端所有常见的选项,当然也支持独特的选项。
(1)创建脚本
创建 admin 和 demo
项目和用户创建客户端环境变量脚本
step1:编辑文件 admin-openrc 并添加如下内容:
[root@controller ~]# vim admin-openrc
[root@controller ~]# cat 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
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
step2:编辑文件 demo-openrc 并添加如下内容:
[root@controller ~]# vim demo-openrc
[root@controller ~]# cat 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=dmeo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
注意观察上面 两个用户 连接的是不同的端口,代表了demo和admin用户的权限不同。(如下图所示)
到此 我们的keystone的服务组件就配好了。刚才配置的所有信息都存在keystone数据库中,
顺便说一句:如有服务起不来,那就要排查 ,排查时要养成看日志的习惯,
[root@controller log]# cd keystone/
[root@controller keystone]# ls
keystone.log
[root@controller keystone]# pwd
/var/log/keystone
[root@controller keystone]# grep ERROR keystone.log ##查看错误日志
镜像的源数据存在数据库中,为了安全起见,这里使用了一个G-r。
(1)创建 glance 数据库并授予相应
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
IDENTIFIED BY 'glance';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
IDENTIFIED BY 'glance';
step1:创建glance用户用以和keystone对接做认证
openstack user create --domain default --password-prompt glance
这个glance是用来做集群间的组件调用的,用以和keystone做认证。
step2:添加 admin 角色到 glance 用户和 service 项目上。
openstack role add --project service --user glance admin
openstack service create --name glance \
--description "OpenStack Image" image
step4:创建镜像服务的 API 端点:
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
(1)安装软件包
yum install openstack-glance
(2)编辑文件 /etc/glance/glance-api.conf
并完成如下动作:
[database]
connection = mysql+pymysql://glance:glance@controller/glance ## 用于数据库访问
[keystone_authtoken] ## 用于keystone认证
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
[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@controller/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
[paste_deploy]
flavor = keystone
(4)写入镜像服务数据库
su -s /bin/sh -c "glance-manage db_sync" glance
# systemctl enable openstack-glance-api.service \
openstack-glance-registry.service
# systemctl start openstack-glance-api.service \
openstack-glance-registry.service
(1)下载源镜像
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
(2)使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它
openstack image create "cirros" \
--file cirros-0.3.4-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--public
openstack image list
(1)创建 nova_api 和 nova 数据库:
CREATE DATABASE nova_api;
CREATE DATABASE nova;
(2)对数据库进行正确的授权
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';
step1:创建nova用户
openstack user create --domain default --password nova nova
step2:给 nova 用户添加 admin 角色
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute
openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1/%\(tenant_id\)s
(1)安装软件包:
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler
(2)编辑/etc/nova/nova.conf
文件并完成下面的操作
## 在``[DEFAULT]``部分,只启用计算和元数据API:
[DEFAULT]
enabled_apis = osapi_compute,metadata
## 在``[api_database]``和``[database]``部分,配置数据库的连接:
[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
## 在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列访问:
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
##在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[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 = nova
password = nova
## 在 [DEFAULT 部分,配置``my_ip`` 来使用控制节点的管理接口的IP 地址。
[DEFAULT]
my_ip = 172.25.254.1
## 在 [DEFAULT] 部分,使能 Networking 服务:
[DEFAULT]
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
## 在``[vnc]``部分,配置VNC代理使用控制节点的管理接口IP地址 :
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
## 在 [glance] 区域,配置镜像服务 API 的位置:
[glance]
api_servers = http://controller:9292
## 在 [oslo_concurrency] 部分,配置锁路径:
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
# su -s /bin/sh -c "nova-manage api_db sync" nova
# su -s /bin/sh -c "nova-manage db sync" nova
# systemctl enable openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl start openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
每当有新的节点加入openstack集群中,都要先配置一下环境
[root@compute1 ~]# cd /etc/sysconfig/network-scripts/
[root@compute1 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@compute1 network-scripts]# vim ifcfg-eth1
[root@compute1 network-scripts]# cat ifcfg-eth1
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
[root@compute1 network-scripts]# ifup eth1
参考:官方文档
(1)安装软件包:
yum install chrony -y
(2)编辑/etc/chrony.conf
文件并注释除server
值外的所有内容。修改它引用控制节点:
server 172.25.254.50 iburst
(3)启动 NTP 服务并将其配置为随系统启动:
# systemctl enable chronyd.service
# systemctl start chronyd.service
注意:计算节点只配置网络和时间同步协议 至于消息队列 、memcached等都旨在控制节点上配置
将网络仓库从controller上复制到compute1上:
root@controller yum.repos.d]# scp openstack.repo compute1:/etc/yum.repos.d/
(1)安装软件包:
yum install openstack-nova-compute -y
(2)编辑/etc/nova/nova.conf
文件并完成下面的操作:
在[DEFAULT]
和 [oslo_messaging_rabbit]部分,配置RabbitMQ
消息队列的连接:
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[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 = nova
password = nova
在 [DEFAULT] 部分,配置 my_ip 选项:
[DEFAULT]
...
my_ip = 172.25.254.2
在 [DEFAULT] 部分,使能 Networking 服务:
[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
在[vnc]
部分,启用并配置远程控制台访问:
[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 的位置:
[glance]
...
api_servers = http://controller:9292
在 [oslo_concurrency] 部分,配置锁路径:
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
(1)确定您的计算节点是否支持虚拟机的硬件加速。
egrep -c '(vmx|svm)' /proc/cpuinfo
如果这个命令返回了 one or greater 的值,那么你的计算节点支持硬件加速且不需要额外的配置。
如果这个命令返回了 zero 值,那么你的计算节点不支持硬件加速。你必须配置 libvirt 来使用 QEMU 去代替 KVM,此时就要按照如下配置:
[root@compute1 yum.repos.d]# vim /etc/nova/nova.conf
[libvirt]
virt_type = qemu
(2)启动计算服务及其依赖,并将其配置为随系统自动启动:
# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl start libvirtd.service openstack-nova-compute.service
在控制节点上已经能看到计算节点成功启动,且状态为up
openstack compute service list
参考官方文档:官方文档
(1)完成下面的步骤以创建数据库
step1:连接数据库
[root@controller ~]# mysql -p
Enter password:
Welcome to the MariaDB monitor.
step2:创建neutron
数据库
CREATE DATABASE neutron;
step3:对neutron
数据库授予合适的访问权限 注意密码设置
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY 'neutron';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY 'neutron';
(2)要创建服务证书,完成这些步骤:
step1:创建neutron
用户:
openstack user create --domain default --password neutron neutron
openstack role add --project service --user neutron admin
step3:创建neutron
服务实体:
openstack service create --name neutron \
--description "OpenStack Networking" network
(3)创建网络服务API端点
openstack endpoint create --region RegionOne \
network public http://controller:9696
openstack endpoint create --region RegionOne \
network internal http://controller:9696
openstack endpoint create --region RegionOne \
network admin http://controller:9696
此处配置网络选项1:公共网络
(1)安装组件
yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables
(2)配置服务组件
编辑/etc/neutron/neutron.conf
文件并完成如下操作:
在 [database] 部分,配置数据库访问:
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
在[DEFAULT]
部分,启用ML2插件并禁用其他插件:
[DEFAULT]
core_plugin = ml2
service_plugins =
在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列的连接:
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[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
在[DEFAULT]
和[nova]
部分,配置网络服务来通知计算节点的网络拓扑变化:
[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
在 [oslo_concurrency] 部分,配置锁路径:
[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp
(3)配置 Modular Layer 2 (ML2) 插件
编辑/etc/neutron/plugins/ml2/ml2_conf.ini
文件并完成以下操作:
在[ml2]
部分,启用flat和VLAN网络:
[ml2]
...
type_drivers = flat,vlan
在[ml2]
部分,禁用私有网络:
[ml2]
...
tenant_network_types =
在[ml2]
部分,启用Linuxbridge机制:
[ml2]
...
mechanism_drivers = linuxbridge
在[ml2]
部分,启用端口安全扩展驱动:
[ml2]
...
extension_drivers = port_security
在[ml2_type_flat]
部分,配置公共虚拟网络为flat网络
[ml2_type_flat]
...
flat_networks = provider
在 [securitygroup]
部分,启用 ipset 增加安全组规则的高效性:
[securitygroup]
...
enable_ipset = True
(4)配置Linuxbridge代理
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件并且完成以下操作:
在[linux_bridge]
部分,将公共虚拟网络和公共物理网络接口对应起来:
[linux_bridge]
physical_interface_mappings = provider:eth1 ##告诉他虚拟机桥接的时候 用这个设备
在[vxlan]
部分,禁止VXLAN覆盖网络:
[vxlan]
enable_vxlan = False
在 [securitygroup]
部分,启用安全组并配置 Linuxbridge iptables firewall driver:
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
(5)配置DHCP代理 用于给云主机动态分配ip:
编辑/etc/neutron/dhcp_agent.ini
文件并完成下面的操作:
在[DEFAULT]
部分,配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
编辑/etc/neutron/metadata_agent.ini
文件并完成以下操作:
在[DEFAULT]
部分,配置元数据主机以及共享密码:
[DEFAULT]
...
nova_metadata_ip = controller
metadata_proxy_shared_secret = westos ##定义一个密钥
编辑/etc/nova/nova.conf
文件并完成以下操作:
在[neutron]
部分,配置访问参数,启用元数据代理并设置密码:
[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
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET
(1)网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini
。如果超链接不存在,使用下面的命令创建它:
# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
(2)同步数据库:
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
(3)重启计算API 服务:
systemctl restart openstack-nova-api.service ##因为刚刚修改了nova的主配置文件 所以此处得重启该服务
(4)当系统启动时,启动 Networking 服务并配置它启动。
# systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
# systemctl start neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
列一下刚刚启动的服务:
neutron agent-list
yum install openstack-neutron-linuxbridge ebtables ipset
编辑/etc/neutron/neutron.conf
文件并完成如下操作:
在[database]
部分,注释所有connection
项,因为计算节点不直接访问数据库。
在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列的连接:
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[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
在 [oslo_concurrency] 部分,配置锁路径:
[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp
参考文档:`文档
配置Linuxbridge代理
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件并且完成以下操作:
在[linux_bridge]
部分,将公共虚拟网络和公共物理网络接口对应起来:
[linux_bridge]
physical_interface_mappings = provider:eth1
在[vxlan]
部分,禁止VXLAN覆盖网络:
[vxlan]
enable_vxlan = False
在 [securitygroup]
部分,启用安全组并配置 Linuxbridge iptables firewall driver:
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
编辑/etc/nova/nova.conf
文件并完成下面的操作:
在[neutron]
部分,配置访问参数:
[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
(1)重启计算服务:
systemctl restart openstack-nova-compute.service
(2)启动Linuxbridge代理并配置它开机自启动
# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service
验证一下neutron 代理是否成功
neutron agent-list
暂时不开启图形,先用命令行的方式启用云服务:
参考官方文档
(1)创建公用网络
云主机肯定是要接入网络的,所以要先创建网络
neutron net-create --shared --provider:physical_network provider \
--provider:network_type flat provider
## 创建一个网络 类型为shared(共享) 名称为provider的物理网络[刚刚在配置文件中定义好的]
启用的网络类型有两种 (flat) 最后的provider是名称
(2)在provider网络上创建一个子网,
neutron subnet-create --name provider --allocation-pool start=172.25.254.100,end=172.25.254.200 --dns-nameserver 114.114.114.114 --gateway 172.25.254.50 provider 172.25.254.0/24
默认的最小规格的主机需要512 MB内存。对于环境中计算节点内存不足4 GB的,我们推荐创建只需要64 MB的m1.nano
规格的主机。若单纯为了测试的目的,请使用m1.nano
规格的主机来加载CirrOS镜像
这里我们定义了一个云主机类型 id为0 1核的cpu 64兆 磁盘1G 命名为m1.nano
[root@controller ~]# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
当然,云主机类型有很多 但是此时我们是为了测试,且cirros镜像才13M 所以刚刚的配置足矣。
大部分云镜像支持公共密钥认证而不是传统的密码认证。在启动实例前,你必须添加一个公共密钥到计算服务。
(1)导入租户demo
的凭证
[root@controller ~]# source demo-openrc
(2)生成和添加秘钥对:
ssh-keygen -q -N "" ## 生成密钥对
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey ## 添加密钥对 命名为mykey。通过密钥对 在启动云主机的时候 它可以自动帮我们实现免密 他可以帮我们把公钥注入到云主机里面再启动
其实就是防火墙 ,就是你这个云主机谁可以访问 谁不可以访问,开哪个端口,
默认情况下, default
安全组适用于所有实例并且包括拒绝远程访问实例的防火墙规则。对诸如CirrOS这样的Linux镜像,我们推荐至少允许ICMP (ping) 和安全shell(SSH)规则。
(1)添加规则到 default 安全组。
允许 ICMP (ping)
openstack security group rule create --proto icmp default
允许安全 shell (SSH) 的访问:
openstack security group rule create --proto tcp --dst-port 22 default
(1)确定实例选项
参考官方文档:在公有网络上创建实例
列出可用类型
openstack flavor list
列出可用镜像
openstack image list
列出可用网络
openstack network list
列出可用的安全组
openstack security group list
openstack server create --flavor m1.nano --image cirros --nic net-id=f882b656-7575-4c4e-9f1c-7e63dc35eccf --security-group default --key-name mykey provider-instance
它提供了一个url用以访问云平台
openstack console url show provider-instance
在真机上:vim/etc/hosts
172.25.254.1 controller