Usar un cert-manager personalizado

GA privada: usar un cert-manager personalizado con Apigee hybrid

Esta función se ofrece como GA privada para la versión 1.13 de Apigee hybrid.

Esta función te ofrece 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) que usa permisos restrictivos.

Antes de empezar

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

Configurar cert-manager personalizado

Para configurar un cert-manager personalizado, debes seguir estos pasos:

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

Instalación nueva de un cert-manager personalizado

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

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

    Después, cuando esté disponible la nueva versión del gráfico, podrás actualizarlo con helm upgrade:

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

Actualizar a cert-manager personalizado

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

  1. Inhabilita los webhooks que ya tengas y actualiza la implementación para que tenga 0 réplicas y así la migración sea fluida:
      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 los CRDs:
    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 haya completado la instalación, puedes eliminar el gestor de certificados que hayas instalado anteriormente.

Instalar o actualizar Apigee hybrid con un cert-manager personalizado

Para instalar o actualizar una configuración híbrida con un gestor de certificados personalizado, es necesario hacer 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 gestor de certificados personalizado, haz el siguiente cambio en el archivo overrides.yaml antes de instalar los componentes de Apigee Hybrid en el paso 10: Instalar Apigee Hybrid con Helm.

Actualiza tu archivo overrides.yaml para notificar al operador dónde se encuentran los recursos relacionados con cert-manager y permitir que el operador use el emisor de cert-manager personalizado.

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 posterior con un gestor de certificados personalizado, haz los siguientes cambios después de seguir los pasos de Preparar la actualización de los gráficos de Helm y antes de Instalar los gráficos de Helm de Apigee hybrid:

  1. Haz los siguientes cambios en el archivo overrides.yaml para indicar al operador dónde encontrar los recursos relacionados con cert-manager y permitir que el operador use el ClusterIssuer personalizado de cert-manager.
    certManager:
      namespace: APIGEE_NAMESPACE
    
    ao:
      certManagerCAIssuerEnabled: true
    
  2. Copia el secreto apigee-ca del espacio de nombres cert-manager en tu espacio de nombres 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 identifica el espacio de nombres 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

Revertir una actualización de Apigee Hybrid

Si necesitas restaurar una versión anterior de Apigee hybrid, sigue las instrucciones que se indican en Restaurar una versión anterior.

Deshacer la instalación y desinstalar cert-manager personalizado

Restaurar 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 cert-manager normal (no personalizado) con el método que prefieras. Asegúrate de usar la versión de CRDs correspondiente. Por ejemplo, si usas el método kubectl para instalar cert-manager, se actualizarán los CRDs a la versión correspondiente, ya que la carga útil también incluirá CRDs. Asegúrate de que el método de instalación que utilices incluya los CRDs.

Desinstalar el gestor de certificados personalizado

Para desinstalar el gestor de certificados personalizado, sigue estos pasos:

  1. Desinstala la versión de Helm con el siguiente comando:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. Elimina los 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 gráfico de Helm admite anulaciones según sea necesario, lo que te permite usar un archivo de anulaciones durante el proceso de instalación o actualización. Para evitar confusiones, te recomendamos que uses un nombre de archivo como cert-manager-overrides.yaml.

Consulta la documentación de cert-manager para ver todas las configuraciones de sustitución de cert-manager admitidas.

Configuraciones habituales de cert-manager

En los siguientes ejemplos se muestra cómo llevar a cabo algunas configuraciones comunes de cert-manager en Apigee hybrid.

Anular imágenes

A continuación, se muestra un ejemplo de cómo sustituir 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 independientes para los pods de Cassandra y otros pods. Si quieres ejecutar cert-manager en el grupo de nodos que no está 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: []