Files
DevOpsLab/docs/k8s-ingress-fix.md
Сергей Антропов df7473fbd9 fix: исправлена проблема с пробросом портов Ingress
- Исправлена логика добавления extraPortMappings в конфигурацию Kind
- Порты 80 и 443 теперь правильно пробрасываются на host (8081, 8443)
- Создана документация k8s-ingress-fix.md с инструкциями
2025-10-26 10:58:37 +03:00

3.8 KiB
Raw Blame History

Исправление проблемы с Ingress

Проблема

После создания Kubernetes кластера Ingress ресурсы не доступны по доменным именам.

Причина

  1. extraPortMappings не добавлялись в конфигурацию Kind - порты 80 и 443 не пробрасывались на host
  2. Записи в /etc/hosts не добавлялись автоматически при применении манифестов

Решение

Вариант 1: Быстрое исправление (без пересоздания кластера)

  1. Добавьте запись в /etc/hosts вручную:
echo "127.0.0.1 grafana.local #k8s" | sudo tee -a /etc/hosts
  1. Создайте port-forward для Ingress напрямую:
# Подключитесь к кластеру
export KUBECONFIG=$(docker exec k8s-controller cat /root/.kube/config)

# Замените 0.0.0.0 на localhost в kubeconfig
export KUBECONFIG=$(echo "$KUBECONFIG" | sed 's/0\.0\.0\.0:6443/localhost:6443/g' > /tmp/kubeconfig-local.yaml && echo /tmp/kubeconfig-local.yaml)

# Создайте port-forward для Ingress HTTP
kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8081:80 &

# Проверьте доступность
curl -H "Host: grafana.local" http://localhost:8081
  1. Откройте в браузере:
http://grafana.local:8081

Вариант 2: Пересоздание кластера (рекомендуется)

Исправления уже внесены в код. Просто пересоздайте кластер:

# Удалите старый кластер
make k8s destroy kubernetes

# Создайте новый (с исправлениями)
make k8s create kubernetes

# Примените манифест с Ingress
make k8s manifest apply kubernetes manifests/test-grafana-ingress.yaml

# Запись в /etc/hosts добавится автоматически
# Проверьте
cat /etc/hosts | grep k8s

# Откройте в браузере
open http://grafana.local:8081

Проверка

# 1. Проверьте Ingress
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify get ingress --all-namespaces

# 2. Проверьте ports control-plane
docker port lab-control-plane

# Должны быть:
# 6443/tcp -> 0.0.0.0:6443
# 80/tcp -> 0.0.0.0:8081   <- после исправления
# 443/tcp -> 0.0.0.0:8443  <- после исправления

# 3. Проверьте доступность
curl -H "Host: grafana.local" http://localhost:8081

Что было исправлено

  1. В scripts/create_k8s_cluster.py исправлена логика добавления extraPortMappings в конфигурацию Kind
  2. Порты 80 и 443 теперь правильно пробрасываются на host (8081 и 8443)
  3. Манифест Ingress можно применить и автоматически добавить запись в /etc/hosts

Дополнительно

Если Ingress всё ещё не работает:

  1. Проверьте статус подов Ingress Controller:
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify get pods -n ingress-nginx
  1. Проверьте логи Ingress Controller:
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify logs -n ingress-nginx -l app.kubernetes.io/component=controller
  1. Проверьте события:
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify get events -n monitoring