k8s #1

Merged
inecs merged 41 commits from k8s into main 2025-10-26 13:02:28 +03:00
2 changed files with 128 additions and 14 deletions
Showing only changes of commit df7473fbd9 - Show all commits

110
docs/k8s-ingress-fix.md Normal file
View File

@@ -0,0 +1,110 @@
# Исправление проблемы с 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
```

View File

@@ -126,21 +126,25 @@ def main():
# Добавляем extraPortMappings для всех портов из addon_ports # Добавляем extraPortMappings для всех портов из addon_ports
addon_ports = cluster.get('addon_ports', {}) addon_ports = cluster.get('addon_ports', {})
port_mappings = []
# Ingress порты # Ingress порты для проброса на host
if addon_ports.get('ingress_http'): if addon_ports.get('ingress_http') or addon_ports.get('ingress_https'):
port_mappings.append({ # Добавляем extraPortMappings к control-plane узлу
'containerPort': 80, if 'extraPortMappings' not in config['nodes'][0]:
'hostPort': addon_ports['ingress_http'], config['nodes'][0]['extraPortMappings'] = []
'protocol': 'TCP'
}) if addon_ports.get('ingress_http'):
if addon_ports.get('ingress_https'): config['nodes'][0]['extraPortMappings'].append({
port_mappings.append({ 'containerPort': 80,
'containerPort': 443, 'hostPort': addon_ports['ingress_http'],
'hostPort': addon_ports['ingress_https'], 'protocol': 'TCP'
'protocol': 'TCP' })
}) if addon_ports.get('ingress_https'):
config['nodes'][0]['extraPortMappings'].append({
'containerPort': 443,
'hostPort': addon_ports['ingress_https'],
'protocol': 'TCP'
})
# Не добавляем extraPortMappings для портов аддонов - используем port-forward # Не добавляем extraPortMappings для портов аддонов - используем port-forward