Отладка в kubernetes не сильно отличается от отладки снаружи, есть только некоторые концепции, которые необходимо наложить на мир kubernetes.
Pod в kubernetes - это то, что вы концептуально видите как хост в мире виртуальных машин. Каждый контейнер, работающий в модуле Pod, будет видеть сервисы друг друга на локальном хосте. Оттуда к любому модулю будет подключено сетевое соединение (даже если конечная точка является локальным узлом). Поэтому начните тестирование со службами на локальном хосте и пройдите через IP-адрес модуля, IP-адрес службы, имя службы.
Некоторая сложность связана с наличием инструментов отладки в контейнерах. Как правило, контейнеры построены тонкими и не имеют всего доступного. Поэтому вам нужно либо установить инструменты во время работы контейнера (если вы можете), либо создать специальный «отладочный» контейнер, который вы можете развернуть по требованию в той же среде. Вы всегда можете вернуться к тестированию с узлов кластера, которые также имеют доступ.
Если у вас есть python, вы можете провести тестирование с uswgi_curl
pip install uwsgi-tools
uwsgi_curl hostname:port /path
В противном случае nc
/ curl
будет достаточно, до точки.
Pod to localhost
Первый шаг - убедиться, что сам контейнер отвечает. В этом случае вам, вероятно, будет доступен python / pip для использования uwsgi_curl
kubectl exec -ti my-app-XXXX-XXXX sh
nc -v localhost 5000
uwsgi_curl localhost:5000 /path
Pod to Pod / Service
Далее включите сеть kubernetes. Начните с IP-адресов и заканчивайте sh именами.
Менее вероятно, что здесь будет python
или даже nc
, но я думаю, что здесь важно проверить переменные среды:
kubectl exec -ti nginx-XXXX-XXXX sh
nc -v my-app-pod-IP 5000
nc -v my-app-service-IP 5000
nc -v my-app-service-name 5000
echo $APP_SERVER
echo $FK_SERVER_NAME
nc -v $APP_SERVER 5000
# or
uwsgi_curl $APP_SERVER:5000 /path
Отладка Pod для Pod / Service
Если вам нужно использовать модуль отладки, попробуйте и имитируйте c модуль, который вы тестируете, как можно больше. Здорово иметь общий c модуль отладки / развертывания для быстрого тестирования чего угодно, но если это не выявит проблему, вам может потребоваться настроить развертывание так, чтобы оно имитировало c модуль, который вы тестируете более внимательно.
В этом случае переменные окружения играют роль в настройке соединения, поэтому их следует эмулировать для модуля отладки.
Узел к Pod / Сервису
Пакеты / Сервисы будут доступны с узлов кластера (если вы не используете ограничительные сетевые политики), поэтому обычно быстрая проверка состоит в том, чтобы проверить, что Контроллеры / Сервисы работают оттуда:
nc -v <pod_ip> <container_port>
nc -v <service_ip> <service_port>
nc -v <service__dns> <service_port>
В этом случае:
nc -v <my_app_pod_ip> 5000
nc -v <my_app_service_ip> 5000
nc -v my-app.svc.<namespace>.cluster.local 5000