什麼是vCloud Director Extension?

今天來介紹一下何謂vCloud Extensibility, vCD中除了基本的Blocking和Notification設定可以拿來做額外的事件觸發機制外,大家應該都看過這本關於如何設計vCD的官方文件,其中有一個章節是介紹AMQP,很簡要的說明了如何拓展vCD本身既有的功能,這些功能有可能需要結合外部服務,例如:

  • vApp custom provisioning or decommissioning
  • vApp backup
  • vApp load balancing
  • vApp fault tolerance
  • vApp updates
  • vApp VMs security hardening
  • vApp VMs affinity / anti-affinity rules
  • vShield security groups
  • Install agents, inject parameters in vApp VMs
  • Database as a service
  • Update user password in Active Directory
  • iSCSI target for MSCS Clusters
  • Anti -virus
  • Disaster recovery
  • manage Public IP space
  • Ability to open,update, and close trouble ticket requests
    整體的流程如下圖所示:

    vCD API

  1. vCD管理者或一般使用者執行vCloud Director RESTful API,他們有可能執行內建的vCD API或是之前因為以上額外服務需求而新增至vCD API庫的特定API格式,如服務A,B或C.
  2. vCD會驗證呼叫是來自於已授權的使用者,然後逐一比對呼叫格式是否符合已經登錄的特定服務呼叫格式.
  3. 如果前一步驟的執行符合特定定義格式,vCD就會把相關HTTP訊息內容傳到vCD設定好的AMQP目的接收端處理,另外AMQP中也事先針對每一個擴充服務,定義好了唯一exchange交換名稱和傳遞鑰匙.
  4. 事先用vRO去配對AMQP電腦,並且設定好要在其中監測(listen)哪些exchange名稱和傳遞鑰匙,即對其進行註冊(subscribe),如果有從vCD傳來的特定訊息滿足這些監聽條件,就執行特定外部程式(Workflow).
  5. 執行vRO特定工作流,由於vRealize Orchestrator是一個功能非常強大的工作流程協作引擎,我們可在其操作介面擷取我們需要的特定vCD訊息,如某一個vAPP在vCenter的UUID等,然後把這些參數傳給要執行的各種程式,完成特定服務配置工作.

設定步驟

  1. 在vCloud Director新增並註冊你要的擴充服務形式. (請參考這裡)
    • 以XML格式描述這些服務
    • 用vCloud API註冊這些服務成為vCD的extension service
  2. 新建設定好AMQP伺服器 (vCloud Director 9.0 需要RabbitMQ 3.6版本)
    • 建立Exchange
    • 建立Queue
    • 建立Binding
  3. 利用vRO建立外部擴充程式 (可參考這裡)
    • 針對每一個AMQP佇列建立一個相對應的接收器(subscription)和處理邏輯
    • 編寫或套用相應程式
    • 建立程式執行後回傳訊息

小結

很多人問為何要非要利用vCloud Director的API擴充服務的方式去整合外部程式,程式開發者大可以在他們的門戶直接呼叫各種外部程式,也可直接用Orchestrator去整合,好處是什麼呢?

筆者認為至少有以下幾個好處:

  1. 身為雲管理者,我不想讓租戶可以直接存取後端雲平台的各種應用程式.
  2. 提供單一vCloud Director API這一層的呼叫存取點,我只想發布某些特定as a service服務給我的vcloud director客戶,不必擔心會暴露後台任何相關元件的敏感API訊息.
  3. 統一的vCD身份驗證機制,連線控制.
  4. 客戶可以僅使用vCloud API來完成相關工作,避免同時使用不同的網站服務開發工具,減輕額外開發精力,維持工作內容一致性.
  5. 提供客戶特定服務API的使用權限,服務供應商可藉此提供不同的差異化服務,以吸引更多的客戶使用其雲平台.