Веб-интерфейс для openzipkin, запускаемый из изображения Docker, показывает ошибку config.json

#kubernetes

#kubernetes

Вопрос:

Я пытаюсь запустить сервер openzipkin в кластере k8s, начиная с тестирования в мини-кубе. Я новичок в настройке k8s, но вот что я сделал до сих пор:

 $ minikube start
$ eval $(minikube docker-env)
$ kubectl run zipkin --image=openzipkin/zipkin --port=9411
$ kubectl expose deployment zipkin --port=9411 --type="NodePort" --name=zipkin-http
  

Я думаю, что я делаю, это запуск нового модуля и развертывание образа zipkin, а затем показ веб-интерфейса на порту 9411 через zipkin-http. После выполнения этого:

 $ kubectl run -i --tty busybox --image=busybox -- sh
$ nslookup zipkin-http
Server:    10.0.0.10
Address 1: 10.0.0.10

Name:      zipkin-http
Address 1: 10.0.0.101
$ wget -qO- zipkin-http:9411
<!DOCTYPE html>
...
$ wget -qO- zipkin-http:9411/config.json
{"environment":"","queryLimit":10,"defaultLookback":3600000,"instrumented":".*"}
  

Затем я запускаю прокси-сервер kubectl, чтобы получить доступ к веб-интерфейсу из своего браузера:

 $ kubectl proxy --accept-hosts=".*"
  

Теперь, если я перейду к http://localhost:8001/api/v1/proxy/namespaces/default/services/zipkin-http/config.json Я получаю содержимое конфигурационного файла:

 {"environment":"","queryLimit":10,"defaultLookback":3600000,"instrumented":".*"}
  

Но если я перейду к корню в http://localhost:8001/api/v1/proxy/namespaces/default/services/zipkin-http / Я получаю сообщение об ошибке:

 Error loading config.json: undefined
  

Файл config.json, который он пытается загрузить, находится по адресу:9411/config.json. Запрос на загрузку /config.json поступает из JS-файла, который был загружен с помощью html на корневой странице.

Поскольку похоже, что я могу получить доступ к файлу json непосредственно как изнутри, так и снаружи кластера, я не понимаю, почему файл JS не может его загрузить. Что я здесь делаю не так?

Спасибо!

Ответ №1:

Веб-приложение пытается получить доступ config.json к root (доступ от /config.json имени vs just config.json ) — то есть http://localhost:8001/config.json . Это, очевидно, было бы неправильно, как и должно быть http://localhost:8001/api/v1/proxy/namespaces/default/services/zipkin-http/config.json

Для этого есть очень простое решение — просто запустите:

 kubectl port-forward <name of the pod> 9411
  

Теперь просто перейдите к http://localhost:9411 и пользовательский интерфейс должен быть запущен (опробован и проверен).

Вы можете получить имя модуля, выполнив kubectl get pods

PS: kubectl proxy обычно предназначен для доступа к API Kubernetes и kube port-forward является правильным инструментом в этом случае.

Комментарии:

1. Спасибо! В итоге я сделал что-то вроде этого, поэтому мне не нужно было заранее знать имя модуля (хотя для этого может быть лучший способ): kubectl port-forward $ (kubectl get pods -l «run=zipkin» -o ‘jsonpath={.items[*] .metadata.name }’) 9411