維護實驗室 server 的工作告一段落,在交接前寫文件並紀錄實驗室的網路架構。
原本實驗室 server 是單一台 bare-metal PC 裝 Ubuntu Server 13.10,由於 13.10 不是LTS,當時已經沒有在維護了,許多安全性更新不能更新,並且在其中一次的升級就炸了直接 kernel panic,於是只好用 Live USB 開機然後 chroot 進原本的系統暫時提供服務。
同時找了另外一台電腦灌 VMWare ESXI 做虛擬化,並且慢慢把服務轉移到這台電腦,於是乎有了現在的架構。
主要系統
現在的架構圖
下層高度剛好是一台PC的高度,可以放一排像這樣,除了兩台主要的其他都是實驗用。
因為一般電腦沒有 IPMI 不能遠端操作,所以有些電腦屁股在前,接 KVM 比較方便。
NAS
用 FreeNAS 建構,兩顆硬碟做 RAIDZ1,提供 NFS 服務給 RancherOS,主要用於備份用以及提供空間作為 ownCloud 的資料區;另外也供給 SSH Server 掛載家目錄用。
每三小時快照,減少誤刪資料或中勒索病毒的風險。另每三天 Rsync 到另外一台小型 NAS 做 offsite backup。
UPS
UPS 的部份透過在筆電的 UPS 軟體監控,若切換到電池供電超過三分鐘,呼叫關機腳本通知各 server 關機。
Firewall
pfSense 建置,兩台分別放在不同ESXI Host,CARP 虛擬出共用 IP 作為備援,VM 預設路由會走第一台 pfSense,若第一台掛掉,VM 對外流量會導向第二台。
另外,也提供 DNS 作為內部 VM 與 Public DNS,僅有內部網路開放 recursive 查詢。
Rancher
三台 RancherOS 作為放置 Docker container 的機器,Rancher Server 為 scheduler,負責指揮容器要開在那台 RancherOS 上。
SSH Server
供實驗室成員使用,可以管理自己的家目錄與個人網頁。
容器部份
ownCloud
除了可以透過 Samba 對 NAS 存取,可以從 ownCloud 透過網頁的方式存取資料。
Joomla
實驗室網頁。
LDAP
帳號資訊放在 LDAP Server 上,統一帳號密碼管理。
Caddy
作 SSL termination 與 reverse proxy 之用,掛 Let's Encrypt 憑證。
Prometheus
收集 NAS 與容器的 log,監控服務狀態。
Grafana
作為 Prometheus 的前端,視覺化呈現,並在有服務 outage 時寄 mail 通知管理者。 可以達到像這樣的效果。
Galera
Mariadb cluster,提供資料庫給各服務使用。
Git Server
實驗室版控系統。
Docker Registry
不想公開的 docker image 放在自己家。
結語
目標是盡量的達到 "infrastructure as code ",容器的部份全部用 docker-compose 管理,VM 用 ansible 管理。
唯二沒有 infrastructure as code 的地方是 ESXI VM 的創建,這部份可以用 terraform 管理。另外, pfSense 的設定雖然可以匯出,但重新匯入很難保證可以還原的回來,尤其是有安裝額外套件的情況,而且 pfSense 的設定相對不好版控。若以後有閒可以試試 VyOS 搭配 ansible,取代現有的 pfSense。