cert-manager 命令列工具 (cmctl)
cmctl
是一個命令列工具,可協助您管理 cert-manager 及其叢集內的資源。
📢 cert-manager CLI 正在移至新的 GitHub 儲存庫
cert-manager 團隊已決定將
cmctl
程式碼移至新的 GitHub 儲存庫。這將使我們能夠獨立於 cert-manager 發布cmctl
的新功能和錯誤修復。它將簡化 cert-manager 的 Go 套件相依性,因此 cert-manager 的安全性修補程式版本應該會減少。這將使我們更容易擴展cmctl
的功能,以管理trust-manager
和approver-policy
。這也將使我們能夠為cmctl
撰寫更多 E2E 測試,而不會進一步減慢 cert-manager 的測試套件速度。⚠️ cert-manager 1.14 是最後一個仍包含
cert-manager-ctl
容器映像檔、go 套件和 GitHub 發行二進位檔的版本。請造訪 GitHub 上的新 cmctl 儲存庫以瞭解更多資訊。
安裝
Homebrew
如果您在 Mac 或 Linux 上安裝了 Homebrew,您可以使用以下命令安裝 cmctl
brew install cmctl
這也會安裝 shell 完成。
手動安裝
您需要您所使用平台的 cmctl
檔案,這些檔案可以在我們的 cmctl GitHub 發行頁面上找到。為了使用 cmctl
,您需要其二進位檔在您的 $PATH
中以 cmctl
的名稱存取。請執行下列命令來設定 CLI。請將 OS 和 ARCH 替換為您系統的對等項目
OS=$(go env GOOS); ARCH=$(go env GOARCH); curl -fsSL -o cmctl https://github.com/cert-manager/cmctl/releases/latest/download/cmctl_${OS}_${ARCH}chmod +x cmctlsudo mv cmctl /usr/local/bin
或者,您可以使用 go
安裝 cmctl
go install github.com/cert-manager/cmctl/v2@latest
您可以執行 cmctl help
來測試 CLI 是否已正確設定
$ cmctl helpcmctl is a CLI tool manage and configure cert-manager resources for KubernetesUsage: cmctl [command]Available Commands:approve Approve a CertificateRequestcheck Check cert-manager componentscompletion Generate completion scripts for the cert-manager CLIconvert Convert cert-manager config files between different API versionscreate Create cert-manager resourcesdeny Deny a CertificateRequestexperimental Interact with experimental featureshelp Help about any commandinspect Get details on certificate related resourcesrenew Mark a Certificate for manual renewalstatus Get details on current status of cert-manager resourcesupgrade Tools that assist in upgrading cert-managerversion Print the cert-manager CLI version and the deployed cert-manager versionFlags:-h, --help help for cmctl--log-flush-frequency duration Maximum number of seconds between log flushes (default 5s)Use "cmctl [command] --help" for more information about a command.
還有一個 舊版 kubectl 外掛程式,但不建議使用,因為獨立的
cmctl
二進位檔提供更好的自動完成。
命令
核准與拒絕 CertificateRequests (憑證請求)
可以使用它們各自的 cmctl 命令核准或拒絕 CertificateRequests。
注意:除非使用 cert-manager-controller 上的旗標
--controllers=*,-certificaterequests-approver
停用,否則內部 cert-manager 核准者可能會自動核准所有 CertificateRequests。
$ cmctl approve -n istio-system mesh-ca --reason "pki-team" --message "this certificate is valid"Approved CertificateRequest 'istio-system/mesh-ca'
$ cmctl deny -n my-app my-app --reason "example.com" --message "violates policy"Denied CertificateRequest 'my-app/my-app'
轉換
cmctl convert
可用於在不同的 API 版本之間轉換 cert-manager 資訊清單檔案。接受 YAML 和 JSON 格式。此命令接受檔案名稱、目錄路徑或 URL 作為輸入。內容會轉換為 cert-manager 已知的最新 API 版本格式,或由 --output-version
旗標指定的格式。
預設輸出將以 YAML 格式列印到標準輸出。可以使用選項 -o
來變更輸出目的地。
例如,這將以最新的 API 版本輸出 cert.yaml
cmctl convert -f cert.yaml
建立
cmctl create
可用於手動建立 cert-manager 資源。有子命令可用於建立不同的資源
CertificateRequest
若要建立 cert-manager CertificateRequest,請使用 cmctl create certificaterequest
。此命令會接收要建立的 CertificateRequest 名稱,並根據 --from-certificate-file
旗標指定的憑證資源 YAML 資訊清單建立新的 CertificateRequest 資源,方法是在本機產生私密金鑰,並建立要提交至 cert-manager Issuer 的「憑證簽署請求」。私密金鑰將寫入本機檔案,預設值為 <cr_name>.key
,或者可以使用 --output-key-file
旗標指定。
如果您希望等待 CertificateRequest 簽署並將 X.509 憑證儲存在檔案中,您可以設定 --fetch-certificate
旗標。等待憑證簽發的預設逾時為 5 分鐘,但可以使用 --timeout
旗標指定。儲存 X.509 憑證的檔案的預設名稱為 <cr_name>.crt
,您可以使用 --output-certificate-file
旗標指定其他名稱。
請注意,私密金鑰和 X.509 憑證都會寫入檔案,而不會儲存在 Kubernetes 內。
例如,這將基於 my-certificate.yaml
中描述的 cert-manager 憑證建立名稱為「my-cr」的 CertificateRequest 資源,同時將私密金鑰和 X.509 憑證分別儲存在 my-cr.key
和 my-cr.crt
中。
cmctl create certificaterequest my-cr --from-certificate-file my-certificate.yaml --fetch-certificate --timeout 20m
更新
cmctl
允許您手動觸發特定憑證的更新。這可以一次更新一個憑證,使用標籤選擇器(-l app=example
),或使用 --all
標誌。
例如,您可以更新憑證 example-com-tls
。
$ kubectl get certificateNAME READY SECRET AGEexample-com-tls True example-com-tls 1d$ cmctl renew example-com-tlsManually triggered issuance of Certificate default/example-com-tls$ kubectl get certificaterequestNAME READY AGEexample-com-tls-tls-8rbv2 False 10s
您也可以更新給定命名空間中的所有憑證。
$ cmctl renew --namespace=app --all
更新命令允許指定多個選項。
--all
更新給定命名空間中的所有憑證,或與--all-namespaces
結合使用時,更新所有命名空間中的憑證。-A
或--all-namespaces
標記跨命名空間的憑證以進行更新。-l
--selector
允許設定標籤查詢以進行篩選,以及類似kubectl
的全域標誌,例如--context
和--namespace
。
憑證狀態
cmctl status certificate
輸出憑證資源及其相關資源(例如 CertificateRequest、Secret、Issuer)的目前狀態詳細資訊,如果它是 ACME 憑證,則還會輸出 Order 和 Challenges 的資訊。該命令會輸出有關資源的資訊,包括條件(Conditions)、事件(Events)以及特定於資源的欄位,例如 Secret 的金鑰用途(Key Usages)和擴展金鑰用途(Extended Key Usages),或 Order 的授權(Authorizations)。這對於疑難排解憑證會很有幫助。
該命令接受一個參數,用於指定憑證資源的名稱,並且可以使用 -n
或 --namespace
標誌指定命名空間。
此範例查詢命名空間 my-namespace
中名為 my-certificate
的憑證的狀態。
cmctl status certificate my-certificate -n my-namespace
補全
cmctl
支援子命令的自動補全,以及執行階段物件的建議。
$ cmctl approve -n <TAB> <TAB>default kube-node-lease kube-public kube-system local-path-storage
您可以依照您正在使用的 shell 的指示,為您的環境安裝補全功能。目前支援 bash、fish、zsh 和 powershell。
$ cmctl completion help
實驗性功能
cmctl x
具有實驗性的子命令,用於目前正在評估是否要納入 cert-manager 本身的運算。這些命令的行為和介面可能會在未來版本中變更或移除。
建立
cmctl x create
可以用來手動建立 cert-manager 資源。子命令可用來建立不同的資源。
CertificateSigningRequest
若要建立 CertificateSigningRequest,請使用
cmctl x create csr
此命令接受要建立的 CertificateSigningRequest 的名稱,以及包含憑證資訊清單的檔案(-f, --from-certificate-file
)。此命令將根據憑證的選項產生私鑰,並將其寫入本機檔案 <name>.key
,或由 -k, --output-key-file
指定的檔案。
$ cmctl x create csr -f my-cert.yaml my-req
cert-manager 不會自動批准 CertificateSigningRequests。如果您未在叢集中執行自訂批准者,則可能需要手動批准 CertificateSigningRequest。
$ kubectl certificate approve <name>
此命令也可以使用標誌 -w, --fetch-certificate
等待 CertificateSigningRequest 被簽署。簽署後,它會將產生的已簽署憑證寫入本機檔案 <name>.crt
,或由 -c, --output-certificate-file
指定的檔案。
$ cmctl x create csr -f my-cert.yaml my-req -w
安裝
cmctl x install
此命令確保已安裝所需的 CustomResourceDefinitions
以及 cert-manager、cainjector 和 webhook 元件。在底層,會使用類似於 Helm 安裝程序 的程序。
您也可以使用 cmctl x install
自訂 cert-manager 的安裝。
以下範例示範如何透過覆寫預設 Helm 值來調整 cert-manager 的安裝。
cmctl x install \--set prometheus.enabled=false \ # Example: disabling prometheus using a Helm parameter--set webhook.timeoutSeconds=4s # Example: changing the wehbook timeout using a Helm parameter
您可以在 cert-manager 的 ArtifactHub 頁面上找到 安裝參數的完整清單。這些參數與使用 Helm chart 時可用的參數相同。部署 cert-manager 後,您可以驗證安裝。
CLI 也允許使用者將範本化的資訊清單輸出到 stdout
,而不是將資訊清單安裝到叢集上。
cmctl x install --dry-run > cert-manager.custom.yaml
解除安裝
cmctl x uninstall
此命令會解除安裝 cert-manager 的任何 Helm 管理版本。
從 cmctl v2.0.0
開始,解除安裝命令是安全的,預設情況下不會刪除 CRD,即使它們是在 v1.15.0 之前使用 cert-manager Helm chart 安裝的(使用選項 --set installCRDs=true
)。從 cert-manager v1.15.0 開始,使用 Helm 解除安裝 Helm chart 時,預設情況下不會移除 CRD。
🕐 在
v2.0.0
之前,如果 CRD 是使用 Helm chart 安裝的,cmctl 會移除這些 CRD(類似於 Helm 的行為)。
此命令也支援 helm uninstall
支援的大部分功能。
以下是一些使用範例
cmctl x uninstallcmctl x uninstall --namespace my-cert-managercmctl x uninstall --dry-run
升級
協助升級 cert-manager 的工具。
$ cmctl upgrade --help
遷移 API 版本
此命令可用於準備在 cert-manager v1
之前建立的 cert-manager 安裝,以便升級到 cert-manager 版本 v1.6
或更高版本。它確保任何可能以已棄用的 API 版本儲存在 etcd 中的 cert-manager 自訂資源都會遷移到 v1
。如需更多背景資訊,請參閱遷移已棄用的 API 資源。
$ cmctl upgrade migrate-api-version --qps 5 --burst 10
Kubectl 插件
自 kubectl 1.26 起,kubectl 插件支援自動完成,這表示您將擁有與獨立 cmctl
二進位檔和 kubectl 插件相同的體驗。
若要安裝插件,您需要適用於您所使用平台的 kubectl_cert-manager
檔案,這些檔案可以在我們的cmctl GitHub 發行頁面上找到。為了使用 kubectl 插件,您需要其二進位檔在您的 $PATH
中以 kubectl-cert_manager
的名稱存取。
您可以執行 kubectl cert-manager help
來測試是否正確設定了插件。
使用 kubectl 外掛程式自動完成
從 kubectl 1.26 版本開始,可以為外掛程式啟用自動完成功能。假設您已將 kubectl_cert-manager
安裝在 /usr/local/bin
中,您可以執行以下命令來設定自動完成功能
cat >kubectl_complete-cert_manager <<'EOF'#!/usr/bin/env shkubectl cert-manager __complete "$@"EOFsudo install kubectl_complete-cert_manager /usr/local/bin