feat: port-forward теперь работает на локальном компьютере

- Скрипт получает kubeconfig из контейнера k8s-controller
- Заменяет server 0.0.0.0 на localhost для локального доступа
- Port-forward запускается на хосте через локальный kubectl
- Все аддоны доступны на localhost: Grafana 3000, Prometheus 9090, Kiali 20001
This commit is contained in:
Сергей Антропов
2025-10-26 09:39:20 +03:00
parent 06bfc00b5a
commit 604c7816be

View File

@@ -80,7 +80,7 @@ def clear_portforwards():
pass pass
def create_portforwards(): def create_portforwards():
"""Создает port-forward для всех сервисов из preset""" """Создает port-forward для всех сервисов из preset на локальном компьютере"""
# Загружаем preset # Загружаем preset
preset_file = "molecule/presets/k8s/kubernetes.yml" preset_file = "molecule/presets/k8s/kubernetes.yml"
with open(preset_file, 'r') as f: with open(preset_file, 'r') as f:
@@ -89,7 +89,29 @@ def create_portforwards():
cluster_name = preset['kind_clusters'][0]['name'] cluster_name = preset['kind_clusters'][0]['name']
addon_ports = preset['kind_clusters'][0].get('addon_ports', {}) addon_ports = preset['kind_clusters'][0].get('addon_ports', {})
# Получаем kubeconfig из контейнера k8s-controller
print(f"🔌 Создание port-forward для кластера: {cluster_name}") print(f"🔌 Создание port-forward для кластера: {cluster_name}")
print("📋 Получение kubeconfig из контейнера k8s-controller...")
# Копируем kubeconfig из контейнера
result = subprocess.run(
f"docker exec k8s-controller kind get kubeconfig --name {cluster_name}",
shell=True, capture_output=True, text=True
)
if result.returncode != 0:
print(f"❌ Ошибка получения kubeconfig: {result.stderr}")
return
# Сохраняем kubeconfig во временный файл
kubeconfig_file = "/tmp/kubeconfig-lab.yaml"
with open(kubeconfig_file, 'w') as f:
f.write(result.stdout)
# Меняем server с 0.0.0.0 на localhost для локального доступа
subprocess.run(f"sed -i.bak 's|server: https://0.0.0.0:6443|server: https://localhost:6443|g' {kubeconfig_file}", shell=True)
print("✅ Kubeconfig подготовлен")
# Prometheus # Prometheus
if addon_ports.get('prometheus'): if addon_ports.get('prometheus'):
@@ -97,8 +119,7 @@ def create_portforwards():
print(f" - Prometheus: localhost:{port} -> monitoring/monitoring-kube-prometheus-prometheus:9090") print(f" - Prometheus: localhost:{port} -> monitoring/monitoring-kube-prometheus-prometheus:9090")
subprocess.Popen([ subprocess.Popen([
"kubectl", "kubectl",
"--server=https://{}-control-plane:6443".format(cluster_name), f"--kubeconfig={kubeconfig_file}",
"--insecure-skip-tls-verify",
"port-forward", "port-forward",
"-n", "monitoring", "-n", "monitoring",
"svc/monitoring-kube-prometheus-prometheus", "svc/monitoring-kube-prometheus-prometheus",
@@ -111,8 +132,7 @@ def create_portforwards():
print(f" - Grafana: localhost:{port} -> monitoring/monitoring-grafana:80") print(f" - Grafana: localhost:{port} -> monitoring/monitoring-grafana:80")
subprocess.Popen([ subprocess.Popen([
"kubectl", "kubectl",
"--server=https://{}-control-plane:6443".format(cluster_name), f"--kubeconfig={kubeconfig_file}",
"--insecure-skip-tls-verify",
"port-forward", "port-forward",
"-n", "monitoring", "-n", "monitoring",
"svc/monitoring-grafana", "svc/monitoring-grafana",
@@ -125,8 +145,7 @@ def create_portforwards():
print(f" - Kiali: localhost:{port} -> istio-system/kiali:20001") print(f" - Kiali: localhost:{port} -> istio-system/kiali:20001")
subprocess.Popen([ subprocess.Popen([
"kubectl", "kubectl",
"--server=https://{}-control-plane:6443".format(cluster_name), f"--kubeconfig={kubeconfig_file}",
"--insecure-skip-tls-verify",
"port-forward", "port-forward",
"-n", "istio-system", "-n", "istio-system",
"svc/kiali", "svc/kiali",
@@ -139,8 +158,7 @@ def create_portforwards():
print(f" - Metrics Server: localhost:{port} -> kube-system/metrics-server:4443") print(f" - Metrics Server: localhost:{port} -> kube-system/metrics-server:4443")
subprocess.Popen([ subprocess.Popen([
"kubectl", "kubectl",
"--server=https://{}-control-plane:6443".format(cluster_name), f"--kubeconfig={kubeconfig_file}",
"--insecure-skip-tls-verify",
"port-forward", "port-forward",
"-n", "kube-system", "-n", "kube-system",
"svc/metrics-server", "svc/metrics-server",