From 604c7816beffb4f9d4ffc7f53f3d05431929bc31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=90=D0=BD=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BF=D0=BE=D0=B2?= Date: Sun, 26 Oct 2025 09:39:20 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20port-forward=20=D1=82=D0=B5=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=8C=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=BA=D0=BE=D0=BC=D0=BF=D1=8C=D1=8E=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Скрипт получает kubeconfig из контейнера k8s-controller - Заменяет server 0.0.0.0 на localhost для локального доступа - Port-forward запускается на хосте через локальный kubectl - Все аддоны доступны на localhost: Grafana 3000, Prometheus 9090, Kiali 20001 --- scripts/portforward.py | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/scripts/portforward.py b/scripts/portforward.py index 23d4cd5..afca259 100755 --- a/scripts/portforward.py +++ b/scripts/portforward.py @@ -80,7 +80,7 @@ def clear_portforwards(): pass def create_portforwards(): - """Создает port-forward для всех сервисов из preset""" + """Создает port-forward для всех сервисов из preset на локальном компьютере""" # Загружаем preset preset_file = "molecule/presets/k8s/kubernetes.yml" with open(preset_file, 'r') as f: @@ -89,7 +89,29 @@ def create_portforwards(): cluster_name = preset['kind_clusters'][0]['name'] addon_ports = preset['kind_clusters'][0].get('addon_ports', {}) + # Получаем kubeconfig из контейнера k8s-controller 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 if addon_ports.get('prometheus'): @@ -97,8 +119,7 @@ def create_portforwards(): print(f" - Prometheus: localhost:{port} -> monitoring/monitoring-kube-prometheus-prometheus:9090") subprocess.Popen([ "kubectl", - "--server=https://{}-control-plane:6443".format(cluster_name), - "--insecure-skip-tls-verify", + f"--kubeconfig={kubeconfig_file}", "port-forward", "-n", "monitoring", "svc/monitoring-kube-prometheus-prometheus", @@ -111,8 +132,7 @@ def create_portforwards(): print(f" - Grafana: localhost:{port} -> monitoring/monitoring-grafana:80") subprocess.Popen([ "kubectl", - "--server=https://{}-control-plane:6443".format(cluster_name), - "--insecure-skip-tls-verify", + f"--kubeconfig={kubeconfig_file}", "port-forward", "-n", "monitoring", "svc/monitoring-grafana", @@ -125,8 +145,7 @@ def create_portforwards(): print(f" - Kiali: localhost:{port} -> istio-system/kiali:20001") subprocess.Popen([ "kubectl", - "--server=https://{}-control-plane:6443".format(cluster_name), - "--insecure-skip-tls-verify", + f"--kubeconfig={kubeconfig_file}", "port-forward", "-n", "istio-system", "svc/kiali", @@ -139,8 +158,7 @@ def create_portforwards(): print(f" - Metrics Server: localhost:{port} -> kube-system/metrics-server:4443") subprocess.Popen([ "kubectl", - "--server=https://{}-control-plane:6443".format(cluster_name), - "--insecure-skip-tls-verify", + f"--kubeconfig={kubeconfig_file}", "port-forward", "-n", "kube-system", "svc/metrics-server",