Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Błąd Istio 404 (nie znaleziono)
Debugowanie błędu 404 (nie znaleziono) w Istio może być frustrujące. Mam nadzieję, że dzięki temu aby zacząć monitorować miejsca, w których coś poszło nie tak.
Konflikt bramy z symbolami wieloznacznymi
Może być tylko jedna definicja bramy używająca symbolu wieloznacznego „*” . Jeśli wdrożysz wszystko, co obejmuje bramę z symbolem wieloznacznym, wywołania klienta zakończą się niepowodzeniem ze stanem 404.
Przykład:
$ istioctl get gateways GATEWAY NAME HOSTS NAMESPACE AGE bookinfo-gateway * default 20s httpbin-gateway * default 3s
Jeśli tak się stanie, musisz usunąć lub zmienić jedną z bram będących w konflikcie.
Śledzenie błędów trasy
Istio jest jak cebula (albo ogr), ma warstwy. Systematyczny sposób debugowania a 404 to wyjście poza cel.
Zbiór zadań backendu
Sprawdź, czy masz dostęp do zadania z poziomu pomocniczego:
kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers
Dodatek pomocniczy backendu
Ustaw adres usługi i pobierz adres IP poda zbioru zadań.
SERVICE=httpbin.default.svc.cluster.local:80 POD_IP=$(kubectl get pod $WORKLOAD_POD -o jsonpath='{.status.podIP}')
Uzyskaj dostęp do zadania za pomocą aplikacji pomocniczej:
kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v http://$SERVICE/headers --resolve "$SERVICE:$POD_IP"
Jeśli włączone jest mTLS Istio:
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
Brama (lub plik pomocniczy frontendu)
Uzyskaj dostęp do usługi z poziomu bramy:
kubectl -n istio-system exec $GATEWAY_POD -- curl -v http://$SERVICE/header
Jeśli włączone jest mTLS Istio:
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
Brak statystyk
Jeśli w interfejsie Analytics nie widzisz statystyk, weź pod uwagę te możliwe przyczyny:
- Pobieranie Apigee może być opóźnione o kilka minut
- Log dostępu do gRPC Envoy nie został prawidłowo skonfigurowany
- Envoy nie może połączyć się z usługą zdalną
- Nie można przesłać do usługi zdalnej
Brakujący lub nieprawidłowy klucz interfejsu API nie jest odrzucany
Jeśli weryfikacja klucza interfejsu API nie działa prawidłowo, weź pod uwagę te możliwe przyczyny:
Bezpośredni serwer proxy
Sprawdź konfigurację ext-authz
.
- Upewnij się, że odbiornik jest skonfigurowany do przechwytywania.
- Sprawdź konfigurację
ext-authz
.
Nieprawidłowe żądania są sprawdzane i akceptowane
- Usługa zdalna skonfigurowana pod kątem awarii
- Envoy nie skonfigurowano na potrzeby kontroli RBAC
Informacje o tym, jak rozwiązać te problemy, znajdziesz w poniższej dokumentacji Envoy.
topic: Zewnętrzna autoryzacja,
i zapoznaj się z informacjami na temat właściwości failure_mode_allow
. Ta usługa
umożliwia zmianę działania filtra w przypadku błędów.
Brakujący lub nieprawidłowy token JWT nie został odrzucony
Prawdopodobną przyczyną jest to, że nie skonfigurowano filtra JWT Envoy.
Awaria prawidłowego klucza interfejsu API
Prawdopodobne przyczyny
- Envoy nie może połączyć się z usługą zdalną
- Twoje dane logowania są nieprawidłowe
- Usługa Apigee API nie została skonfigurowana dla środowiska docelowego i środowiska
Etapy rozwiązywania problemów
Sprawdź usługę API w Apigee
- Czy rozwiązanie jest włączone w Twoim środowisku (testowe lub produkcyjne)?
Usługa musi być powiązana z tym samym środowiskiem co usługa zdalna.
- Czy jest powiązany z celem, do którego uzyskujesz dostęp?
Sprawdź sekcję Cele usługi zdalnej Apigee. Pamiętaj, że nazwa usługi musi być ciągiem w pełni kwalifikowana nazwa hosta. Jeśli jest to usługa Istio, nazwa będzie podobna do tej:
helloworld.default.svc.cluster.local
code> – reprezentuje usługęhelloworld
w przestrzeni nazwdefault
. - Czy ścieżka zasobu pasuje do żądania?
Pamiętaj, że ścieżka, np.
/
lub/**
, pasuje do każdej ścieżki. Możesz również użyć znaku „*” lub „**” symbole wieloznaczne dopasowania. - Czy masz aplikację dewelopera?
Usługa API musi być powiązana z aplikacją dewelopera, aby można było sprawdzić jej klucze.
Sprawdź swoją prośbę
- Czy przekazujesz klucz klienta w
x-api-key header
Przykład:
curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
- Czy używasz dobrego klucza klienta?
Upewnij się, że dane uwierzytelniające z aplikacji, której używasz, są zatwierdzone dla Twojej usługi API.
Sprawdź dzienniki usługi zdalnej
- Uruchom usługę zdalną za pomocą logowania na
debug level
. Zobacz Ustawianie poziomów logów usługi zdalnej.Użyj opcji
-l debug
w wierszu poleceń. Na przykład:apigee-remote-service-envoy -l debug
- Spróbuj uzyskać dostęp do celu i sprawdź logi
Poszukaj w dziennikach wiersza, który wygląda mniej więcej tak:
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]
debug
– najbardziej szczegółowy tryb logowania.info
– wartość domyślna.warn
error
– tryb najmniej szczegółowego rejestrowania.
Ustawianie poziomów logów usługi zdalnej
Przy użyciu flagi wiersza poleceń możesz uruchomić usługę zdalną w jednym z tych debugowania
tryby w kolejności według szczegółowości, gdzie debug
jest najbardziej szczegółowy, a error
to najmniej:
Aby na przykład uruchomić usługę na poziomie debug
:
apigee-remote-service-envoy -l debug