前面架构概览一节知道 Nova 有若干 nova-* 的子服务,下面咱们将依次学习最重要的几个,今天先讨论 nova-api 和 nova-conductor
nova-api 是整个Nova 组件的门户,全部对Nova 的请求都首先由 nova-api 处理。nova-api 向外界暴露若干 HTTP REST API 接口在 keystone 中咱们能够查询 nova-api 的Endpoints 。
stack@DevStack-Controller:~$ openstack endpoint list
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
| 049dd4418f404aa2aeec29e40304efbe | RegionOne | placement | placement | True | admin | http://10.12.31.241/placement |
| 056967662ca84ce4b7dab7e359589fdc | RegionOne | nova_legacy | compute_legacy | True | internal | http://10.12.31.241:8774/v2/$(project_id)s |
| 0b9fcb6aebc646329c2bded5cb36c7dc | RegionOne | cinderv3 | volumev3 | True | admin | http://10.12.31.241:8776/v3/$(project_id)s |
| 2da3118ef0d34484a7713fd9ef56d5dd | RegionOne | keystone | identity | True | public | http://10.12.31.241/identity |
| 2ff4467621f940d1976b4e16e17b4b04 | RegionOne | cinder | volume | True | public | http://10.12.31.241:8776/v1/$(project_id)s |
| 341516faf7e54e249cae4ec9c1d1c88d | RegionOne | neutron | network | True | internal | http://10.12.31.241:9696/ |
| 391357dbc3524dad95449782a77b5337 | RegionOne | nova_legacy | compute_legacy | True | admin | http://10.12.31.241:8774/v2/$(project_id)s |
| 54843389b1c649c88ca49fdee7719682 | RegionOne | keystone | identity | True | admin | http://10.12.31.241/identity_admin |
| 58c5fe6431164f4d98c9250be679a657 | RegionOne | glance | image | True | admin | http://10.12.31.241:9292 |
| 684ec2e22ad04efe9e1e8b540bae8f50 | RegionOne | placement | placement | True | public | http://10.12.31.241/placement |
| 75f31134111c4b92b0fcc910f68a6edc | RegionOne | glance | image | True | public | http://10.12.31.241:9292 |
| 7a2f035863b64b39ac2901cb88514bbb | RegionOne | cinderv2 | volumev2 | True | internal | http://10.12.31.241:8776/v2/$(project_id)s |
| 8525b0bef2b54eb38d5a0037c12f17c8 | RegionOne | cinderv3 | volumev3 | True | internal | http://10.12.31.241:8776/v3/$(project_id)s |
| 8724dd7cd92840d2963ae134c2eecf74 | RegionOne | keystone | identity | True | internal | http://10.12.31.241/identity |
| 8ffdbac8f8b04932b40e747b70088a69 | RegionOne | nova_legacy | compute_legacy | True | public | http://10.12.31.241:8774/v2/$(project_id)s |
| a85081f7ce584514b32fa316dfcfd2aa | RegionOne | cinderv2 | volumev2 | True | public | http://10.12.31.241:8776/v2/$(project_id)s |
| c96779b3470e40fb863b9700991b2aca | RegionOne | nova | compute | True | public | http://10.12.31.241:8774/v2.1 |
| ce9d8d864d6e42d3bf546701d0f58b45 | RegionOne | cinder | volume | True | internal | http://10.12.31.241:8776/v1/$(project_id)s |
| d06366d0bd2e47079a0cbf6bd5442190 | RegionOne | neutron | network | True | admin | http://10.12.31.241:9696/ |
| d3c30e081aa04b1885f474691b63b4fd | RegionOne | cinderv2 | volumev2 | True | admin | http://10.12.31.241:8776/v2/$(project_id)s |
| d7e5984fb8ec4d719db22f17e2b586c2 | RegionOne | glance | image | True | internal | http://10.12.31.241:9292 |
| dabe6791b50d492f8c916fe6fd513723 | RegionOne | neutron | network | True | public | http://10.12.31.241:9696/ |
| de07de6e84d3425fb4d23dce70827c49 | RegionOne | cinderv3 | volumev3 | True | public | http://10.12.31.241:8776/v3/$(project_id)s |
| e2d270b641374843af533f33626f783f | RegionOne | placement | placement | True | internal | http://10.12.31.241/placement |
| ed2772c4265048f1bf03ff55637eeb15 | RegionOne | cinder | volume | True | admin | http://10.12.31.241:8776/v1/$(project_id)s |
| fa7b4db6d8dd43df8c0639bedade9e45 | RegionOne | nova | compute | True | admin | http://10.12.31.241:8774/v2.1 |
| fc88f5f0bc184a57abff510c0c941db0 | RegionOne | nova | compute | True | internal | http://10.12.31.241:8774/v2.1 |
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
客户端能够将请求发送到Endpoints 指定的地址,向 nova-api 请求操做。固然,做为最终用户咱们不会直接发送 REST API 请求。OpenStack CLI ,Dashboard 和其余须要跟 Nova 交换的组件会使用这些API。
好比在 Project -> Compute -> Instance 中,咱们能够对 instance 进行以下操做,这些操做就是 nova-api 能够执行的操做
nova-compute 须要获取和更新数据库中instance 的信息。但nova-compute 并不会直接访问数据库,而是经过 nova-conductor实现数据的访问
试想一下任意一个计算节点被黑客入侵,都会致使部署在控制节点的数据库面临极大风险。为了解决这个问题,从G 版本开始, Nova引入了 一个新服务 nova-conductor ,将 nova-compute 访问数据库的所有操做房啊到 nova-conductor 中,并且 nova-conductor 是部署在控制节点上的。这样就避免了nova-compute 直接访问数据库,增长了系统的安全性。
这种松散的架构容许配置多个 nova-conductor 实例。在一个大规模的 OpenStack 部署环境里,管理员能够经过增长 nova-conductor 的数量来应对日益增加的计算节点对数据库的访问。