Apigee 및 Apigee Hybrid 문서입니다.
Apigee Edge 문서 보기
증상
다음 오류 메시지가 표시되면서 API 프록시 배포가 실패합니다.
오류 메시지
apigee-webhook-service.apigee-system.svc
서비스의 TLS 인증서가 만료되었거나 아직 유효하지 않으면 apigee-watcher
로그에 다음 오류 메시지가 표시됩니다.
{"level":"error","ts":1687991930.7745812,"caller":"watcher/watcher.go:60", "msg":"error during watch","name":"ingress","error":"INTERNAL: INTERNAL: failed to update ApigeeRoute [org-env]-group-84a6bb5, namespace apigee: Internal error occurred: failed calling webhook \"mapigeeroute.apigee.cloud.google.com\": Post \"https://apigee-webhook-service.apigee-system.svc:443/mutate-apigee-cloud-google-com-v1alpha1-apigeeroute?timeout=30s\": x509: certificate has expired or is not yet valid: current time 2023-06-28T22:38:50Z is after 2023-06-17T17:14:13Z, INTERNAL: failed to update ApigeeRoute [org-env]-group-e7b3ff6, namespace apigee
가능한 원인
원인 | 설명 |
---|---|
apigee-serving-cert를 찾을 수 없음 | apigee-system 네임스페이스에 apigee-serving-cert 가 없으면 이 문제가 발생할 수 있습니다. |
apigee-serving-cert 를 갱신하기 위해 중복 인증서 요청이 생성됨 |
apigee-serving-cert 인증서를 갱신하기 위해 중복 인증서 요청이 생성된 경우 apigee-serving-cert 인증서가 갱신되지 않을 수 있습니다.
|
cert-manager가 비정상임 |
cert-manager 가 정상이 아니면 apigee-serving-cert 인증서가 갱신되지 않을 수 있습니다.
|
원인: apigee-serving-cert를 찾을 수 없음
진단
-
apigee-system
네임스페이스에서apigee-serving-cert
인증서 사용 가능 여부를 확인합니다.kubectl -n apigee-system get certificates apigee-serving-cert
이 인증서를 사용할 수 있으면 다음과 비슷한 출력이 표시됩니다.
NAME READY SECRET AGE apigee-serving-cert True webhook-server-cert 2d10h
-
apigee-system
네임스페이스에서 apigee-serving-cert 인증서를 찾을 수 없으면 이로 인해 이 문제가 발생할 수 있습니다.
해결 방법
-
apigee-serving-cert
는 Apigee Hybrid 설치 중에apigeectl init
명령어로 생성됩니다. 따라서 관련overrides.yaml
파일과 함께 명령어를 실행하여 다시 만듭니다.apigeectl init -f overrides/overrides.yaml
-
apigee-serving-cert
인증서가 생성되었는지 확인합니다.kubectl -n apigee-system get certificates apigee-serving-cert
원인: apigee-serving-cert를 갱신하기 위해 중복 인증서 요청이 생성됨
진단
-
cert-manager
컨트롤러 로그를 확인하고 다음과 유사한 오류 메시지가 반환되었는지 확인합니다.모든
cert-manager
포드를 나열합니다.kubectl -n cert-manager get pods
출력 예시는 다음과 같습니다.
NAME READY STATUS RESTARTS AGE cert-manager-66d9545484-772cr 1/1 Running 0 6d19h cert-manager-cainjector-7d8b6bd6fb-fpz6r 1/1 Running 0 6d19h cert-manager-webhook-669b96dcfd-6mnm2 1/1 Running 0 6d19h
cert-manager
컨트롤러 로그를 확인합니다.kubectl -n cert-manager logs cert-manager-66d9545484-772cr | grep "issuance is skipped until there are no more duplicates"
출력 예시는 다음과 같습니다.
1 controller.go:163] cert-manager/certificates-readiness "msg"="re-queuing item due to error processing" "error"="multiple CertificateRequests were found for the 'next' revision 3, issuance is skipped until there are no more duplicates" "key"="apigee-system/apigee-serving-cert"
다음과 유사한 오류 메시지가 표시되면
apigee-serving-cert
인증서가 갱신되지 않습니다. -
apigee-system
네임스페이스의 모든 인증서 요청을 나열하고 같은apigee-serving-cert
인증서 버전을 갱신하기 위해 인증서 요청이 여러 개 생성되었는지 확인합니다.kubectl -n apigee-system get certificaterequests
cert-manager에서 같은 certificate-revision을 사용하여 CertificateRequest 객체를 여러 개 생성함에서 이 문제와 관련된 cert-manager
문제를 참조하세요.
해결 방법
-
apigee-system
네임스페이스에서 모든 인증서 요청을 삭제합니다.kubectl -n apigee-system delete certificaterequests --all
-
중복 인증서 요청이 삭제되었고
apigee-system
네임스페이스의apigee-serving-cert
인증서에 인증서 요청 하나만 사용할 수 있는지 확인합니다.kubectl -n apigee-system get certificaterequests
-
apigee-serving-cert
인증서가 갱신되었는지 확인합니다.kubectl -n apigee-system get certificates apigee-serving-cert -o yaml
출력 예시는 다음과 같습니다.
apiVersion: cert-manager.io/v1 kind: Certificate metadata: creationTimestamp: "2023-06-26T13:25:10Z" generation: 1 name: apigee-serving-cert namespace: apigee-system resourceVersion: "11053" uid: e7718341-b3ca-4c93-a6d4-30cf70a33e2b spec: dnsNames: - apigee-webhook-service.apigee-system.svc - apigee-webhook-service.apigee-system.svc.cluster.local issuerRef: kind: Issuer name: apigee-selfsigned-issuer secretName: webhook-server-cert status: conditions: - lastTransitionTime: "2023-06-26T13:25:11Z" message: Certificate is up to date and has not expired observedGeneration: 1 reason: Ready status: "True" type: Ready notAfter: "2023-09-24T13:25:11Z" notBefore: "2023-06-26T13:25:11Z" renewalTime: "2023-08-25T13:25:11Z" revision: 1
원인: cert-manager가 비정상임
진단
-
cert-manager
네임스페이스의cert-manager
포드 상태를 확인합니다.kubectl -n cert-manager get pods
cert-manager
포드가 정상이면 모든cert-manager
포드의 ready가(1/1)
이고 상태는Running
이므로 그렇지 않으면 이 문제가 발생할 수 있습니다.NAME READY STATUS RESTARTS AGE cert-manager-59cf78f685-mlkvx 1/1 Running 0 15d cert-manager-cainjector-78cc865768-krjcp 1/1 Running 0 15d cert-manager-webhook-77c4fb46b6-7g9g6 1/1 Running 0 15d
-
cert-manager
는 여러 가지 이유로 실패할 수 있습니다.cert-manager
로그를 확인하여 실패 원인을 확인하고 그에 따라 해결하세요.한 가지 알려진 이유는
cert-manager
가 Kubernetes API와 통신할 수 없으면 실패한다는 것입니다. 이 경우 다음과 유사한 오류 메시지가 표시됩니다.E0601 00:10:27.841516 1 leaderelection.go:330] error retrieving resource lock kube-system/cert-manager-controller: Get "https://192.168.0.1:443/api/v1/namespaces/kube-system/configmaps/cert-manager-controller": dial tcp 192.168.0.1:443: i/o timeout
해결 방법
- Kubernetes 클러스터 상태를 확인하고 발견된 문제를 해결합니다. 클러스터 문제 해결을 참조하세요.
-
추가
cert-manager
문제 해결 정보는 문제 해결을 참조하세요.
진단 정보 수집 필요
위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Google Cloud Customer Care에 문의하세요.
- Google Cloud 프로젝트 ID
- Apigee Hybrid 조직
-
민감한 정보를 마스킹하는 Apigee Hybrid
overrides.yaml
파일 - 모든 네임스페이스의 Kubernetes 포드 상태:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
-
Kubernetes
cluster-info
덤프:# generate kubernetes cluster-info dump kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump # zip kubernetes cluster-info dump zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*