Use um cert-manager personalizado

GA privado: use um cert-manager personalizado com o Apigee hybrid

Esta funcionalidade é oferecida como GA privada para a versão 1.13 do Apigee Hybrid.

Esta funcionalidade dá-lhe a opção de instalar um cert-manager personalizado para o Apigee hybrid com uma configuração relacionada com o controlo de acesso baseado em funções (RBAC) modificada através de autorizações restritivas.

Antes de começar

Antes de avançar com os passos de instalação, transfira o gráfico Helm através dos seguintes 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 o cert-manager personalizado

A configuração de um cert-manager personalizado requer os seguintes passos:

  1. Instalação recente de um cert-manager personalizado
  2. Atualize para o cert-manager personalizado

Instalação nova de um cert-manager personalizado

Para fazer uma nova instalação de um cert-manager personalizado para utilização com o Apigee hybrid, conclua os seguintes passos:

  1. Instale as CRDs através do kubectl com os seguintes 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. Instale o componente cert-manager através do gráfico Helm.
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE

    Posteriormente, quando a nova versão do gráfico estiver disponível, pode atualizá-lo com o helm upgrade:

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

Atualize para o cert-manager personalizado

Para migrar de um cert-manager não personalizado existente para uma versão personalizada, siga estes passos. Só pode executar um cert-manager no cluster de cada vez.

  1. Desative os webhooks existentes e atualize a implementação para ter 0 réplicas para uma migração perfeita:
      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. Instale os CRDs:
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERION}/cert-manager.crds.yaml
  3. Instale o cert-manager personalizado:
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE
  4. Quando a instalação estiver concluída, pode eliminar o cert-manager instalado anteriormente.

Instalar ou atualizar o Apigee Hybrid com um cert-manager personalizado

A instalação ou a atualização do híbrido com um cert-manager personalizado requer as seguintes alterações aos procedimentos de instalação ou atualização.

Alterações à instalação do Apigee Hybrid

Quando instalar o Apigee hybrid v1.13 ou superior com um gestor de certificados personalizado, faça a seguinte alteração no ficheiro overrides.yaml antes de instalar os componentes do Apigee hybrid no passo 10: instale o Apigee hybrid com o Helm.

Atualize o ficheiro overrides.yaml para notificar o operador onde encontrar os recursos relacionados com o cert-manager e permitir que o operador use o emissor do cert-manager personalizado.

certManager:
  namespace: APIGEE_NAMESPACE

ao:
  certManagerCAIssuerEnabled: true

Alterações ao processo de atualização do Apigee Hybrid

Quando atualizar o Apigee hybrid para a versão 1.13 ou superior com um gestor de certificados personalizado, faça as seguintes alterações após os passos em Prepare-se para a atualização dos gráficos Helm e antes de instalar os gráficos Helm do Apigee hybrid:

  1. Faça as seguintes alterações no ficheiro overrides.yaml para notificar o operador onde encontrar os recursos relacionados com o cert-manager e permitir que o operador use o ClusterIssuer do cert-manager personalizado.
    certManager:
      namespace: APIGEE_NAMESPACE
    
    ao:
      certManagerCAIssuerEnabled: true
    
  2. Copie o segredo apigee-ca existente do espaço de nomes cert-manager para o seu espaço de nomes apigee:
    kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    
  3. Edite o ficheiro apigee-ca.yaml para remover o parâmetro de espaço de nomes que identifica o espaço de nomes como cert-manager.
  4. Aplique o segredo apigee-ca ao seu espaço de nomes do Apigee com kubectl apply:
    kubectl -n APIGEE_NAMESPACE apply -f apigee-ca.yaml

Reverter uma atualização do Apigee Hybrid

Se precisar de reverter para uma versão anterior do Apigee Hybrid, siga as instruções em Reverter para uma versão anterior.

Reverter e desinstalar o cert-manager personalizado

Reverta o cert-manager personalizado

Para reverter o cert-manager personalizado, siga os passos seguintes:

  1. Desinstale a versão do Helm com o seguinte comando:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. Instale o cert-manager normal (não personalizado) através do seu método preferido. Certifique-se de que usa a versão dos CRDs correspondente. Por exemplo, se estiver a usar o método kubectl para instalar o cert-manager, este atualiza os CRDs para uma versão correspondente, uma vez que a carga útil também inclui CRDs. Certifique-se de que o método de instalação que usa inclui os CRDs.

Desinstale o cert-manager personalizado

Para desinstalar o cert-manager personalizado, siga estes passos:

  1. Desinstale a versão do Helm com o seguinte comando:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. Elimine os CRDs com os seguintes 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

Infraestrutura como código (overrides.yaml)

O gráfico Helm suporta substituições conforme necessário, o que lhe permite usar um ficheiro de substituições conforme necessário durante o processo de instalação ou atualização. Para evitar confusões, recomendamos que use um nome de ficheiro como cert-manager-overrides.yaml.

Consulte a documentação do cert-manager para ver todas as configurações de substituição do cert-manager suportadas.

Configurações comuns do cert-manager

Os exemplos seguintes mostram como realizar algumas configurações comuns do cert-manager no Apigee hybrid.

Substitua imagens

Segue-se um exemplo de substituição de imagens juntamente com imagepullsecrets se precisar de alojar a imagem 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 e afinidade de nós

Na instalação do Apigee Hybrid, tem de usar nós separados para os pods do Cassandra e outros pods. Se quiser executar o cert-manager no conjunto de nós não relacionado com o Cassandra, pode usar a afinidade de nós:

# 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

Tolerâncias

Também pode fornecer tolerâncias, conforme mostrado no exemplo seguinte:

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