인그레스 mTLS CA 인증서가 잘못됨

ApigeeApigee Hybrid 문서입니다.
이 주제에 해당하는 Apigee Edge 문서가 없습니다.

증상

apigee 네임스페이스의 리소스를 보면 ReasonAIS_INGRESS_MTLS_CA_CERT_INVALIDApigeeIssue가 표시됩니다.

오류 메시지

kubectl -n apigee get apigeeissues를 실행하면 다음과 같은 오류가 표시됩니다.

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

가능한 원인

원인 설명
인그레스 mTLS CA 인증서가 PEM으로 인코딩되지 않음 구성된 인그레스 mTLS CA 인증서는 PEM으로 인코딩되지 않았습니다.
인그레스 mTLS CA 인증서의 형식이 잘못됨 구성된 인그레스 mTLS CA 인증서의 형식이 잘못되었습니다.

원인: 인그레스 mTLS CA 인증서가 PEM으로 인코딩되지 않음

ApigeeRouteConfig에서 참조하는 Kubernetes 보안 비밀에 저장된 인그레스 mTLS CA 인증서에 PEM 인코딩 텍스트 블록이 없거나 형식이 잘못되었습니다.

진단

다음 명령어를 실행합니다.

kubectl -n apigee describe apigeeissue ISSUE_NAME

여기서 ISSUE_NAME은 마이그레이션의 이름입니다. 예를 들면 ca-cert-invalid-my-org-my-virtualhost입니다.

출력은 다음과 비슷하게 표시됩니다.

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

Spec.Details의 콘텐츠는 PEM으로 인코딩되지 않은 인그레스 mTLS CA 인증서가 포함된 Kubernetes 보안 비밀을 참조하는 ApigeeRouteConfig의 이름을 설명합니다.

해결 방법

  1. kubectl describe를 사용하여 PEM으로 인코딩되지 않은 인그레스 mTLS CA 인증서가 있는 ApigeeRouteConfig의 이름을 표시합니다.

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    여기서 ISSUE_NAME은 마이그레이션의 이름입니다. 예를 들면 ca-cert-invalid-my-org-my-virtualhost입니다.

    이 예시에서 ApigeeRouteConfig my-org-my-virtualhost는 보안 비밀 my-org-my-virtualhost를 참조합니다.

  2. ApigeeRouteConfig에서 virtualhost 이름을 확인합니다.

    ApigeeRouteConfig의 이름은 <Apigee organization>-<virtualhost name> 형식입니다.

    이 예시에서 my-org는 Apigee 조직이고 virtualhost 이름은 my-virtualhost입니다.

  3. overrides.yaml에서 해당 virtualhost를 찾습니다.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. caCertPath에 선언된 경로를 통해 제공된 파일의 콘텐츠의 유효성을 검사합니다. 콘텐츠에 필요한 시작 및 종료 인증서 블록이 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    ... <contents omitted> ...
    eWJyaWQuZTJlLmFwaWdlZWtzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
    MMM=
    -----END CERTIFICATE-----
  5. 파일의 콘텐츠와 형식이 수정되면 변경사항을 virtualhost에 적용합니다.

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

원인: 인그레스 mTLS CA 인증서의 형식이 잘못됨

ApigeeRouteConfig에서 참조하는 Kubernetes 보안 비밀에 저장된 인그레스 mTLS CA 인증서의 형식이 잘못되었습니다.

진단

다음 명령어를 실행합니다.

kubectl -n apigee describe apigeeissue ISSUE_NAME

여기서 ISSUE_NAME은 마이그레이션의 이름입니다. 예를 들면 ca-cert-invalid-my-org-my-virtualhost입니다.

출력은 다음과 비슷하게 표시됩니다.

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

Spec.Details의 콘텐츠는 형식이 잘못되어 파싱할 수 없는 인그레스 mTLS CA 인증서가 포함된 Kubernetes 보안 비밀을 참조하는 ApigeeRouteConfig의 이름을 설명합니다.

해결 방법

  1. kubectl describe를 사용하여 잘못된 형식의 인그레스 mTLS CA 인증서가 있는 ApigeeRouteConfig의 이름을 표시합니다.

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    여기서 ISSUE_NAME은 마이그레이션의 이름입니다. 예를 들면 ca-cert-invalid-my-org-my-virtualhost입니다.

    이 예시에서 ApigeeRouteConfig my-org-my-virtualhost는 보안 비밀 my-org-my-virtualhost를 참조합니다.

  2. ApigeeRouteConfig에서 virtualhost 이름을 확인합니다.

    ApigeeRouteConfig의 이름은 <Apigee organization>-<virtualhost name> 형식입니다.

    이 예시에서 my-org는 Apigee 조직이고 virtualhost 이름은 my-virtualhost입니다.

  3. overrides.yaml에서 해당 virtualhost를 찾습니다.

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      caCertPath: ./certs/ca.pem
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. caCertPath에 선언된 경로를 통해 제공된 파일의 콘텐츠의 유효성을 검사합니다. 콘텐츠에 전체 인증서가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.

    -----BEGIN CERTIFICATE-----
    MIIDYTCCAkmgAwIBAgIUSXeU0pQYRFzYlqZpKhNNJdBLFBIwDQYJKoZIhvcNAQEL
    BQAwQDE+MDwGA1UEAww1bWF4bWlsbGlvbi1oeWJyaWQtc3RhZ2luZy1kZXYuaHli
    ... <contents omitted> ...
    0TPPaik8U9dtFXMGT1DJkjPRPO0Jw5rlU8DKlNA/Kkv52aKJZNwB/cwmvoa/BFji
    PIPa9wY=
    -----END CERTIFICATE-----
  5. 파일의 콘텐츠와 형식이 수정되면 변경사항을 virtualhost에 적용합니다.

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

진단 정보 수집 필요

위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Apigee 지원팀에 연락합니다.

  1. Google Cloud 프로젝트 ID
  2. Apigee Hybrid 조직의 이름
  3. ApigeeIssueSpec.Details 필드
  4. (선택사항) 영향을 받는 virtualhost에 대해 caCertPath에서 참조하는 파일