Utilizzare un cert-manager personalizzato

Versione GA privata: utilizza un gestore dei certificati personalizzato con Apigee hybrid

Questa funzionalità è offerta come versione GA privata per la versione ibrida di Apigee 1.13.

Questa funzionalità ti offre la possibilità di installare un gestore dei certificati personalizzato per Apigee Hybrid con una configurazione modificata relativa al controllo dell'accesso basato sui ruoli (RBAC) che utilizza autorizzazioni restrittive.

Prima di iniziare

Prima di procedere con i passaggi di installazione, scarica il grafico Helm utilizzando i seguenti comandi:

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

Configurazione di cert-manager personalizzato

La configurazione di un gestore dei certificati personalizzato richiede i seguenti passaggi:

  1. Nuova installazione di un cert-manager personalizzato
  2. Eseguire l'upgrade a cert-manager personalizzato

Installazione da zero di un cert-manager personalizzato

Per eseguire una nuova installazione di un cert-manager personalizzato da utilizzare con Apigee hybrid, completa i seguenti passaggi:

  1. Installa i CRD utilizzando kubectl con i seguenti comandi:
    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. Installa il componente cert-manager utilizzando il grafico Helm.
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE

    Successivamente, quando la nuova versione del grafico sarà disponibile, potrai eseguirne l'upgrade con helm upgrade:

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

Esegui l'upgrade a cert-manager personalizzato

Per eseguire la migrazione da un cert-manager non personalizzato esistente a una versione personalizzata, segui i passaggi riportati di seguito. Nel cluster può essere eseguito un solo cert-manager alla volta.

  1. Disattiva gli webhook esistenti e aggiorna il deployment in modo che non abbia repliche per una migrazione senza problemi:
      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. Installa i CRD:
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERION}/cert-manager.crds.yaml
  3. Installa il certificato personalizzato:
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE
  4. Al termine dell'installazione, puoi eliminare cert-manager installato in precedenza.

Installazione o upgrade di Apigee hybrid con un gestore dei certificati personalizzato

L'installazione o l'upgrade di un ambiente ibrida con un cert-manager personalizzato richiede le seguenti modifiche alle procedure di installazione o upgrade.

Modifiche all'installazione di Apigee hybrid

Quando installi Apigee Hybrid 1.13 o versioni successive con un gestore dei certificati personalizzato, apporta la seguente modifica al file overrides.yaml prima di installare i componenti di Apigee Hybrid nel Passaggio 10: installa Apigee Hybrid utilizzando Helm.

Aggiorna il file overrides.yaml per comunicare all'operatore dove trovare le risorse correlate a cert-manager e per consentirgli di utilizzare l'emittente di cert-manager personalizzato.

certManager:
  namespace: APIGEE_NAMESPACE

ao:
  certManagerCAIssuerEnabled: true

Modifiche alla procedura di upgrade di Apigee hybrid

Quando esegui l'upgrade di Apigee hybrid alla versione 1.13 o successiva con un gestore dei certificati personalizzato, apporta le seguenti modifiche dopo i passaggi descritti in Prepararsi all'upgrade dei grafici Helm e prima di installare i grafici Helm di Apigee hybrid:

  1. Apporta le seguenti modifiche al file overrides.yaml per comunicare all'operatore dove trovare le risorse correlate a cert-manager e per consentirgli di utilizzare ClusterIssuer di cert-manager personalizzato.
    certManager:
      namespace: APIGEE_NAMESPACE
    
    ao:
      certManagerCAIssuerEnabled: true
    
  2. Copia il secret apigee-ca esistente dallo spazio dei nomi cert-manager allo spazio dei nomi apigee:
    kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    
  3. Modifica il file apigee-ca.yaml per rimuovere il parametro dello spazio dei nomi che lo identifica come cert-manager.
  4. Applica il segreto apigee-ca allo spazio dei nomi apigee con kubectl apply:
    kubectl -n APIGEE_NAMESPACE apply -f apigee-ca.yaml

Eseguire il rollback di un upgrade di Apigee hybrid

Se devi eseguire il rollback a una versione precedente di Apigee Hybrid, segui le istruzioni riportate in Eseguire il rollback a una versione precedente.

Eseguire il rollback e la disinstallazione di cert-manager personalizzato

Esegui il rollback di cert-manager personalizzato

Per eseguire il rollback del gestore dei certificati personalizzato, svolgi i seguenti passaggi:

  1. Disinstalla la release Helm utilizzando il seguente comando:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. Installa il normale cert-manager (non personalizzato) utilizzando il metodo che preferisci. Assicurati di utilizzare la versione CRD corrispondente. Ad esempio, se utilizzi il metodo kubectl per installare cert-manager, verranno aggiornati i CRD a una versione corrispondente, poiché il payload includerà anche i CRD. Assicurati che il metodo di installazione impiegato includa i CRD.

Disinstalla il gestore dei certificati personalizzato

Per disinstallare il gestore dei certificati personalizzato:

  1. Disinstalla la release Helm utilizzando il seguente comando:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. Elimina i CRD con i seguenti comandi:
    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)

Il grafico Helm supporta le sostituzioni in base alle esigenze, consentendoti di utilizzare un file di sostituzioni in base alle esigenze durante la procedura di installazione o di upgrade. Per evitare confusione, ti consigliamo di utilizzare un nome file come cert-manager-overrides.yaml.

Consulta la documentazione di cert-manager per tutte le configurazioni di override di cert-manager supportate.

Configurazioni comuni di cert-manager

Gli esempi riportati di seguito mostrano come eseguire alcune configurazioni comuni di cert-manager in Apigee hybrid.

Sostituire le immagini

Di seguito è riportato un esempio di sostituzione delle immagini con imagepullsecrets se devi ospitare l'immagine in privato.

# 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 e affinità nodo

Nell'installazione di Apigee Hybrid, devi utilizzare nodi separati per i pod Cassandra e altri pod. Se vuoi eseguire cert-manager nel pool di nodi non correlato a Cassandra, puoi utilizzare l'affinità dei nodi:

# 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

Tolleranza

Puoi anche fornire tolleranze, come mostrato nell'esempio seguente:

# 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: []