虛擬雲網路

網路虛擬化NSX 技術文章系列二百六十二: NSX Application Platform簡介與配置流程(七)

作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與新應用遞送方案的介紹與推廣。

前面兩篇網誌我們討論以最單純的方式部署出NSX Application Platform (NAPP) 的流程,直接透過VMware Public Repository下載NAPP相關需求image。在絕大部分狀況下,推薦大家使用這個方式部署。但確實在許多客戶環境,一方面Internet端連線品質受限,此外可能原本就有Harbor相關的私有容器庫部署。在之前本系列網誌內第四篇,我們也討論了這樣的兩種架構選擇:

  • 架構二:建置私有容器庫,透過第三方公正CA申請容器庫的憑證
  • 架構三:建置私有容器庫,以內部 CA 簽署 Harbor 憑證

請參考下面兩張圖架構上的說明

本篇網誌內想要和大家快速討論需要建立上述的架構時,幾個需求的配置及重要注意點。但如同之前系列網誌第四篇內的討論,當必須選擇要使用私有容器庫時,我們強烈建議使用架構二:透過第三方公正CA申請容器庫的憑證,無論在部署、後續維護上都可以減少無窮的問題。

Harbor憑證的建立

架構內,部署NAPP所在的TKC會往Harbor私有容器庫要求相關的image檔案。此外,管理者需要藉由Bastion Host上傳NAPP相關image檔案。最後,NSX Manager在進行NAPP安裝時,也會直接去Harbor內去確認相關的資訊。上述的連線都會要求並檢查正確的憑證。因此管理者在開始配置容器庫前,需要就Harbor提供對外服務之FQDN申請憑證。

如果是透過第三方公正CA進行申請,就與大家標準申請網站FQDN憑證的流程相同,各位需要先對應這個FQDN建立一個私有key,由這個key產出一個憑證簽署要求 (Certificate Signing Request, CSR),再將這個CSR交由公正CA進行簽署,產出對應的憑證檔。後續,這個憑證檔及原本的Key就可以輸入到Harbor內(後面步驟說明)

上面是建議的方式。但有可能,專案內不願意花錢去外部CA進行申請。此時的workaround,不建議但只好這樣做,就是企業自建CA,然後用這個CA來進行簽署。此時流程是這樣:首先這邊我們用Bastion上openssl套件做一個自建CA:

  • 建立私有 CA key

# openssl genrsa -out rootca.key 4096

  • 生成私有 CA 公開憑證

# openssl req -x509 -new -nodes -sha512 -days 3650 -subj  “/C=CN/ST=Taipei/L=Taipei/O=example/OU=Personal/CN= bastion.lab.local” -key rootca.key -out rootca.crt

有自建的CA了,此時我們需要生成Harbor的私鑰及憑證簽署要求,交由CA進行簽署。同時,我們也需要建立對應的X509 v3擴展文件

  • 生成 Harbor FQDN 私鑰

# openssl genrsa -out harbor.key 4096

  • 以前述私鑰建立 Harbor FQDN 之憑證簽署要求 (Certificate Signing Request)

# openssl req -sha512 -new -subj “/C=CN/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=sddc-harbor.sysage.com” -key harbor.key -out harbor.csr

  • 建立 x509 v3 擴展文件

# cat > v3.ext <<-EOF

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

extendedKeyUsage = serverAuth

subjectAltName = @alt_names

[alt_names]

DNS.1=harbor.lab.local

DNS.2=harbor

EOF

然後我們可以使用自建CA簽署上述的CSR。此時會需要有兩個格式:

  • 使用 v3.ext 文件及 CSR 為 Harbor 生成憑證

# openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA rootca.crt -CAkey rootca.key -CAcreateserial -in harbor.csr -out harbor.crt

  • 將憑證轉換為 Docker 所需要的 cert 格式

# openssl x509 -inform PEM -in harbor.crt -out harbor.cert

好,本步驟結束了。請存好步驟內建立的 rootca.crt / harbor.crt / harbor.cert / harbor.key 這四個檔案,採用架構三時,憑證相關流程內均會使用到。前述的步驟,大家可參考Harbor官網內的說明: https://goharbor.io/docs/2.4.0/install-config/configure-https/

建立Harbor

無論採用步驟二或步驟三,這邊我們都得要建立一個私有Harbor容器庫。在Harbor網站 (https://goharbor.io/) 及 Internet上都很容易可以找到安裝方式,這邊我不想多談細節,但有兩個重點:

  • 在Harbor的配置檔內,我們需要把前面步驟,無論是透過第三方CA簽署或是自建CA簽署出的憑證及私鑰輸入進去,像下面這樣

hostname: harbor.lab.local

https:

   port: 443

   certificate: /root/harbor-key/harbor.crt

   private_key: /root/harbor-key/harbor.key

  • 在NSX建立NAPP時,是透過helm-chart機制呼叫Harbor。因此在Harbor虛機內需要有配置helm,同時在安裝時也需要支持透過chart機制。比如說Harbor安裝時,安裝指令應該像下面這樣 (https://goharbor.io/docs/1.10/install-config/run-installer-script/#installation-with-chart-repository-service)

# sudo ./install.sh –with-chartmuseum

Harbor憑證放到bastion hostdocker

這邊的流程是要讓Bastion Host內的docker可以正常連到Harbor。請把前面建立的rootca.crt (私有CA)/ harbor.key / harbor.cert 三個檔案放到Bastion的docker目錄內:

  • Bastion docker 內建立對應 harbor 之憑證目錄

# sudo mkdir /etc/docker/certs.d

# sudo mkdir /etc/docker/certs.d/harbor.lab.local

  • 複製前面步驟內建立的 rootca.crt / harbor.key / harbor.cert 三個檔案至上述目錄內
  • 以 docker login 指令確認可連入 Harbor,並進行相關的image上傳下載

如果大家採用步驟二,這邊已經結束了喔。但如果是用架構三…唉那我們繼續:

(架構三 only)建立TKC前,在tanzu內採用ytt overlay機制配置Harbor憑證

我們需要讓Tanzu Kubernetes Grid建立的TKC叢集內有私有CA憑證,以正常連到Harbor。這邊請大家依據 https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.5/vmware-tanzu-kubernetes-grid-15/GUID-cluster-lifecycle-secrets.html#custom-ca 這個鏈結內的資訊,在建立TKC前進行配置:

  • 登入 bastion host,進入指定目錄內

# cd ~/.config/tanzu/tkg/providers/ytt/03_customizations/

  • 複製前面步驟內建立的 rootca.crt至上述目錄內,並更名為tkg-custom-ca.pem 檔案
  • 建立新檔案並輸入對應 ytt overlay 配置,以匯入私有CA資訊。請直接由前述鏈結內複製相關配置檔貼入

# vi registry_private_ca_cert.yaml

(架構三 only)在NSX Manager內匯入私有CA憑證

請用root帳戶分別登入每一台NSX Manager,執行下列步驟:

  • 於作業系統內建立一個CA憑證目錄

nsx-01# mkdir /usr/local/share/ca-certificates/extra

  • 於 Bastion 上,將私有 CA憑證複製到 NSX Manager 內

bastion# scp rootca.crt root@nsx-01:/usr/local/share/ca-certificates/extra

  • 於 NSX Manager 內,進行 CA 憑證更新,並以 curl 指令確認可正常連線到 Harbor:

nsx-01# update-ca-certificates

nsx-01# curl https://harbor.lab.local

好,終於結束了…這不是關於網路與NSX的網誌嗎,為什麼我會得要處理這堆憑證的鳥問題呢(看向遠方)?強烈地希望上述的流程,大家在實際環境內不需要去處理,安裝NSX Application Platform的時候,用最簡單的方式,也就是從Internet上VMware Repository下載就好了,如果真的一定得用私有容器庫,也盡量採用第三方公正CA簽署的方式吧。

评论

发表评论

电子邮件地址不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.