- Исправлена логика добавления extraPortMappings в конфигурацию Kind - Порты 80 и 443 теперь правильно пробрасываются на host (8081, 8443) - Создана документация k8s-ingress-fix.md с инструкциями
3.8 KiB
3.8 KiB
Исправление проблемы с Ingress
Проблема
После создания Kubernetes кластера Ingress ресурсы не доступны по доменным именам.
Причина
- extraPortMappings не добавлялись в конфигурацию Kind - порты 80 и 443 не пробрасывались на host
- Записи в /etc/hosts не добавлялись автоматически при применении манифестов
Решение
Вариант 1: Быстрое исправление (без пересоздания кластера)
- Добавьте запись в
/etc/hostsвручную:
echo "127.0.0.1 grafana.local #k8s" | sudo tee -a /etc/hosts
- Создайте 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
- Откройте в браузере:
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
Что было исправлено
- В
scripts/create_k8s_cluster.pyисправлена логика добавленияextraPortMappingsв конфигурацию Kind - Порты 80 и 443 теперь правильно пробрасываются на host (8081 и 8443)
- Манифест Ingress можно применить и автоматически добавить запись в
/etc/hosts
Дополнительно
Если Ingress всё ещё не работает:
- Проверьте статус подов Ingress Controller:
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify get pods -n ingress-nginx
- Проверьте логи 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
- Проверьте события:
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify get events -n monitoring