cert-manager コマンドラインツール (cmctl)
cmctl
は、クラスタ内の cert-manager とそのリソースを管理するのに役立つコマンドラインツールです。
📢 cert-manager CLI が新しいGitHubリポジトリに移行します
cert-manager チームは、
cmctl
コードを新しいGitHubリポジトリに移行することを決定しました。これにより、cmctl
の新機能とバグ修正を cert-manager とは独立してリリースできるようになります。cert-manager の Go パッケージの依存関係が簡素化されるため、cert-manager のセキュリティパッチリリースが減少します。cmctl
をtrust-manager
とapprover-policy
の管理機能で拡張しやすくなります。また、cert-manager のテストスイートをさらに遅くすることなく、cmctl
のE2Eテストをより多く記述できるようになります。⚠️ cert-manager 1.14 は、
cert-manager-ctl
コンテナイメージ、Goパッケージ、GitHubリリースバイナリが含まれる最後のリリースです。詳細については、新しいGitHub上のcmctlリポジトリをご覧ください。
インストール
Homebrew
MacまたはLinuxでHomebrewがインストールされている場合、cmctl
を以下のようにインストールできます。
brew install cmctl
これにより、シェル補完もインストールされます。
手動インストール
使用しているプラットフォームのcmctl
ファイルが必要です。これらは、cmctl GitHubリリースページにあります。cmctl
を使用するには、バイナリがcmctl
という名前で$PATH
にアクセス可能である必要があります。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
バイナリの方が優れた自動補完を提供するため、推奨されなくなりました。
コマンド
CertificateRequestの承認と拒否
CertificateRequestは、それぞれのcmctlコマンドを使用して承認または拒否できます。
注記: 内部cert-manager承認者は、cert-manager-controllerのフラグ
--controllers=*,-certificaterequests-approver
で無効にしない限り、すべてのCertificateRequestを自動的に承認する場合があります。
$ 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
を使用して、cert-managerマニフェストファイルを異なるAPIバージョン間で変換できます。YAMLとJSONの両方の形式が受け入れられます。このコマンドは、ファイル名、ディレクトリパス、またはURLを入力として受け取ります。内容は、cert-managerが認識する最新のAPIバージョン、または--output-version
フラグで指定された形式に変換されます。
デフォルトの出力は、YAML形式でstdoutに出力されます。-o
オプションを使用して、出力先を変更できます。
たとえば、これは最新のAPIバージョンでcert.yaml
を出力します。
cmctl convert -f cert.yaml
作成
cmctl create
を使用して、cert-managerリソースを手動で作成できます。さまざまなリソースを作成するためのサブコマンドがあります。
CertificateRequest
cert-manager CertificateRequestを作成するには、cmctl create certificaterequest
を使用します。このコマンドは、作成するCertificateRequestの名前を入力として受け取り、--from-certificate-file
フラグで指定されたCertificateリソースのYAMLマニフェストに基づいて新しいCertificateRequestリソースを作成します。ローカルに秘密鍵を生成し、「証明書署名要求」を作成してcert-manager発行者 (Issuer) に送信します。秘密鍵はローカルファイルに書き込まれ、デフォルトは<name_of_cr>.key
ですが、--output-key-file
フラグを使用して指定できます。
CertificateRequestが署名されるのを待って、X.509証明書をファイルに保存する場合は、--fetch-certificate
フラグを設定できます。証明書の発行を待機する際のデフォルトのタイムアウトは5分ですが、--timeout
フラグで指定できます。X.509証明書を保存するファイルのデフォルトの名前は<name_of_cr>.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`)を使用して一度に1つの証明書ずつ、または`--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` は、ラベルクエリを設定してフィルタリングするためのオプションです。また、`--context`や`--namespace`などの`kubectl`のようなグローバルフラグも使用できます。
証明書のステータス
`cmctl status certificate`は、CertificateリソースとCertificateRequest、Secret、Issuerなどの関連リソースの現在のステータスの詳細を出力します。ACME証明書の場合は、OrderとChallengesも出力されます。このコマンドは、リソースに関する情報(Conditions、Eventsなど)、およびSecretのKey UsagesやExtended Key Usages、OrderのAuthorizationsなどのリソース固有のフィールドを出力します。これは、証明書のトラブルシューティングに役立ちます。
このコマンドは、Certificateリソースの名前を指定する1つの引数を取ります。名前空間は、通常どおり`-n`または`--namespace`フラグで指定できます。
この例では、`my-namespace`名前空間内の`my-certificate`という名前の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
使用しているシェルについての手順に従って、環境に補完をインストールできます。現在、bash、fish、zsh、powershellをサポートしています。
$ cmctl completion help
実験的
`cmctl x`には、現在cert-manager本体への組み込みを検討中の操作に関する実験的なサブコマンドがあります。これらのコマンドの動作とインターフェースは、将来のリリースで変更または削除される可能性があります。
作成
`cmctl x create`は、cert-managerリソースを手動で作成するために使用できます。さまざまなリソースを作成するためのサブコマンドが用意されています。
CertificateSigningRequest
CertificateSigningRequestを作成するには、以下を使用します。
cmctl x create csr
このコマンドは、作成するCertificateSigningRequestの名前と、Certificateマニフェストを含むファイル(`-f, --from-certificate-file`)を取ります。このコマンドは、Certificateのオプションに基づいて秘密鍵を生成し、ローカルファイル`
$ cmctl x create csr -f my-cert.yaml my-req
cert-managerは、CertificateSigningRequestを自動的に承認しません。クラスタでカスタム承認者を実行していない場合は、CertificateSigningRequestを手動で承認する必要がある可能性があります。
$ kubectl certificate approve <name>
このコマンドは、`-w, --fetch-certificate`フラグを使用して、CertificateSigningRequestが署名されるのを待つこともできます。署名されると、結果として得られた署名付き証明書がローカルファイル`
$ 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チャートを使用する場合に使用できるパラメータと同じです。cert-managerをデプロイしたら、インストールを確認できます。
CLIを使用すると、マニフェストをクラスタにインストールする代わりに、テンプレート化されたマニフェストを`stdout`に出力することもできます。
cmctl x install --dry-run > cert-manager.custom.yaml
アンインストール
cmctl x uninstall
このコマンドは、Helmで管理されているcert-managerのリリースをアンインストールします。
cmctl `v2.0.0`以降、アンインストールコマンドは安全であり、デフォルトではCRDを削除しません。これは、v1.15.0より前のcert-manager Helmチャート(`--set installCRDs=true`オプションを使用)でインストールされた場合でも同様です。cert-manager v1.15.0以降、Helmチャートをアンインストールする際に、デフォルトではCRDは削除されません。
🕐 `v2.0.0`より前では、cmctlは、Helmチャートでインストールされた場合、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プラグインを使用するには、そのバイナリがkubectl-cert_manager
という名前で$PATH
にアクセス可能である必要があります。
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