Wyświetlasz dokumentację Apigee Edge.
Przejdź do
dokumentacji Apigee X. info
Błąd Istio 404 (nie znaleziono)
Debugowanie błędu 404 (nie znaleziono) w Istio może być frustrujące. Mamy nadzieję, że pomoże Ci to w ustaleniu, gdzie może występować problem.
Konflikt bramy z symbolem wieloznacznym
Może istnieć tylko 1 definicja bramy, która używa wartości hostów z symbolem wieloznacznym „*”. Jeśli wdrożysz coś innego, co zawiera bramę z symbolem wieloznacznym, wywołania klienta będą kończyć się niepowodzeniem ze stanem 404.
Przykład:
$ istioctl get gateways GATEWAY NAME HOSTS NAMESPACE AGE bookinfo-gateway * default 20s httpbin-gateway * default 3s
W takim przypadku musisz usunąć lub zmienić jedną z powodujących konflikt bram.
Śledzenie, gdzie występuje błąd trasy
Istio jest jak cebula (lub, być może, jak ogr) – ma warstwy. Systematyczny sposób debugowania błędu 404 polega na pracy od celu na zewnątrz.
Zbiór zadań backendu
Sprawdź, czy możesz uzyskać dostęp do zbioru zadań z sidecara:
kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers
Sidecar backendu
Ustaw adres świadczenia 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 zbioru zadań przez sidecar:
kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v http://$SERVICE/headers --resolve "$SERVICE:$POD_IP"
Lub, jeśli włączono 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
Brama (lub sidecar frontendu)
Uzyskaj dostęp do usługi z bramy:
kubectl -n istio-system exec $GATEWAY_POD -- curl -v http://$SERVICE/header
Lub, jeśli włączono 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
Brakujące dane analityczne
Jeśli nie widzisz danych analitycznych w interfejsie danych analitycznych, sprawdź te możliwe przyczyny:
- Przyjmowanie danych w Apigee może potrwać kilka minut.
- Dziennik dostępu gRPC Envoy nie jest prawidłowo skonfigurowany.
- Envoy nie może nawiązać połączenia z usługą zdalną.
- Usługa zdalna nie może przesłać danych.
Brakujący lub nieprawidłowy klucz interfejsu API nie jest odrzucany
Jeśli weryfikacja klucza interfejsu API nie działa prawidłowo, sprawdź 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 dozwolone
- Usługa zdalna skonfigurowana do otwierania w przypadku awarii
- Envoy nie jest skonfigurowany do sprawdzania RBAC
Informacje o tym, jak rozwiązać te problemy, znajdziesz w tym artykule w dokumentacji Envoy: External Authorization (Autoryzacja zewnętrzna),
oraz w informacjach o właściwości failure_mode_allow. Ta właściwość
umożliwia zmianę zachowania filtra w przypadku błędów.
Brakujący lub nieprawidłowy JWT nie jest odrzucany
Prawdopodobną przyczyną jest to, że filtr JWT Envoy nie jest skonfigurowany.
Prawidłowy klucz interfejsu API nie działa
Możliwe przyczyny
- Envoy nie może nawiązać połączenia z usługą zdalną.
- Twoje dane logowania są nieprawidłowe.
- Usługa API Apigee nie jest skonfigurowana na potrzeby celu i środowiska.
Jak rozwiązać problem
Sprawdź usługę API w Apigee
- Czy jest włączona w Twoim środowisku (testowym lub produkcyjnym)?
Usługa musi być powiązana z tym samym środowiskiem co usługa zdalna.
- Czy jest powiązana z celem, do którego uzyskujesz dostęp?
Sprawdź sekcję Cele usługi zdalnej Apigee. Pamiętaj, że nazwa usługi musi być a pełną i jednoznaczną nazwą hosta. Jeśli jest to usługa Istio, nazwa będzie wyglądać np. tak:
helloworld.default.svc.cluster.localcode> - co oznacza usługęhelloworldw przestrzeni nazwdefault. - Czy ścieżka zasobu jest zgodna z Twoim żądaniem?
Pamiętaj, że ścieżka taka jak
/lub/**będzie pasować do każdej ścieżki. Do dopasowywania możesz też używać symboli wieloznacznych „*” lub „**” do dopasowywania. - Czy masz aplikację dewelopera?
Aby sprawdzić klucze, usługa API musi być powiązana z aplikacją dewelopera.
Sprawdź swoją prośbę
- Czy przekazujesz klucz klienta w
x-api-key headerPrzykład:
curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
- Czy używasz prawidłowego klucza klienta?
Upewnij się, że dane logowania z aplikacji, której używasz, są zatwierdzone w przypadku Twojej usługi API.
Sprawdź logi usługi zdalnej
- Uruchom usługę zdalną z logowaniem na poziomie
debug levelUżyj opcji
-l debugw wierszu poleceń. - Spróbuj uzyskać dostęp do celu i sprawdź logi
W logach poszukaj wiersza podobnego do tego:
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]