증상
포드 목록을 가져올 때 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을 사용 설정하는 다른 잘못된 구성이 있는 경우 이 문제가 발생할 수 있습니다.
진단
-
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
-
나열된 포드 중 하나를 설명하여 이벤트를 확인합니다.
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
-
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
- 현재
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
샘플 출력:
비 SNIapiVersion: 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
apigeeroute
는 포트 80이 이 경로의 일부로 사용 설정되어 있음을 보여줍니다.
-
정의된 Apigee 경로 목록을 가져옵니다.
해결 방법
이 문제를 해결하려면 다음 줄을 삭제하여 원래 apigeeroute
yaml 파일에서 포트 80을 사용 중지하세요.
- number: 80 protocol: HTTP
원본 apigeeroute
yaml 파일이 없는 경우 다음 단계를 따르세요.
- 다음 명령어를 사용하여 현재 구성을 내보냅니다.
kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml
여기서 APIGEE_ROUTE_NAME은 포트 80 구성을 삭제하도록 업데이트되는
apigeeroute
입니다.여기서 APIGEE_ROUTE_FILENAME은
apigeeroute
yaml 콘텐츠가 포함된 출력 파일 이름입니다. -
apigeeroute
yaml 파일을 수정하여 포트 80 구성을 삭제합니다.텍스트 편집기에서 APIGEE_ROUTE_FILENAME 파일을 열고 다음 줄을 삭제합니다.
- number: 80 protocol: HTTP
-
기존
apigeeroute
를 수정된 YAML 파일로 바꿉니다.kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
여기서 APIGEE_ROUTE_FILENAME은 업데이트된
apigeeroute
구성이 포함된 출력 파일입니다. -
이제
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 수집 필요 정보를 실행하고 제공할 수도 있습니다.