From a5ecb34ddf7a5b17d58942e28d54cecc5c28aff6 Mon Sep 17 00:00:00 2001 From: Grayton Ward Date: Tue, 23 Apr 2024 00:45:49 -0400 Subject: [PATCH] Enhancement: Fixed original behavior of manual config k8s service --- .../api/kubernetes/stats/[...service].js | 2 +- .../api/kubernetes/status/[...service].js | 2 +- src/utils/kubernetes/kubernetes-utils.js | 31 ++++++++++++++++--- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/pages/api/kubernetes/stats/[...service].js b/src/pages/api/kubernetes/stats/[...service].js index 2ff6c0eae..8ad094583 100644 --- a/src/pages/api/kubernetes/stats/[...service].js +++ b/src/pages/api/kubernetes/stats/[...service].js @@ -28,7 +28,7 @@ export default async function handler(req, res) { return; } const coreApi = kc.makeApiClient(CoreV1Api); - const labelSelector = podSelector !== undefined ? podSelector : await parseIngressSelector(appName, namespace, kc); + const labelSelector = podSelector !== undefined ? podSelector : await parseIngressSelector(appName, namespace, kc, logger); const metricsApi = new Metrics(kc); const podsResponse = await coreApi .listNamespacedPod(namespace, null, null, null, null, labelSelector) diff --git a/src/pages/api/kubernetes/status/[...service].js b/src/pages/api/kubernetes/status/[...service].js index 8bf0a1249..ff91959b4 100644 --- a/src/pages/api/kubernetes/status/[...service].js +++ b/src/pages/api/kubernetes/status/[...service].js @@ -25,7 +25,7 @@ export default async function handler(req, res) { }); return; } - const labelSelector = podSelector !== undefined ? podSelector : await parseIngressSelector(appName, namespace, kc); + const labelSelector = podSelector !== undefined ? podSelector : await parseIngressSelector(appName, namespace, kc, logger); const coreApi = kc.makeApiClient(CoreV1Api); const podsResponse = await coreApi .listNamespacedPod(namespace, null, null, null, null, labelSelector) diff --git a/src/utils/kubernetes/kubernetes-utils.js b/src/utils/kubernetes/kubernetes-utils.js index 53c1fedb5..e18ef031e 100644 --- a/src/utils/kubernetes/kubernetes-utils.js +++ b/src/utils/kubernetes/kubernetes-utils.js @@ -1,14 +1,35 @@ import { CoreV1Api, NetworkingV1Api } from "@kubernetes/client-node"; -export async function parseIngressSelector(ingressName, namespace, kc) { +export async function parseIngressSelector(ingressName, namespace, kc, logger) { const coreApi = kc.makeApiClient(CoreV1Api); const networkApi = kc.makeApiClient(NetworkingV1Api); - const ingress = await networkApi.readNamespacedIngress(ingressName, namespace); - const serviceName = ingress.body.spec.rules[0].http.paths[0].backend.service.name; + const ingress = await networkApi + .readNamespacedIngress(ingressName, namespace) + .then((response) => response.body) + .catch((err) => { + logger.error("Error getting ingress: %d %s %s", err.statusCode, err.body, err.response); + return null; + }); - const svc = await coreApi.readNamespacedService(serviceName, namespace); - return svc.body.spec.selector; + if (!ingress) { + return {"app.kubernetes.io/name": ingressName}; + } + + const serviceName = ingress.spec.rules[0].http.paths[0].backend.service.name; + const svc = await coreApi + .readNamespacedService(serviceName, namespace) + .then((response) => response.body) + .catch((err) => { + logger.error("Error getting service: %d %s %s", err.statusCode, err.body, err.response); + return null; + }); + + if (!svc) { + return {"app.kubernetes.io/name": ingressName}; + } + + return svc.spec.selector; } export function parseCpu(cpuStr) {