カスタム cert-manager を使用する

限定公開 GA: Apigee ハイブリッドでカスタム cert-manager を使用する

この機能は、Apigee ハイブリッド バージョン 1.13 の限定公開 GA 版として提供されています。

この機能を使用すると、制限付きの権限を使用して、ロールベース アクセス制御(RBAC)関連の構成を変更した Apigee ハイブリッド用カスタム cert-manager をインストールできます。

始める前に

インストール手順に進む前に、次のコマンドを使用して Helm チャートをダウンロードします。

export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
export CERT_MANAGER_VERSION=v1.14.5
helm pull $CHART_REPO/apigee-cert-manager --version $CERT_MANAGER_VERSION --untar

カスタム cert-manager の設定

カスタム cert-manager を設定する手順は次のとおりです。

  1. カスタム cert-manager の新規インストール
  2. カスタム cert-manager にアップグレードする

カスタム cert-manager の新規インストール

Apigee ハイブリッドで使用するカスタム cert-manager を新規にインストールするには、次の操作を行います。

  1. 次のコマンドを実行して、kubectl を使用して CRD をインストールします。
    export CERT_MANAGER_VERSION=v1.14.5
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.crds.yaml
    
  2. Helm チャートを使用して cert-manager コンポーネントをインストールします。
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE

    新しいバージョンのグラフが利用可能になったら、helm upgrade を使用してアップグレードできます。

    helm upgrade CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE

カスタム cert-manager にアップグレードする

既存のカスタム以外の cert-manager からカスタム バージョンに移行するには、次の操作を行います。一度にクラスタで実行できる cert-manager は 1 つのみです。

  1. シームレスな移行のため、既存の Webhook を無効にして、レプリカが 0 になるようにデプロイメントを更新します。
      kubectl delete validatingwebhookconfiguration cert-manager-webhook
      kubectl delete mutatingwebhookconfiguration cert-manager-webhook
    
        # set the replicas to 0
    
      kubectl scale deployment cert-manager -n cert-manager --replicas=0
      kubectl scale deployment cert-manager-cainjector -n cert-manager --replicas=0
      kubectl scale deployment cert-manager-webhook -n cert-manager --replicas=0
  2. CRD をインストールします。
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERION}/cert-manager.crds.yaml
  3. カスタム cert-manager をインストールします。
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE
  4. インストールが完了したら、以前にインストールした cert-manager を削除できます。

カスタム cert-manager を使用した Apigee ハイブリッドのインストールまたはアップグレード

カスタム cert-manager を使用してハイブリッドをインストールまたはアップグレードするには、インストールまたはアップグレード手順を次のように変更する必要があります。

Apigee ハイブリッドのインストールの変更

カスタム cert-cert マネージャーを使用して Apigee ハイブリッド v1.13 以降をインストールする場合は、ステップ 10: Helm を使用して Apigee ハイブリッドをインストールするで Apigee ハイブリッド コンポーネントをインストールする前に、overrides.yaml ファイルで次の変更を行います。

overrides.yaml ファイルを更新して、cert-manager 関連リソースの場所をオペレーターに通知し、オペレーターがカスタム cert-manager の発行元を使用できるようにします。

certManager:
  namespace: APIGEE_NAMESPACE

ao:
  certManagerCAIssuerEnabled: true

Apigee ハイブリッドのアップグレード プロセスの変更

カスタム cert-cert マネージャーを使用して Apigee ハイブリッドを v1.13 以降にアップグレードする場合は、Helm チャートのアップグレードの準備の手順を実施した後Apigee ハイブリッド Helm チャートをインストールする前に、次の変更を行います。

  1. overrides.yaml ファイルで次の変更を行い、cert-manager 関連リソースの場所をオペレーターに通知し、オペレーターがカスタム cert-manager の ClusterIssuer を使用できるようにします。
    certManager:
      namespace: APIGEE_NAMESPACE
    
    ao:
      certManagerCAIssuerEnabled: true
    
  2. 既存の apigee-ca Secret を cert-manager Namespace から apigee Namespace にコピーします。
    kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    
  3. apigee-ca.yaml ファイルを編集して、Namespace を cert-manager として識別する Namespace ラメータを削除します。
  4. kubectl apply を使用して、apigee-ca Secret を apigee Namespace に適用します。
    kubectl -n APIGEE_NAMESPACE apply -f apigee-ca.yaml

Apigee ハイブリッドのアップグレードのロールバック

以前のバージョンの Apigee ハイブリッドにロールバックする必要がある場合は、以前のバージョンにロールバックするの手順に沿って操作します。

カスタム cert-manager のロールバックとアンインストール

カスタム cert-manager をロールバックする

カスタム cert-manager をロールバックする手順は次のとおりです。

  1. 次のコマンドを使用して Helm リリースをアンインストールします。
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. 任意の方法で通常の(カスタム以外の)cert-manager をインストールします。対応する CRD のバージョンを使用してください。たとえば、kubectl メソッドを使用して cert-manager をインストールする場合、ペイロードに CRD も含まれるため、CRD は対応するバージョンに更新されます。使用するインストール方法に CRD が含まれていることを確認します。

カスタム cert-manager をアンインストールする

カスタム cert-manager をアンインストールする手順は次のとおりです。

  1. 次のコマンドを使用して Helm リリースをアンインストールします。
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. 次のコマンドを使用して CRD を削除します。
    export CERT_MANAGER_VERSION=v1.14.5
    kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.crds.yaml

Infrastructure as Code(overrides.yaml)

Helm チャートは必要に応じてオーバーライドできます。インストールまたはアップグレード プロセス中に、必要に応じてオーバーライド ファイルを使用できます。混乱を避けるため、cert-manager-overrides.yaml のようなファイル名を使用することをおすすめします。

サポートされているすべての cert-manager のオーバーライド構成については、cert-manager のドキュメントをご覧ください。

一般的な cert-manager 構成

次の例は、Apigee ハイブリッドで cert-manager の一般的な構成を行う方法を示しています。

イメージをオーバーライドする

次の例は、イメージを非公開でホストする必要がある場合に、imagepullsecrets とともにイメージをオーバーライドする方法を示しています。

# cert-manager-overrides.yaml

global:
  # Reference to one or more secrets to be used when pulling images
  # ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
  #
  # For example:
  #  imagePullSecrets:
  #    - name: "image-pull-secret"
  imagePullSecrets: []


image:
  # Override the image tag to deploy by setting this variable.
  # If no value is set, the chart's appVersion will be used.
  repository: quay.io/jetstack/cert-manager-controller

webhook:
  image:
    # without a tag
    repository: quay.io/jetstack/cert-manager-webhook

cainjector:
  image:
    # without a tag
    repository: quay.io/jetstack/cert-manager-cainjector

startupapicheck:
  image:
    # without a tag
    repository: quay.io/jetstack/cert-manager-startupapicheck

NodeSelector とノード アフィニティ

Apigee ハイブリッドのインストールでは、Cassandra Pod と他の Pod に個別のノードを使用する必要があります。Cassandra に関連しないノードプールで cert-manager を実行する場合は、ノード アフィニティを使用できます。

# A Kubernetes Affinity, if required; see https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core
#
# For example:
#   affinity:
#     nodeAffinity:
#      requiredDuringSchedulingIgnoredDuringExecution:
#        nodeSelectorTerms:
#        - matchExpressions:
#          - key: cloud.google.com/gke-nodepool
#            operator: In
#            values:
#            - master
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: KEY
          operator: In
          values:
          - value for the non-C* node pool

webhook:
  affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: KEY
          operator: In
          values:
          - value for the non-C* node pool

cainjector:
  affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: KEY
          operator: In
          values:
          - value for the non C* node pool

toleration

次の例に示すように、toleration を指定することもできます。

# A list of Kubernetes Tolerations, if required; see https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#toleration-v1-core
#
# For example:
#   tolerations:
#   - key: node.kubernetes.io/not-ready
#     operator: Equal
#     value: master
#     effect: NoSchedule
tolerations: []

webhook:
  tolerations: []

cainjector:
  tolerations: []

startupapicheck:
  tolerations: []