Usa cert-manager personalizado

DG privada: Usa un cert-manager personalizado con Apigee Hybrid

Esta función se ofrece como una DG privada para la versión híbrida 1.13 de Apigee.

Esta función te brinda la opción de instalar un cert-manager personalizado para Apigee Hybrid con una configuración modificada relacionada con el control de acceso basado en roles (RBAC) a través de permisos restringidos.

Antes de comenzar

Antes de continuar con los pasos de instalación, descarga el gráfico de Helm con los siguientes comandos:

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

Configura el cert-manager personalizado

Para configurar un cert-manager personalizado, sigue estos pasos:

  1. Instalación nueva de un cert-manager personalizado
  2. Actualiza a cert-manager personalizado

Instalación nueva de un cert-manager personalizado

Para realizar una instalación nueva de un cert-manager personalizado para usarlo con Apigee Hybrid, sigue estos pasos:

  1. Instala las CRDs usando kubectl con los siguientes comandos:
    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. Instala el componente de cert-manager con el gráfico de Helm.
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE

    Luego, cuando esté disponible la versión nueva del gráfico, puedes actualizarlo con helm upgrade:

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

Actualiza a cert-manager personalizado

Para migrar de un cert-manager existente no personalizado a una versión personalizada, sigue estos pasos. Solo puede ejecutarse un cert-manager en el clúster a la vez.

  1. Inhabilita los webhooks existentes y actualiza la implementación para que tenga 0 réplicas y realizar una migración sin problemas:
      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. Instala las CRD:
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERION}/cert-manager.crds.yaml
  3. Instala el cert-manager personalizado:
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE
  4. Una vez que se complete la instalación, puedes borrar el cert-manager instalado anteriormente.

Instala o actualiza Apigee Hybrid con un cert-manager personalizado

La instalación o actualización de hybrid con un cert-manager personalizado requiere los siguientes cambios en los procedimientos de instalación o actualización.

Cambios en la instalación de Apigee Hybrid

Cuando instales Apigee Hybrid v1.13 o una versión posterior con un administrador de certificados personalizado, realiza el siguiente cambio en tu archivo overrides.yaml antes de instalar los componentes de Apigee Hybrid en el Paso 10: Instala Apigee Hybrid con Helm.

Actualiza tu archivo overrides.yaml para notificarle al operador dónde encontrar los recursos relacionados con cert-manager y habilitarlo para que use la entidad emisora personalizada de cert-manager.

certManager:
  namespace: APIGEE_NAMESPACE

ao:
  certManagerCAIssuerEnabled: true

Cambios en el proceso de actualización de Apigee Hybrid

Cuando actualices Apigee Hybrid a la versión 1.13 o una posterior con un administrador de certificados personalizado, realiza los siguientes cambios después de los pasos que se indican en Prepárate para la actualización de los gráficos de Helm y antes de instalar los gráficos de Helm de Apigee Hybrid:

  1. Realiza los siguientes cambios en tu archivo overrides.yaml para notificarle al operador dónde encontrar los recursos relacionados con cert-manager y permitir que el operador use el ClusterIssuer de cert-manager personalizado.
    certManager:
      namespace: APIGEE_NAMESPACE
    
    ao:
      certManagerCAIssuerEnabled: true
    
  2. Copia el secreto apigee-ca existente del espacio de nombres de cert-manager a tu espacio de nombres de Apigee:
    kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    
  3. Edita el archivo apigee-ca.yaml para quitar el parámetro de espacio de nombres que lo identifica como cert-manager.
  4. Aplica el secreto apigee-ca a tu espacio de nombres de Apigee con kubectl apply:
    kubectl -n APIGEE_NAMESPACE apply -f apigee-ca.yaml

Cómo revertir una actualización de Apigee Hybrid

Si necesitas revertir a una versión anterior de Apigee Hybrid, sigue las instrucciones que se indican en Cómo revertir a una versión anterior.

Revierte y desinstala cert-manager personalizado

Revierte el cert-manager personalizado

Para revertir el cert-manager personalizado, sigue estos pasos:

  1. Desinstala la versión de Helm con el siguiente comando:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. Instala el cert-manager normal (no personalizado) con tu método preferido. Asegúrate de usar la versión correspondiente de las CRD. Por ejemplo, si usas el método de kubectl para instalar cert-manager, se actualizarán las CRD a una versión correspondiente, ya que la carga útil también incluirá CRD. Asegúrate de que el método de instalación que uses incluya las CRD.

Desinstala el cert-manager personalizado

Para desinstalar el cert-manager personalizado, sigue estos pasos:

  1. Desinstala la versión de Helm con el siguiente comando:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. Borra las CRDs con los siguientes comandos:
    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

Infraestructura como código (overrides.yaml)

El chart de Helm admite anulaciones según sea necesario, lo que te permite usar un archivo de anulaciones cuando lo necesites durante el proceso de instalación o actualización. Para evitar confusiones, te recomendamos que utilices un nombre de archivo como cert-manager-overrides.yaml.

Consulta la documentación de cert-manager para ver todas las configuraciones de anulación de cert-manager compatibles.

Configuraciones comunes de cert-manager

En los siguientes ejemplos, se muestra cómo realizar algunas configuraciones comunes de cert-manager en Apigee Hybrid.

Anula imágenes

El siguiente es un ejemplo de anulación de imágenes junto con imagepullsecrets si necesitas alojar la imagen de forma privada.

# 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 y afinidad de nodos

En la instalación de Apigee Hybrid, debes usar nodos separados para los Pods de Cassandra y otros Pods. Si deseas ejecutar el cert-manager en el grupo de nodos no relacionado con Cassandra, puedes usar la afinidad de nodos:

# 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

Tolerancias

También puedes proporcionar tolerancias, como se muestra en el siguiente ejemplo:

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