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