本文將更深入地探討如何設定獨立佈署的主機及其服務安裝,以及服務之間的互連方式。我們將以 subnet_srvdmz 兩個網路為例,展示如何運用 Ansible 清單的功能,開發統一的基礎設施設定器。

主機設定:Ansible 變數的運用

為了方便管理和設定,我們將所有設定資訊分為三個變數池,它們之間互相關聯,共同構成完整的設定體系:

  1. 主要 Ansible 清單檔案變數: 這是設定資訊系統的核心,所有變數都必須嚴格規範,確保一致性和準確性。這些變數不僅用於 Ansible 設定,也可以作為外部設定系統的合約。

  2. 根據變數生成的 Ansible 清單檔案: 這些檔案由主要清單檔案生成,不應直接修改。它們主要用於開發階段,協助設定 Ansible 服務(A-service)。例如,主機的完整網域名稱(FQDN)可以根據主機名稱和主要清單檔案中指定的網域自動生成。

  3. Ansible 服務(A-service)設定變數: 這些變數用於設定 A-service 指令碼中使用的角色和集合。它們可能由前兩個變數池生成,但不參與動態設定。

Ansible 服務(A-service) 是一個包含預設設定的 playbook,用於佈署主機及其服務。透過 A-service,您可以輕鬆地佈署具有特定版本和設定的應用程式。例如,只需指定主機名稱和應用程式版本,即可佈署 Ubuntu 22 和 GitLab 16.11.10。

在本文中,我們將重點關注第一和第二個變數池,探討如何利用它們來設定主機和服務。

主機設定範例:

all:
  vars:
    domain: 'blackcat1968.com'
  children:
    subnet_srv:
      vars:
        external_router: router1
        cidrip: 10.125.0.225/27
      hosts:
        gitlab:
          number_in_subnet: 6
          # dns: 'bind'
          # dc: 'dc'
          servicename: gitlab
          serviceversion: "16.11.10"

在這個範例中,我們定義了一個名為 gitlab 的主機,它將佈署在 subnet_srv 網路中。以下是各個變數的說明:

  • servicename: 指定要啟動的 A-service,這裡設定為 gitlab
  • cidripnumber_in_subnet: 用於計算主機的 IP 位址。IP 位址是從子網路 cidrip 和子網路中的序號 number_in_subnet 計算而來。
  • serviceversion: 指定要佈署的應用程式版本,這裡設定為 16.11.10
  • 主機名稱將使用清單中的主機名稱 gitlab

根據這些設定,A-service 將在 Ubuntu 22(預設範本)上佈署一台 IP 位址為 10.125.0.231 的機器,並安裝 GitLab 16.11.10 版本。

主機設定與其他主機的連結

在上面的 YAML 程式碼中,您可能會注意到被註解的行:

# dns: 'bind'
# dc: 'dc'

這些引數用於指定 DNS 伺服器和網域控制器,以便 GitLab 可以進行名稱解析和使用者身份驗證。完整的 YAML 檔案如下所示:

all:
  vars:
    domain: 'blackcat1968.com'
  children:
    subnet_dmz:
      vars:
        external_router: router1
        cidrip: 10.12.0.1/27
      hosts:
        bind:
          number_in_subnet: 3
          servicename: bind
    subnet_srv:
      vars:
        external_router: router1
        cidrip: 10.125.0.225/27
      hosts:
        gitlab:
          number_in_subnet: 6
          dns: 'bind'
          dc: 'dc'
          servicename: gitlab
          serviceversion: "16.11.10"
        dc:
          number_in_subnet: 7
          dns: 'bind'
          servicename: dc

DNS 設定範例:

  1. 佈署 GitLab 的 A-service 會檢查 dns 變數。
  2. dns 變數取得主機名稱 bind
  3. 透過標準的 Ansible 字典 hostvars['bind'] 取得 bind 主機的 IP 位址。
  4. 在設定 GitLab 的網路時,指定取得的 IP 位址作為 DNS 伺服器。

網域控制器設定範例:

  1. 佈署 GitLab 的 A-service 會檢查 dc 變數是否存在。
  2. dc 變數取得主機名稱 dc
  3. 透過標準的 Ansible 字典 hostvars['dc'] 取得 dc 主機的 IP 位址和憑證。
  4. 委派進入網域控制器,建立用於身份驗證的帳戶。
  5. 將建立的帳戶新增到 GitLab。

使用其他主機的引數設定主機

我們可以使用其他主機的清單變數,透過 hostvars[] 來設定目標主機。例如,可以不直接在 GitLab 的 A-service 中為網域控制器建立帳戶,而是從網域控制器的 A-service 中取得所有需要建立憑證的主機資訊。

然而,這種方式可能不適用於所有情況,因為服務的安裝順序可能會影響設定。為了更靈活地管理設定資訊,我們引入了一個新的概念:工件變數(Artifact Variables)

工件變數:服務佈署的持久化資訊

在佈署服務時,可能會產生一些工件,例如變數、憑證、金鑰等。為了在後續設定中使用這些資訊,我們可以將它們儲存為 Ansible 主機的變數,儲存在已安裝主機的 ./host_vars 目錄中。這些變數被稱為工件變數。

工作站和 iTop 範例:

假設我們需要安裝工作站和 iTop 服務。為了使工作站正常運作,我們需要:

  • 將工作站新增到網域中。
  • 在網域控制器上建立帳戶。

而 iTop 則需要:

  • 網域控制器上的帳戶。
  • 工作站的帳戶。

YAML 設定如下所示:

all:
  vars:
    domain: 'blackcat1968.com'
  children:
    subnet_dmz:
      vars:
        external_router: router1
        cidrip: 10.12.0.1/27
      hosts:
        bind:
          number_in_subnet: 3
          servicename: bind
    subnet_srv:
      vars:
        external_router: router1
        cidrip: 10.125.0.225/27
      hosts:
        ws1:
          number_in_subnet: 4
          dns: 'bind'
          dc: 'dc'
          servicename: workstation
        itop1:
          number_in_subnet: 5
          dns: 'bind'
          dc: 'dc'
          servicename: itop
        dc:
          number_in_subnet: 7
          dns: 'bind'
          servicename: dc

在使用工件變數之前,我們需要在網域控制器(dc)的 A-service 中建立必要的帳戶,並將這些帳戶資訊儲存為工件變數。然後,在工作站(ws1)和 iTop(itop1)的 A-service 中,我們可以透過 hostvars['dc'] 存取這些工件變數,並使用它們來設定服務。

透過工件變數,我們可以實作更靈活和可重用的設定管理,簡化服務之間的依賴關係,並提高自動化佈署的效率。

Ansible 清單的功能遠不止於此,透過巧妙地運用變數和工件,我們可以開發一個高度自動化和可設定的基礎設施,降低維運成本,並加速應用程式的佈署。

在處理網路服務與系統設定時,針對不同服務設定及設定引數是相當常見的需求。透過系統化的設定,能確保各項服務穩定執行,並提供一致的使用者經驗。本文將探討如何透過結構化的方法,設定工作站與 iTop 等服務,並深入解析相關設定與變數管理。

工作站網路服務設定

工作站的設定是確保使用者能夠順利存取網路資源的關鍵。以下將說明工作站設定的步驟與注意事項。

設定 DNS 伺服器(DNS Server)

首先,要設定工作站的 DNS 伺服器(DNS Server),這與設定 GitLab 類別似。DNS 伺服器的設定能讓工作站正確解析網域名稱,進而存取網路資源。

新增網域使用者(Domain User)

如同 GitLab,將網域使用者(Domain User)新增到工作站是必要的步驟。這能確保使用者可以使用其網域帳戶登入工作站,並獲得相應的許可權。

儲存網域控制器憑證(Domain Controller Credentials)

將在網域控制器(Domain Controller)上生成的憑證,儲存到 ./host_vars/aduser.yml 的變數 aduser_list 中。這些憑證將用於工作站與網域控制器之間的身份驗證,確保工作站能夠安全地加入網域。

iTop 服務設定與設定

iTop 是一個 IT 服務管理(IT Service Management, ITSM)工具,設定正確能有效管理 IT 資源。以下將詳細說明 iTop 的設定步驟。

設定 DNS 伺服器(DNS Server)

如同 GitLab,首先要設定 iTop 的 DNS 伺服器(DNS Server)。這能確保 iTop 能夠正確解析網域名稱,並且其他網路服務進行通訊。

新增網域使用者(Domain User)

將網域使用者(Domain User)新增到 iTop,讓使用者可以使用其網域帳戶登入 iTop,並進行相關操作。

搜尋主機與驗證

搜尋主機,其 hostvars['item'].itop 引數的值與 iTop 主機名稱相符。這個步驟能確保 iTop 能夠正確識別並管理相關主機。接著,將找到的使用者新增到 iTop 資料函式庫行身份驗證,確保只有授權的使用者能夠存取 iTop。

在網域控制器上設定 iTop

在網域控制器(Domain Controller)上設定 iTop,能確保 iTop 與網域環境整合,提供更完善的身份驗證與授權管理。

驗證使用者新增

檢查所有需要在 iTop 中指定的使用者是否已成功新增。這能確保所有相關使用者都能順利使用 iTop,並進行必要的 IT 服務管理操作。

系統設定格式與變數管理

在設定主機時,需要考慮不同類別的引數,並確定其儲存位置。

主機設定格式

  • 內部引數(Internal Parameters):例如應用程式版本、IP 位址等,這些引數通常是靜態的,與與主機本身相關。
  • 靜態引數(Static Parameters):例如 DNS、網域控制器等,這些引數依賴於其他主機,需要在設定時進行設定。
  • 動態引數(Dynamic Parameters):例如 iTop 的網域使用者,這些引數依賴於其他主機,與可能隨時間變化,需要動態管理。

設定變數的位置

設定變數的位置不僅對於設定是必要的,對於開發也非常重要。將設定變數集中管理,可以提高設定的一致性與可維護性。

hostvars[] 的重要性

hostvars[] 是一個 Ansible 中的特殊變數,用於存取其他主機的變數。透過 hostvars[],可以在設定過程中動態取得其他主機的資訊,例如網域控制器的 IP 位址或 DNS 伺服器的名稱。

透過系統化的設定與設定,可以確保工作站與 iTop 等服務穩定執行,並提供一致的使用者經驗。理解不同類別的設定引數,並妥善管理設定變數,是確保系統穩定執行的關鍵。此外,利用 hostvars[] 等工具,可以實作更靈活的設定管理,提高系統的可維護性與擴充套件性。