인그레스 인증서 불일치

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

증상

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

오류 메시지

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

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

원인: 인그레스 인증서 불일치

ApigeeRouteConfig에서 참조하는 Kubernetes 보안 비밀에 저장된 비공개 키와 인증서가 일치하지 않습니다.

진단

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

kubectl -n apigee describe apigeeissue ISSUE_NAME

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

다음과 비슷한 결과가 반환됩니다.

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

Spec.Details 콘텐츠는 인그레스 인증서와 비공개 키가 포함된 Kubernetes 보안 비밀을 참조하는 ApigeeRouteConfig의 이름을 설명합니다.

해결 방법

  1. kubectl describe를 사용하여 일치하지 않는 인그레스 인증서와 키가 있는 ApigeeRouteConfig의 이름을 표시합니다.

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    여기서 ISSUE_NAME은 마이그레이션의 이름입니다. 예를 들면 ingress-cert-mismatch-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
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. 사용 중인 인증서와 키 파일이 일치하는지 확인합니다.

    이전 단계의 sslCertPathsslKeyPath를 사용하고 openssl을 사용하여 MD5 합계가 일치하는지 확인합니다.

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

    • 여기서 SSL_CERT_PATH는 이전 단계의 sslCertPath입니다. 예를 들면 ./certs/vhost.pem입니다.
    • 여기서 SSL_KEY_PATH는 이전 단계의 sslKeyPath입니다. 예를 들면 ./certs/vhost.key입니다.

    위 두 명령어의 출력은 다음과 일치해야 합니다.

    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. 이전 명령어의 출력이 일치하지 않으면 다음 방법 중 하나를 사용하여 문제를 해결합니다.

    • 올바른 파일 경로를 가리키도록 virtualhost의 sslCertPathsslKeyPath를 업데이트합니다.
    • 올바르게 일치하는 인증서 및 키 쌍을 포함하도록 sslCertPath 또는 sslKeyPath 파일 콘텐츠를 수정합니다.
  6. 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

진단 정보 수집 필요

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

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