Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Ошибка Istio 404 (не найдено)
Отладка ошибки 404 (не найдено) в Istio может быть неприятной. Надеюсь, это даст вам возможность начать отслеживать, где что-то может пойти не так.
Конфликт шлюза подстановочных знаков
Может быть только одно определение шлюза, в котором используется значение хоста с подстановочным знаком «*». Если вы развернули что-либо еще, включающее шлюз с подстановочными знаками, клиентские вызовы завершатся ошибкой со статусом 404.
Пример:
$ istioctl get gateways GATEWAY NAME HOSTS NAMESPACE AGE bookinfo-gateway * default 20s httpbin-gateway * default 3s
В этом случае вам необходимо удалить или изменить один из конфликтующих шлюзов.
Отследить, где маршрут терпит неудачу
Istio похож на луковицу (или, возможно, на огра), у него есть слои. Систематический способ отладки ошибки 404 – это отойти от цели.
Серверная нагрузка
Убедитесь, что вы можете получить доступ к рабочей нагрузке из коляски:
kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers
Бэкэнд-коляска
Задайте адрес службы и получите IP-адрес модуля рабочей нагрузки.
SERVICE=httpbin.default.svc.cluster.local:80 POD_IP=$(kubectl get pod $WORKLOAD_POD -o jsonpath='{.status.podIP}')
Доступ к рабочей нагрузке через Sidecar:
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
Отсутствует аналитика
Если вы не видите аналитику в пользовательском интерфейсе Analytics, рассмотрите следующие возможные причины:
- Прием Apigee можно отложить на несколько минут.
- Журнал доступа Envoy gRPC настроен неправильно.
- Посланник не может связаться с удаленной службой
- Удаленная служба не может загрузить
Отсутствующий или неправильный ключ API не отклоняется
Если проверка ключа API не работает должным образом, рассмотрите следующие возможные причины:
Прямой прокси
Проверьте конфигурацию ext-authz
.
- Убедитесь, что прослушиватель настроен на перехват.
- Проверьте конфигурацию
ext-authz
.
Недействительные запросы проверяются и разрешаются.
- Удаленная служба настроена на открытие при сбое
- Envoy не настроен для проверок RBAC
Для получения информации о том, как решить эти проблемы, обратитесь к следующему разделу документации Envoy: Внешняя авторизация и обратитесь к информации о свойстве failure_mode_allow
. Это свойство позволяет вам изменить поведение фильтра при ошибках.
Отсутствующий или плохой JWT не отклоняется
Вероятная причина заключается в том, что фильтр Envoy JWT не настроен.
Действительный ключ API не работает
Вероятные причины
- Посланник не может связаться с удаленной службой
- Ваши учетные данные недействительны
- Продукт Apigee API не настроен для цели и среды
Действия по устранению неполадок
Проверьте свой продукт API на Apigee
- Включена ли она в вашей среде (тестовая или производственная)?
Продукт должен быть привязан к той же среде, что и ваша удаленная служба.
- Привязано ли оно к цели, к которой вы обращаетесь?
Проверьте раздел «Цели удаленного обслуживания Apigee» . Помните, что имя службы должно быть полным именем хоста. Если это служба Istio, имя будет примерно таким:
helloworld.default.svc.cluster.local
code> — которое представляет службуhelloworld
в пространстве именdefault
. - Соответствует ли путь к ресурсу вашему запросу?
Помните, что путь типа
/
или/**
будет соответствовать любому пути. Вы также можете использовать подстановочные знаки «*» или «**» для сопоставления. - У вас есть приложение для разработчиков?
Продукт API должен быть привязан к приложению разработчика, чтобы проверить его ключи.
Проверьте свой запрос
- Вы передаете Consumer Key в
x-api-key header
Пример:
curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
- Используете ли вы хороший потребительский ключ?
Убедитесь, что учетные данные из используемого вами приложения одобрены для вашего продукта API.
Проверьте журналы удаленной службы
- Запустите удаленную службу с ведением журнала на
debug level
Используйте опцию
-l debug
в командной строке. - Попытайтесь получить доступ к вашей цели и проверьте журналы.
Проверьте журналы на наличие строки, которая выглядит примерно так:
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]