這些教學課程涵蓋已啟用 Arc 的 Kubernetes 叢集中已連線登錄檔延伸模組的各種部署案例。 安裝已連線登錄檔延伸模組之後,您可以將映像從雲端登錄同步到內部部署或遠端位置。
深入探討之前,請花點時間了解已啟用 Arc 的 Kubernetes (部分機器翻譯) 在概念上如何運作。
您可以使用各種加密方法,安全地部署已連線登錄檔。 若要確保部署成功,請遵循快速入門指南來檢閱必要條件與其他相關資訊。 根據預設,已連線登錄檔會使用 HTTPS、ReadOnly 模式、信任散發與 Cert Manager 服務進行設定。 您可以根據案例,視需要新增更多自訂和相依性。
什麼是 Cert Manager 服務?
已連線登錄檔 Cert Manager 是一項服務,可管理已啟用 Azure Arc 之 Kubernetes 叢集中已連線登錄檔延伸模組的 TLS 憑證。 其藉由處理憑證的建立、更新和散發,確保已連線登錄檔與其他元件之間的通訊安全。 此服務可以當作已連線登錄檔部署的一部分進行安裝,或者,如果其已安裝於叢集上,則您可以使用現有的 Cert Manager。
Cert-Manager (英文) 是開放原始碼的 Kubernetes 附加元件,可自動管理和發行來自各種來源的 TLS 憑證。 其會管理使用 CA 服務建立之 CA 集區所發行的憑證生命週期,確保憑證有效且會在到期前更新。
什麼是信任散發?
已連線登錄檔的信任散發是指在已連線登錄檔服務和叢集內的 Kubernetes 用戶端之間安全地散發信任的流程。 這可藉由使用憑證授權單位 (CA) (例如 cert-manager) 來簽署 TLS 憑證,然後散發至登錄服務和用戶端來達成。 這可確保所有實體都能安全地驗證彼此,進而在 Kubernetes 叢集中維持安全且受信任的環境。
必要條件
若要完成本教學課程,您需要:
- 請遵循此快速入門 (英文),安全地部署已連線登錄檔延伸模組。
使用預先安裝的 cert-manager 部署已連線登錄檔延伸模組
此教學課程將示範如何在叢集上使用預先安裝的 cert-manager 服務。 此設定可讓您控制憑證管理,讓您能夠遵循提供的步驟來部具有加密功能的已連線登錄檔延伸模組:
執行快速入門 (英文) 中的 az-k8s-extension-create 命令,並設定 cert-manager.enabled=true 和 cert-manager.install=false 參數,以判斷已安裝並啟用 cert-manager 服務:
az k8s-extension create --cluster-name myarck8scluster \
--cluster-type connectedClusters \
--extension-type Microsoft.ContainerRegistry.ConnectedRegistry \
--name myconnectedregistry \
--resource-group myresourcegroup \
--config service.clusterIP=192.100.100.1 \
--config cert-manager.install=false \
--config-protected-file protected-settings-extension.json
使用自備憑證 (BYOC) 部署已連線登錄檔延伸模組
此教學課程將示範如何在叢集上使用自備憑證 (BYOC)。 BYOC 可讓您使用自己的公開憑證和私密金鑰組,讓您能夠控制憑證管理。 此設定可讓您依照提供的步驟來部署具有加密功能的已連線登錄檔延伸模組:
注意
BYOC 適用於自備已由 Kubernetes 節點信任之憑證的客戶。 不建議手動更新節點來信任憑證。
請遵循此快速入門 (英文),並新增公開憑證和私密金鑰字串變數 + 值組。
- 使用已連線登錄檔服務 IP 作為 SAN 建立自我簽署 SSL 憑證
mkdir /certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext "subjectAltName = IP:<service IP>"
- 取得這些憑證檔案的 base64 編碼字串
export TLS_CRT=$(cat mycert.crt | base64 -w0)
export TLS_KEY=$(cat mycert.key | base64 -w0)
- 具有祕密的受保護設定檔範例 (JSON 格式):
注意
公開憑證和私密金鑰組必須以 base64 格式編碼,並新增至受保護的設定檔。
{
"connectionString": "[connection string here]",
"tls.crt": $TLS_CRT,
"tls.key": $TLS_KEY,
"tls.cacrt": $TLS_CRT
}
現在,您可以藉由將變數設定為
cert-manager.enabled=false和cert-manager.install=false,使用公開憑證和私密金鑰組管理,來部署具有 HTTPS (TLS 加密) 的已連線登錄檔延伸模組。 使用這些參數時,不會安裝或啟用 cert-manager,因為會改用公開憑證和私密金鑰組進行加密。編輯受保護的設定檔之後,執行 az-k8s-extension-create 命令進行部署:
az k8s-extension create --cluster-name myarck8scluster \ --cluster-type connectedClusters \ --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ --name myconnectedregistry \ --resource-group myresourcegroup \ --config service.clusterIP=192.100.100.1 \ --config cert-manager.enabled=false \ --config cert-manager.install=false \ --config-protected-file protected-settings-extension.json
使用 Kubernetes 祕密管理部署已連線登錄檔
此教學課程將示範如何在叢集上使用 Kubernetes 祕密 (英文)。 Kubernetes 祕密可讓您安全地管理叢集內 Pod 之間授權的存取權。 此設定可讓您依照提供的步驟來部署具有加密功能的已連線登錄檔延伸模組:
請遵循此快速入門 (英文),並新增 Kubernetes TLS 祕密字串變數 + 值組。
- 使用已連線登錄檔服務 IP 作為 SAN 建立自我簽署 SSL 憑證
mkdir /certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext "subjectAltName = IP:<service IP>"
- 取得這些憑證檔案的 base64 編碼字串
export TLS_CRT=$(cat mycert.crt | base64 -w0)
export TLS_KEY=$(cat mycert.key | base64 -w0)
- 建立 k8s 祕密
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: k8secret
type: kubernetes.io/tls
data:
ca.crt: $TLS_CRT
tls.crt: $TLS_CRT
tls.key: $TLS_KEY
EOF
具有祕密的受保護設定檔範例 (JSON 格式):
{ "connectionString": "[connection string here]", "tls.secret": “k8secret” }
現在,您可以藉由將變數設定為 cert-manager.enabled=false 和 cert-manager.install=false,使用 Kubernetes 祕密管理,來部署具有 HTTPS (TLS 加密) 的已連線登錄檔延伸模組。 使用這些參數時,不會安裝或啟用 cert-manager,因為會改用 Kubernetes 祕密進行加密。
編輯受保護的設定檔之後,執行 az-k8s-extension-create 命令進行部署:
az k8s-extension create --cluster-name myarck8scluster \ --cluster-type connectedClusters \ --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ --name myconnectedregistry \ --resource-group myresourcegroup \ --config service.clusterIP=192.100.100.1 \ --config cert-manager.enabled=false \ --config cert-manager.install=false \ --config-protected-file protected-settings-extension.json
使用您自己的信任散發來部署已連線登錄檔,並停用已連線登錄檔的預設信任散發
此教學課程將示範如何在叢集上設定信任散發。 使用您自己的 Kubernetes 祕密或公開憑證和私密金鑰組時,您可以使用 TLS 加密、固有的信任散發,以及拒絕已連線登錄檔的預設信任散發來部署已連線登錄檔延伸模組。 此設定可讓您依照提供的步驟來部署具有加密功能的已連線登錄檔延伸模組:
請遵循此快速入門 (英文),新增 Kubernetes 祕密或公開憑證,以及受保護設定檔中的私密金鑰變數 + 值組 (JSON 格式)。
執行快速入門 (英文)中的 az-k8s-extension-create 命令,並設定
trustDistribution.enabled=false、trustDistribution.skipNodeSelector=false參數,來拒絕已連線登錄檔的信任散發:az k8s-extension create --cluster-name myarck8scluster \ --cluster-type connectedClusters \ --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ --name myconnectedregistry \ --resource-group myresourcegroup \ --config service.clusterIP=192.100.100.1 \ --config trustDistribution.enabled=false \ --config cert-manager.enabled=false \ --config cert-manager.install=false \ --config-protected-file <JSON file path>
使用這些參數時,不會安裝或啟用 cert-manager,此外,不會強制執行已連線登錄檔的信任散發。 相反地,您會使用叢集提供的信任散發來建立已連線登錄檔與用戶端節點之間的信任。
清除資源
藉由刪除部署的已連線登錄檔延伸模組,您可以移除對應的已連線登錄檔 Pod 與組態設定。
執行 az-k8s-extension-delete 命令來刪除已連線登錄檔延伸模組:
az k8s-extension delete --name myconnectedregistry --cluster-name myarcakscluster \ --resource-group myresourcegroup \ --cluster-type connectedClusters執行 az acr connected-registry delete 命令來刪除已連線登錄檔:
az acr connected-registry delete --registry myacrregistry \ --name myconnectedregistry \ --resource-group myresourcegroup
藉由刪除已連線登錄檔延伸模組和已連線登錄檔,您可以移除所有相關聯的資源與設定。