제한 시간 오류로 API 호출 실패

ApigeeApigee Hybrid 문서입니다.
Apigee Edge 문서 보기

증상

다음 증상 중 하나가 관찰될 수 있습니다.

  1. 클라이언트 애플리케이션에 Apigee Hybrid에 대한 API 호출의 응답으로 제한 시간 오류가 발생합니다.
  2. Apigee Hybrid 설치 중 클러스터에 구성(overrides.yaml)을 적용하는 동안 Error from server (invalid) 또는 The Job "apigee-resources-install" is invalid 와 같은 오류가 관찰됩니다.

오류 메시지

다음 오류 중 하나가 관찰될 수 있습니다.

API 호출에 대한 오류 응답

Apigee Hybrid에 대한 API 요청이 다음 오류 메시지와 함께 실패할 수 있습니다.

* Connection failed
* connect to 34.84.67.39 port 443 failed: Operation timed out
* Failed to connect to example.apis.com port 443: Operation timed out
* Closing connection 0
curl: (7) Failed to connect to example.apis.com port 443: Operation timed out

클러스터에 구성(overrides.yaml)을 적용할 때 관찰되는 오류

설치 중 클러스터에 구성(overrides.yaml 파일)을 적용할 때 다음 오류 중 하나가 관찰될 수 있습니다.

오류 1번

apigeectl init -f overrides/overrides.yaml

...
...
Error from server (Invalid): error when applying patch:
to:
Resource: "batch/v1, Resource=jobs", GroupVersionKind: "batch/v1, Kind=Job"
Name: "istio-init-crd-10-1.4.6", Namespace: "istio-system"
to:
Resource: "batch/v1, Resource=jobs", GroupVersionKind: "batch/v1, Kind=Job"
Name: "istio-init-crd-11-1.4.6", Namespace: "istio-system"
to:
Resource: "batch/v1, Resource=jobs", GroupVersionKind: "batch/v1, Kind=Job"
Name: "istio-init-crd-14-1.4.6", Namespace: "istio-system"

오류 2번

apigeectl init -f overrides/overrides.yaml

...
...
The Job "apigee-resources-install" is invalid: spec.template: Invalid value:
core.PodTemplateSpec{ObjectMeta:v1.ObjectMeta{Name:"apigee-resources-install",
GenerateName:"", Namespace:"", SelfLink:"", UID:"", ResourceVersion:"",
Generation:0,

가능한 원인

이러한 오류는 istio-ingressgateway 서비스가 pending 상태에 있고 아래 표시된 것처럼 외부 IP 주소에 바인딩될 수 없을 때 발생할 수 있습니다.

kubectl get services -n istio-system
NAME                      TYPE         CLUSTER-IP   EXTERNAL-IP  PORT(S)             AGE
istio-ingressgateway      LoadBalancer 10.198.5.104 <pending>    15020:31927/TCP,    12h
                                                                 80:31381/TCP,
                                                                 443:31391/TCP,
                                                                 31400:31401/TCP,
                                                                 15443:32623/TCP

istio-ingressgateway 서비스가 pending 상태가 되는 가능한 원인은 다음과 같습니다.

원인 설명
istio-system 네임스페이스에서 erroneous/pending 상태의 작업 istio-system 네임스페이스에서 incomplete/erroneous 작업은 istio-ingressgateway 서비스를 영구적으로 pending 상태로 만들고 외부 IP 주소에 바인딩될 수 없도록 만들 수 있습니다.
apigee-system 네임스페이스에서 erroneous/pending 상태의 apigee-resources-install 작업 apigee-system 네임스페이스에서 incomplete 작업은 istio- ingressgateway 서비스를 영구적으로 pending 상태로 만들고 외부 IP 주소에 바인딩될 수 없도록 만들 수 있습니다.
외부 부하 분산기에 할당된 잘못된 IP 주소 범위 잘못된 IP 주소 범위가 istio-operator.yaml 파일에 구성되어 istio-ingressgateway 서비스를 pending 상태로 만들고 설치 중 외부 IP 주소에 바인딩될 수 없도록 만들 수 있습니다.

원인: istio-system 네임스페이스에서 erroneous/pending 상태의 작업

진단

  1. 다음 명령어를 사용하여 istio-system 네임스페이스에서 작업의 상태를 확인합니다.
    kubectl get jobs -n istio-system
    
  2. 작업 상태는 complete여야 합니다. 작업 상태가 erroneous/pending 상태이면 이것이 문제의 원인입니다.

해결 방법

  1. 작업이 pending 또는 erroneous 상태이면 다음 명령어를 사용하여 이를 삭제합니다.
    kubectl -n istio-system delete job JOB_NAME_FROM_STEP_1
    
  2. overrides.yaml 파일을 적용하여 설치를 다시 실행합니다.
    apigeectl apply -f overrides.yaml
    

원인: apigee-system 네임스페이스의 apigee-resources-install 작업이 오류 상태일 수 있음

진단

  1. 다음 명령어를 사용하여 apigee-system 네임스페이스에서 작업의 상태를 확인합니다.
    kubectl get jobs -n apigee-system
    
  2. 작업 상태는 complete여야 합니다. 작업 상태가 erroneous/pending 상태이면 이것이 문제의 원인입니다. 다음 샘플 출력은 apigee-resources-install 작업이 성공적으로 완료된 것을 보여줍니다.
    kubectl get jobs  -n apigee-system
    NAME                       COMPLETIONS   DURATION   AGE
    apigee-resources-install   1/1           23s        16d
    

해결 방법

  1. 작업이 pending 또는 erroneous 상태이면 다음 명령어를 사용하여 이를 삭제합니다.
    kubectl -n apigee-system delete job JOB_NAME_FROM_STEP_1
    
  2. overrides.yaml 파일을 적용하여 설치를 다시 실행합니다.
    apigeectl apply -f overrides.yaml
    

원인: 외부 부하 분산기에 할당된 잘못된 IP 주소 범위

진단

  1. istio- operator.yaml 파일에서 부하 분산기에 대해 구성된 IP 주소를 확인합니다. 예를 들어 다음 스니펫은 istio-operator.yaml 파일에서 IP 주소가 구성된 위치를 보여줍니다.
    -name: istio-ingressgateway
      enabled: true
      k8s:
        service:
          type: LoadBalancer
         loadBalancerIP: 10.195.24.23
  2. istio-ingressgateway 서비스는 istio-operator.yaml 파일에서 유형별로 표시된 부하 분산기로 구성됩니다. ASM 설치 중 부하 분산기는 구성된 IP 주소로 생성되고 istio- ingressgateway 서비스와 통신하도록 연결됩니다. 따라서 구성된 IP 주소가 올바르고 부하 분산기에 대해 예약되어 있어야 합니다.
  3. 네트워크팀에 연락하여 loadBalancerIP에 대해 구성된 IP 주소가 올바른지 확인합니다. 올바르지 않으면 부하 분산기 서비스가 IP 주소에 바인딩할 수 없습니다. 이렇게 하면 istio-ingressgateway 서비스가 영구적으로 pending 상태가 됩니다.

해결 방법

  1. 네트워크 팀과 협력하여 istio- operator.yaml 파일에서 올바른 IP 주소를 구성합니다.
  2. ASM 설치를 다시 실행하고 overrides.yaml 파일을 적용합니다.
    apigeectl apply -f overrides.yaml
    

진단 정보 수집 필요

위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Google Cloud Customer Care에 문의하세요.

  1. Google Cloud 프로젝트 ID
  2. Apigee Hybrid 조직의 이름
  3. Kubernetes 클러스터 이름
  4. kubernetes 클러스터가 다른 Google Cloud 프로젝트에 있는 경우 Google Cloud 프로젝트 이름
  5. overrides.yaml 파일
  6. ASM 설치 중에 사용된 Istio-operator .yaml 파일
  7. istio-system 네임스페이스의 각 istio-ingressgateway Pod에서 로그를 수집합니다.
    kubectl logs NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.log
    
  8. istio-system 네임스페이스에서 각 Pod의 설명을 수집합니다.
    kubectl describe pod NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.yaml
    
  9. istio-system 네임스페이스에서 서비스 목록을 수집합니다.
    kubectl get svc -n istio-system