Helm デプロイメント証明書マネージャーの実践

1 はじめに

Cert-manager は、Kubernetes 上の証明書管理コントローラーであり、証明書の発行と更新のプロセスを自動化できます。Kubernetes のカスタム リソース定義 (CRD) を使用して、証明書の要求と発行、および秘密キーや証明書チェーンなどの関連リソースを定義します。Cert-manager は、Let's Encrypt、Venafi、HashiCorp Vault などを含むさまざまな認証局 (CA) をサポートしています。

Cert-manager を Kubernetes Ingress コントローラーと統合して、HTTPS 証明書の発行と更新を自動化できます。Ingress リソースを作成すると、Cert-manager は自動的に証明書リクエストを作成し、そのリクエストを認証局に送信できます。認証局が証明書に署名すると、Cert-manager は自動的に証明書を対応する Ingress リソースにインストールし、TLS 終端を構成します。

Cert-manager は、Let's Encrypt が主導するオープン標準である自動証明書発行プロトコルである ACME プロトコル (Automatic Certificate Management Environment) もサポートしています。ACME プロトコルを使用すると、証明書の発行および更新プロセスを手動で管理することなく、Let's Encrypt によって発行された無料の証明書を使用して HTTPS を有効にすることができます。

Cert-manager は、カスタム認証局を Cert-manager に統合して Cert-manager を通じて管理できる Webhook API も提供します。

全体として、Cert-manager は証明書管理のプロセスを簡素化し、アプリケーションが常に最新の証明書を使用できるようにし、Kubernetes での証明書管理を簡単に自動化するのに役立ちます。

2. アーキテクチャ

証明書マネージャーは、Kubernetes のカスタム リソース定義 (CRD) を通じて、証明書の要求と発行、および秘密キーや証明書チェーンなどの関連リソースを定義します。Cert-manager は Kubernetes クラスター内で Deployment または StatefulSet として実行され、次の 3 つの主要コンポーネントが含まれています。

  • cert-manager コントローラー: 証明書発行要求 (CertificateRequest) および発行機関 (Issuer または ClusterIssuer) の変更を監視し、証明書発行要求を対応する発行機関に発行のために送信する責任を負います。認証局が証明書に署名すると、コントローラーはその証明書を Kubernetes の対応するリソースに自動的にインストールします。

  • 認証局: 証明書発行のための構成および認証情報を構成するために使用されます。Cert-manager は、Let's Encrypt、Venafi、HashiCorp Vault など、さまざまな認証局をサポートしています。

  • Webhook サービス: Cert-manager をカスタム認証局に拡張できるようにします。Webhook サービスを使用すると、カスタム認証局を Cert-manager に統合し、Cert-manager を通じて管理できるようになります。

Cert-manager は、Kubernetes の Ingress コントローラーと統合して、HTTPS 証明書の発行と更新を自動化することもできます。Ingress リソースを作成すると、Cert-manager は自動的に証明書リクエストを作成し、そのリクエストを認証局に送信できます。認証局が証明書に署名すると、Cert-manager は自動的に証明書を対応する Ingress リソースにインストールし、TLS 終端を構成します。

3. インストール

インストール後Cert-manager、無料の証明書が自動的に発行されLet’s Encrypt HTTPS、有効期限が切れる前に自動的に更新されます。まず、helm repo addコマンドを実行して公式 Helm リポジトリを追加します。

$ helm repo add jetstack https://charts.jetstack.io
"jetstack" has been added to your repositories

次に、helm repo update を実行してローカル キャッシュを更新します。

$ helm repo update
...Successfully got an update from the "jetstack" chart repository

次に、helm installを実行してインストールしますCert-manager

$ helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.12.0 --set ingressShim.defaultIssuerName=letsencrypt-prod --set ingressShim.defaultIssuerKind=ClusterIssuer --set ingressShim.defaultIssuerGroup=cert-manager.io --set installCRDs=true

NAME: cert-manager
LAST DEPLOYED: Mon Oct 17 21:26:44 2022
NAMESPACE: cert-manager
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
cert-manager v1.12.0 has been deployed successfully!

ステータスを確認する

$ kubectl get all -n cert-manager
NAME                                          READY   STATUS    RESTARTS   AGE
pod/cert-manager-6c4f5bb68f-7q762             1/1     Running   0          53s
pod/cert-manager-cainjector-f5c6565d4-8vpc4   1/1     Running   0          53s
pod/cert-manager-webhook-5f44bc85f4-9b7nz     1/1     Running   0          53s

NAME                           TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/cert-manager           ClusterIP   10.96.3.160   <none>        9402/TCP   53s
service/cert-manager-webhook   ClusterIP   10.96.3.178   <none>        443/TCP    53s

NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cert-manager              1/1     1            1           53s
deployment.apps/cert-manager-cainjector   1/1     1            1           53s
deployment.apps/cert-manager-webhook      1/1     1            1           53s

NAME                                                DESIRED   CURRENT   READY   AGE
replicaset.apps/cert-manager-6c4f5bb68f             1         1         1       53s
replicaset.apps/cert-manager-cainjector-f5c6565d4   1         1         1       53s
replicaset.apps/cert-manager-webhook-5f44bc85f4     1         1         1       53s

さらに、発行権限を提供するためにCert-manager作成する必要があります。ClusterIssuer以下の内容を として保存しますcluster-issuer.yaml

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: "[email protected]"
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:    
    - http01:
        ingress:
          class: nginx

ここでは、実際の電子メール アドレスに置き換える必要があることに注意してくださいspec.acme.email次に、kubectl applyクラスターへの送信を実行します。

$ kubectl apply -f cluster-issuer.yaml
clusterissuer.cert-manager.io/letsencrypt-prod created

この時点で、Cert-managerすでに構成されています。

4. テスト

少し

5.削除

helm list -n cert-manager
helm delete cert-manager  -n cert-manager

cert-manager 名前空間を削除する

$ k delete ns cert-manager
$ cat delete-ns.sh
#!/bin/bash

NAMESPACE=$1
kubectl proxy --port=8002 &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8002/api/v1/namespaces/$NAMESPACE/finalize

参考:

おすすめ

転載: blog.csdn.net/xixihahalelehehe/article/details/129986416