Utilizzare un cert-manager personalizzato

GA privata: utilizza un cert-manager personalizzato con Apigee hybrid

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

Questa funzionalità ti offre la possibilità di installare un cert-manager personalizzato per Apigee Hybrid con una configurazione modificata del controllo dell'accesso basato sui ruoli (RBAC) utilizzando 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 cert-manager personalizzato richiede i seguenti passaggi:

  1. Installazione pulita di un cert-manager personalizzato
  2. Eseguire l'upgrade a cert-manager personalizzato

Installazione pulita 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 le 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 questi passaggi. Può essere eseguito un solo cert-manager nel cluster alla volta.

  1. Disattiva i webhook esistenti e aggiorna il deployment in modo che abbia 0 repliche per una migrazione senza interruzioni:
      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 cert-manager 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 cert-manager personalizzato

L'installazione o l'upgrade di ibrido 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 v1.13 o versioni successive con un gestore di 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 consentire all'operatore di utilizzare l'emittente personalizzata di cert-manager.

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 successive con un gestore di certificati personalizzato, apporta le seguenti modifiche dopo i passaggi descritti in Preparati per l'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 consentire all'operatore di utilizzare ClusterIssuer personalizzato di cert-manager.
    certManager:
      namespace: APIGEE_NAMESPACE
    
    ao:
      certManagerCAIssuerEnabled: true
    
  2. Copia il secret apigee-ca esistente dallo spazio dei nomi cert-manager al tuo 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 secret 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 disinstallare cert-manager personalizzato

Esegui il rollback di cert-manager personalizzato

Per eseguire il rollback di cert-manager personalizzato, segui questi passaggi:

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

Disinstalla cert-manager personalizzato

Per disinstallare cert-manager personalizzato:

  1. Disinstalla la release Helm utilizzando il seguente comando:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. Elimina le 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 (override.yaml)

Il grafico Helm supporta gli override in base alle esigenze, consentendoti di utilizzare un file di override in base alle esigenze durante il processo di installazione o 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 seguenti mostrano come eseguire alcune configurazioni comuni di cert-manager in Apigee hybrid.

Sostituisci immagini

Di seguito è riportato un esempio di override delle immagini insieme a 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

Tolleranze

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