本文將更深入地探討如何設定獨立佈署的主機及其服務安裝,以及服務之間的互連方式。我們將以 subnet_srv
和 dmz
兩個網路為例,展示如何運用 Ansible 清單的功能,開發統一的基礎設施設定器。
主機設定:Ansible 變數的運用
為了方便管理和設定,我們將所有設定資訊分為三個變數池,它們之間互相關聯,共同構成完整的設定體系:
主要 Ansible 清單檔案變數: 這是設定資訊系統的核心,所有變數都必須嚴格規範,確保一致性和準確性。這些變數不僅用於 Ansible 設定,也可以作為外部設定系統的合約。
根據變數生成的 Ansible 清單檔案: 這些檔案由主要清單檔案生成,不應直接修改。它們主要用於開發階段,協助設定 Ansible 服務(A-service)。例如,主機的完整網域名稱(FQDN)可以根據主機名稱和主要清單檔案中指定的網域自動生成。
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
。cidrip
和number_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 設定範例:
- 佈署 GitLab 的 A-service 會檢查
dns
變數。 - 從
dns
變數取得主機名稱bind
。 - 透過標準的 Ansible 字典
hostvars['bind']
取得bind
主機的 IP 位址。 - 在設定 GitLab 的網路時,指定取得的 IP 位址作為 DNS 伺服器。
網域控制器設定範例:
- 佈署 GitLab 的 A-service 會檢查
dc
變數是否存在。 - 從
dc
變數取得主機名稱dc
。 - 透過標準的 Ansible 字典
hostvars['dc']
取得dc
主機的 IP 位址和憑證。 - 委派進入網域控制器,建立用於身份驗證的帳戶。
- 將建立的帳戶新增到 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[]
等工具,可以實作更靈活的設定管理,提高系統的可維護性與擴充套件性。