Certificado de CA de mTLS de entrada inválido

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_MTLS_CA_CERT_INVALID é exibido ao visualizar recursos no namespace apigee.

Mensagens de erro

Depois de executar kubectl -n apigee get apigeeissues, um erro como este é exibido:

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

Causas possíveis

Causa Descrição
O certificado de CA do mTLS da entrada não é codificado em PEM O certificado de CA de mTLS de entrada configurado não é codificado em PEM.
O certificado de CA da entrada mTLS está incorreto O certificado de CA de mTLS de entrada configurado está incorreto.

Causa: o certificado de CA de mTLS de entrada não é codificado em PEM

O certificado de CA de entrada mTLS armazenado no secret do Kubernetes referenciado por ApigeeRouteConfig não tem os blocos de texto de codificação PEM (ou eles estão corrompidos).

Diagnóstico

Execute este comando:

kubectl -n apigee describe apigeeissue ISSUE_NAME

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

A saída será parecida com esta:

Name:         ca-cert-invalid-my-org-my-virtualhost
Namespace:    apigee
Labels:       ais-reason=AIS_INGRESS_MTLS_CA_CERT_INVALID
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:        CA certificate in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" is not PEM encoded
  Documentation:  https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_MTLS_CA_CERT_INVALID
  Reason:         AIS_INGRESS_MTLS_CA_CERT_INVALID
  Severity:       ERROR
Events:           <none>
Spec:
  Details:        CA certificate in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" is not PEM encoded

O conteúdo de Spec.Details explica o nome do ApigeeRouteConfig que se refere ao secret do Kubernetes que contém o certificado de CA da mTLS de entrada, que não é codificado em PEM.

Resolução

  1. Use kubectl describe para exibir o nome da ApigeeRouteConfig que tem o certificado de CA de mTLS de entrada não codificado em PEM:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    Em que ISSUE_NAME é o nome do problema. Por exemplo, ca-cert-invalid-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
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Valide o conteúdo do arquivo fornecido pelo caminho declarado em caCertPath. Verifique se o conteúdo tem os blocos de certificado inicial e final necessários. Exemplo:

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    ... <contents omitted> ...
    eWJyaWQuZTJlLmFwaWdlZWtzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
    MMM=
    -----END CERTIFICATE-----
  5. Depois que o conteúdo e o formato do arquivo forem corrigidos, aplique a alteração ao virtualhost:

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

Causa: o certificado de CA de entrada mTLS está incorreto

O certificado de CA de entrada mTLS armazenado no secret do Kubernetes referenciado por ApigeeRouteConfig está incorreto.

Diagnóstico

Execute este comando:

kubectl -n apigee describe apigeeissue ISSUE_NAME

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

A saída será parecida com esta:

Name:         ca-cert-invalid-my-org-my-virtualhost
Namespace:    apigee
Labels:       ais-reason=AIS_INGRESS_MTLS_CA_CERT_INVALID
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:        CA certificate in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" is invalid
  Documentation:  https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_MTLS_CA_CERT_INVALID
  Reason:         AIS_INGRESS_MTLS_CA_CERT_INVALID
  Severity:       ERROR
Events:           <none>
Spec:
  Details:        CA certificate in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" is invalid

O conteúdo de Spec.Details explica o nome do ApigeeRouteConfig que se refere ao secret do Kubernetes que contém o certificado de CA da mTLS que está incorreto e não foi analisado.

Resolução

  1. Use kubectl describe para exibir o nome da ApigeeRouteConfig que tem o certificado de CA de entrada mTLS incorreto:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    Em que ISSUE_NAME é o nome do problema. Por exemplo, ca-cert-invalid-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
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Valide o conteúdo do arquivo fornecido pelo caminho declarado em caCertPath. Verifique se o certificado está inteiro no conteúdo. Exemplo:

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    BQAwQDE+MDwGA1UEAww1bWF4bWlsbGlvbi1oeWJyaWQtc3RhZ2luZy1kZXYuaHli
    ... <contents omitted> ...
    0TPPaik8U9dtFXMGT1DJkjPRPO0Jw5rlU8DKlNA/Kkv52aKJZNwB/cwmvoa/BFji
    PIPa9wY=
    -----END CERTIFICATE-----
  5. Depois que o conteúdo e o formato do arquivo forem corrigidos, aplique a alteração ao virtualhost:

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

É 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) Arquivo referenciado por caCertPath para o virtualhost afetado.