문제해결

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

Istio 404 (찾을 수 없음) 오류

Istio에서 404(찾을 수 없음) 오류를 디버깅하면 실망할 수 있습니다. 문제가 발생했을 수 있는 위치를 추적할 수 있기를 바랍니다.

와일드 카드 게이트웨이 충돌

와일드 카드 '*' 호스트 값을 사용하는 게이트웨이 정의는 하나만 가능합니다. 와일드 카드 게이트웨이가 포함된 항목을 배포한 경우, 클라이언트 호출 시 404 상태로 실패합니다.

예:

$ istioctl get gateways
GATEWAY NAME         HOSTS     NAMESPACE   AGE
bookinfo-gateway     *         default     20s
httpbin-gateway      *         default     3s

이 경우에는 충돌하는 게이트웨이 중 하나를 삭제하거나 변경해야 합니다.

경로가 실패한 trace

Istio에는 양파(또는 오그르)처럼 레이어가 있습니다. 404를 디버깅하는 체계적인 방법은 대상의 바깥쪽으로 작업하는 것입니다.

백엔드 워크로드

사이드카에서 워크로드에 액세스할 수 있는지 확인합니다.

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers

백엔드 사이드카

서비스 주소를 설정하고 워크로드 Pod의 IP 주소를 가져옵니다.

SERVICE=httpbin.default.svc.cluster.local:80
  POD_IP=$(kubectl get pod $WORKLOAD_POD -o jsonpath='{.status.podIP}')

사이드카를 통해 워크로드에 액세스합니다.

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v http://$SERVICE/headers --resolve "$SERVICE:$POD_IP"

또는 Istio mTLS가 사용 설정됩니다.

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v https://$SERVICE/headers --resolve "$SERVICE:$POD_IP" --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

게이트웨이(또는 프런트엔드 사이드카)

게이트웨이에서 서비스에 액세스합니다.

kubectl -n istio-system exec $GATEWAY_POD -- curl -v http://$SERVICE/header

또는 Istio mTLS가 사용 설정됩니다.

kubectl -n istio-system exec $GATEWAY_POD -- curl -v https://$SERVICE/headers --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

분석 누락

애널리틱스 UI에 분석이 표시되지 않으면 다음과 같은 원인이 있을 수 있습니다.

  • Apigee 입고는 몇 분 지연될 수 있습니다.
  • Envoy gRPC 액세스 로그가 올바르게 구성되지 않았습니다.
  • Envoy가 원격 서비스에 연결할 수 없습니다.
  • 원격 서비스가 업로드를 실패했습니다.

누락되었거나 잘못된 API 키가 거부되지 않음

API 키 검증이 제대로 작동하지 않는 경우 다음과 같은 가능한 원인을 고려하세요.

직접 프록시

ext-authz 구성을 확인합니다.

사이드카
  • 리스너가 인터셉트에 대해 구성되어 있는지 확인하세요.
  • ext-authz 구성을 확인합니다.

잘못된 요청을 확인 및 허용 중

  • 오류 발생 시 원격 서비스를 구성합니다.
  • RBAC 확인에 대해 Envoy가 구성되지 않았습니다.

이 문제를 해결하는 방법에 대한 자세한 내용은 외부 승인이라는 Envoy 문서를 참조하고, failure_mode_allow 속성에 대한 정보를 참조합니다. 이 속성을 사용하면 오류 시 필터의 동작을 변경할 수 있습니다.

누락되었거나 잘못된 JWT가 거부되지 않음

이 문제는 Envoy JWT 필터가 구성되지 않았기 때문일 수 있습니다.

유효한 API 키 실패

가능한 원인

  • Envoy가 원격 서비스에 연결할 수 없습니다.
  • 사용자 인증 정보가 올바르지 않습니다.
  • 대상 및 env에 대해 Apigee API 제품이 구성되지 않았습니다.

문제 해결 단계

Apigee에서 API 제품 확인

  • 환경 (테스트 및 프로덕션)에 사용 설정되어 있나요?

    제품이 원격 서비스와 동일한 환경에 바인딩되어야 합니다.

  • 액세스 중인 타겟에 바인딩되어 있나요?

    Apigee 원격 서비스 대상 섹션을 확인합니다. 서비스 이름은 정규화된 호스트 이름이어야 합니다. Istio 서비스의 경우 이름이 helloworld.default.svc.cluster.localcode>와 같이 지정됩니다. 이 이름은 default 네임스페이스의 helloworld 서비스를 나타냅니다.

  • 리소스 경로가 요청과 일치하나요?

    / 또는 /**와 같은 경로는 모든 경로와 일치합니다. 또한 일치에 '*' 또는 '**' 와일드 카드를 사용할 수도 있습니다.

  • 개발자 앱이 있나요?

    키 확인을 위해서는 API 제품이 개발자 앱에 바인딩되어야 합니다.

요청 확인

  • x-api-key header의 고객 키를 전달하나요?

    예:

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • 올바른 고객 키를 사용하고 있나요?

    사용 중인 앱의 사용자 인증 정보가 API 제품에 승인되었는지 확인합니다.

원격 서비스 로그 확인

  1. debug level에서 로깅으로 원격 서비스 시작. 원격 서비스 로그 수준 설정을 참조하세요.

    명령줄에서 -l debug 옵션을 사용합니다. 예를 들면 다음과 같습니다.

    apigee-remote-service-envoy -l debug
  2. 대상에 액세스하여 로그 확인 시도

    로그에서 다음과 비슷한 줄을 찾습니다.

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]
    
  3. 원격 서비스 로그 수준 설정

    명령줄 플래그를 사용하면 세부정보 수준에 따라 원격 서비스를 다음 디버그 모드 중 하나로 시작할 수 있습니다. 여기서 debug가 최대 상세 모드이고 error가 최소 상세 모드입니다.

    • debug - 최대 상세 로깅 모드입니다.
    • info - 기본값입니다.
    • warn
    • error - 최소 상세 로깅 모드입니다.

    예를 들어 debug 수준에서 서비스를 시작하려면 다음 안내를 따르세요.

    apigee-remote-service-envoy -l debug