Incompatibilidade do certificado de Ingress

Esta é a documentação da Apigee e da Apigee híbrida.
Não há documentação equivalente do Apigee Edge para esse tópico.

Sintoma

Um ApigeeIssue com Reason AIS_INGRESS_CERT_MISMATCH é mostrado ao visualizar recursos no namespace apigee.

Mensagens de erro

Depois de executar kubectl -n apigee get apigeeissues, o seguinte erro é exibido:

NAME                                          SEVERITY   REASON                      DOCUMENTATION                                                                           AGE
ingress-cert-mismatch-my-org-my-virtualhost   ERROR      AIS_INGRESS_CERT_MISMATCH   https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_CERT_MISMATCH   5h18m

Causa: incompatibilidade do certificado de Ingress

A chave privada e o certificado armazenado no secret do Kubernetes referenciado por um ApigeeRouteConfig não são compatíveis.

Diagnóstico

Execute este comando:

kubectl -n apigee describe apigeeissue ISSUE_NAME

Em que ISSUE_NAME é o nome do problema. Por exemplo, ingress-cert-mismatch-my-org-my-virtualhost.

Algo semelhante ao seguinte é retornado:

Name:         ingress-cert-mismatch-my-org-my-virtualhost
Namespace:    apigee
Labels:       ais-reason=AIS_INGRESS_CERT_MISMATCH
Annotations:  <none>
API Version:  apigee.cloud.google.com/v1alpha1
Kind:         ApigeeIssue
Metadata:
  Creation Timestamp:  2023-06-12T17:03:43Z
  Generation:          1
  Owner References:
    API Version:     apigee.cloud.google.com/v1alpha2
    Kind:            ApigeeOrganization
    Name:            my-org
    UID:             7e83a52c-ce00-4bed-98be-55835ada1817
  Resource Version:  3281563
  UID:               adc775c2-376d-4bf9-9860-500b2b2b8273
Spec:
  Details:        Ingress cert and private key in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" do not match
  Documentation:  https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_CERT_MISMATCH
  Reason:         AIS_INGRESS_CERT_MISMATCH
  Severity:       ERROR
Events:           <none>
Spec:
  Details:        Ingress cert and private key in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" do not match

O conteúdo de Spec.Details explica o nome do ApigeeRouteConfig, que se refere ao secret do Kubernetes que contém o certificado de Ingress e a chave privada.

Resolução

  1. Use kubectl describe para exibir o nome do ApigeeRouteConfig que tem o certificado de Ingress e a chave incompatíveis:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    Em que ISSUE_NAME é o nome do problema. Por exemplo, ingress-cert-mismatch-my-org-my-virtualhost.

    Neste exemplo, o ApigeeRouteConfig my-org-my-virtualhost referencia o secret my-org-my-virtualhost.

  2. Determine o nome do virtualhost no ApigeeRouteConfig.

    O nome do ApigeeRouteConfig está no formato: <Apigee organization>-<virtualhost name>.

    Neste exemplo, my-org é a organização da Apigee, e o nome do virtualhost é my-virtualhost.

  3. Encontre o virtualhost correspondente no seu overrides.yaml.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Confira se os arquivos do certificado e da chave em uso são compatíveis.

    Usando o sslCertPath e o sslKeyPath da etapa anterior, valide a correspondência das somas de MD5 usando openssl:

    openssl x509 -noout -modulus -in SSL_CERT_PATH | openssl md5
    openssl rsa -noout -modulus -in SSL_KEY_PATH | openssl md5

    • Em que SSL_CERT_PATH é o sslCertPath da etapa anterior. Por exemplo, ./certs/vhost.pem.
    • Em que SSL_KEY_PATH é o sslKeyPath da etapa anterior. Por exemplo, ./certs/vhost.key.

    A saída dos dois comandos acima precisa ser correspondente:

    openssl x509 -noout -modulus -in ./certs/vhost.pem | openssl md5
    MD5(stdin)= 40ba189dbe9d6fbfbdde1a8ef803d2d4
    openssl rsa -noout -modulus -in ./certs/vhost.key | openssl md5
    MD5(stdin)= 40ba189dbe9d6fbfbdde1a8ef803d2d4
  5. Se a saída dos comandos anteriores não for correspondente, use um dos métodos a seguir para corrigir o problema:

    • Atualize o sslCertPath e o sslKeyPath do virtualhost para apontar para os caminhos de arquivo corretos.
    • Corrija o conteúdo do arquivo sslCertPath ou sslKeyPath para que contenha o certificado e o par de chaves correspondentes corretos.
  6. Aplique as mudanças ao virtualhost:

    Helm

    helm upgrade ENV_GROUP_NAME apigee-virtualhost/ \
      --namespace apigee \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides.yaml

    apigeectl

    apigeectl apply -f overrides.yaml --settings virtualhosts

É necessário coletar informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, reúna as seguintes informações de diagnóstico e entre em contato com o Suporte da Apigee:

  1. O ID do projeto do Google Cloud.
  2. O nome da organização da Apigee híbrida.
  3. O campo Spec.Details do ApigeeIssue.
  4. (Opcional) Arquivos referenciados por sslCertPath e sslKeyPath para o virtualhost afetado.