Apigee 인그레스 게이트웨이 포드에 2개 중 1개의 컨테이너가 실행 중으로 표시됨

증상

포드 목록을 가져올 때 apigee-ingressgateway 포드에 실행 중인 컨테이너가 2개 중 1개만 표시됩니다.

예를 들어 다음 명령어를 실행하면

kubectl -n apigee get pods -l app=apigee-ingressgateway

출력:

NAME                                                             READY   STATUS    RESTARTS   AGE
apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         1/2     Running      0      6m48s
apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         1/2     Running      0      123m

또한 위의 포드 중 하나에서 describe 명령어를 실행하면 준비 프로브가 503 상태 코드로 실패하는 것으로 표시됩니다.

예를 들어 포드 설명의 Events 섹션에 다음 메시지가 표시될 수 있습니다.

Events:
  Type     Reason     Age                    From     Message
  ----     ------     ----                   ----     -------
  Warning  Unhealthy  76s (x32903 over 18h)  kubelet  Readiness probe failed: HTTP probe failed with statuscode: 503

가능한 원인

원인 설명
Apigee 인그레스가 포트 80에서 수신 대기하도록 구성됨 Apigee Hybrid 1.9부터 포트 80의 Apigee 인그레스 구성이 더 이상 지원되지 않습니다.

원인: Apigee 인그레스가 포트 80에서 수신 대기하도록 구성됨

이 문제는 Apigee 인그레스 게이트웨이가 포트 80에서 수신하도록 구성되어 발생하며, Apigee Hybrid 1.9부터는 더 이상 지원되지 않습니다.

포트 80을 허용하는 이전 버전의 Apigee Hybrid에서 업그레이드했거나 포트 80을 사용 설정하는 다른 잘못된 구성이 있는 경우 이 문제가 발생할 수 있습니다.

진단

  1. apigee-ingressgateway 포드 목록을 가져옵니다.

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

    kubectl -n apigee get pods -l app=apigee-ingressgateway

    샘플 출력

    NAME                                                              READY   STATUS    RESTARTS   AGE
    apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         1/2     Running   0          6m48s
    apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         1/2     Running   0          123m
    
  2. 나열된 포드 중 하나를 설명하여 이벤트를 확인합니다.
    kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD

    여기서 APIGEE_INGRESSGATEWAY_POD은 이전 명령어 출력에 나열된 apigee-ingressgateway 포드입니다.

    샘플 출력:

    Events:
      Type     Reason     Age                    From     Message
      ----     ------     ----                   ----     -------
      Warning  Unhealthy  76s (x32903 over 18h)  kubelet  Readiness probe failed: HTTP probe failed with statuscode: 503
    
  3. APIGEE_INGRESSGATEWAY_POD 포드의 로그를 가져옵니다.
    kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD

    권한 거부 오류로 인해 포트 80이 바인딩되지 않았다는 로그 항목과 함께 Envoy가 준비되지 않았다는 메시지가 표시될 수 있습니다.

    2025-09-11T06:16:45.457621Z     error   envoy config external/envoy/source/common/listener_manager/listener_manager_impl.cc:1186        listener '0.0.0.0_80' failed to bind or apply socket options: cannot bind '0.0.0.0:80': Permission denied
    ...
    2025-09-11T06:16:46.365818Z     warn    Envoy proxy is NOT ready: config received from XDS server, but was rejected: cds updates: 1 successful, 0 rejected; lds updates: 0 successful, 1 rejected
    
  4. 현재 apigeeroute 구성을 검토하여 포트 80 (HTTP)이 사용 설정된 구성을 찾습니다.
    • 정의된 Apigee 경로 목록을 가져옵니다.
      kubectl -n apigee get apigeeroute

      샘플 출력:

      NAME                                  STATE     AGE
      myorg-hyb-dev-grp-000-33620d0         running   2d1h
      non-sni                               running   17s
      
    • 포트 80이 정의된 위치를 각 apigeeroute에서 확인합니다.

      이전 명령어 출력에 나열된 각 apigeeroute에 대해 다음 명령어를 실행합니다.

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      여기서 APIGEE_ROUTE_NAME은 개별 apigeeroute의 이름입니다.

      명령어 샘플:

            kubectl -n apigee get apigeeroute non-sni -o yaml
            

      샘플 출력:

            apiVersion: apigee.cloud.google.com/v1alpha2
            kind: ApigeeRoute
            metadata:
              name: non-sni
              namespace: apigee
              resourceVersion: "240441468"
            spec:
              enableNonSniClient: true
              hostnames:
              - '*'
            ports:
              - number: 443
                protocol: HTTPS
                tls:
                  credentialName: myorg-hyb-dev-grp
                  minProtocolVersion: TLS_AUTO
                  mode: SIMPLE
              - number: 80
                protocol: HTTP
            selector:
              app: apigee-ingressgateway
            status:
              lastAppliedGeneration: 1
              state: running
            
      비 SNI apigeeroute는 포트 80이 이 경로의 일부로 사용 설정되어 있음을 보여줍니다.

해결 방법

이 문제를 해결하려면 다음 줄을 삭제하여 원래 apigeeroute yaml 파일에서 포트 80을 사용 중지하세요.

  - number: 80
    protocol: HTTP
      

원본 apigeeroute yaml 파일이 없는 경우 다음 단계를 따르세요.

  1. 다음 명령어를 사용하여 현재 구성을 내보냅니다.
    kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml

    여기서 APIGEE_ROUTE_NAME은 포트 80 구성을 삭제하도록 업데이트되는 apigeeroute입니다.

    여기서 APIGEE_ROUTE_FILENAMEapigeeroute yaml 콘텐츠가 포함된 출력 파일 이름입니다.

  2. apigeeroute yaml 파일을 수정하여 포트 80 구성을 삭제합니다.

    텍스트 편집기에서 APIGEE_ROUTE_FILENAME 파일을 열고 다음 줄을 삭제합니다.

            - number: 80
              protocol: HTTP
                
  3. 기존 apigeeroute를 수정된 YAML 파일로 바꿉니다.
    kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
    

    여기서 APIGEE_ROUTE_FILENAME은 업데이트된 apigeeroute 구성이 포함된 출력 파일입니다.

  4. 이제 apigee-ingressgateway 포드가 2/2 컨테이너로 실행됩니다. 그렇지 않은 경우 새 포드가 자동으로 생성되도록 포드를 삭제합니다.
            NAME                                                              READY   STATUS    RESTARTS   AGE
            apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         2/2     Running   0          25h
            apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         2/2     Running   0          26h
            

진단 정보 수집 필요

위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Google Cloud Customer Care에 문의하세요.
  • Overrides.yaml
  • 다음 명령어의 출력:
    • kubectl -n apigee get pods -l app=apigee-ingressgateway
    • kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
    • kubectl -n apigee get apigeeroutes
    • 명시된 각 경로에 대해 다음을 실행합니다.
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • 또는 Apigee Hybrid 수집 필요 정보를 실행하고 제공할 수도 있습니다.