fix: исправлена проблема с пробросом портов Ingress
- Исправлена логика добавления extraPortMappings в конфигурацию Kind - Порты 80 и 443 теперь правильно пробрасываются на host (8081, 8443) - Создана документация k8s-ingress-fix.md с инструкциями
This commit is contained in:
110
docs/k8s-ingress-fix.md
Normal file
110
docs/k8s-ingress-fix.md
Normal 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
|
||||||
|
```
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user