前面架構概覽一節知道 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 的數量來應對日益增加的計算節點對數據庫的訪問。