diff --git a/src/pages/api/kubernetes/stats/[...service].js b/src/pages/api/kubernetes/stats/[...service].js index b1bf83450..2ff6c0eae 100644 --- a/src/pages/api/kubernetes/stats/[...service].js +++ b/src/pages/api/kubernetes/stats/[...service].js @@ -4,10 +4,11 @@ import getKubeConfig from "../../../../utils/config/kubernetes"; import { parseCpu, parseMemory } from "../../../../utils/kubernetes/kubernetes-utils"; import createLogger from "../../../../utils/logger"; +import { parseIngressSelector } from "utils/kubernetes/kubernetes-utils"; + const logger = createLogger("kubernetesStatsService"); export default async function handler(req, res) { - const APP_LABEL = "app.kubernetes.io/name"; const { service, podSelector } = req.query; const [namespace, appName] = service; @@ -17,7 +18,6 @@ export default async function handler(req, res) { }); return; } - const labelSelector = podSelector !== undefined ? podSelector : `${APP_LABEL}=${appName}`; try { const kc = getKubeConfig(); @@ -28,6 +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 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 f771d69df..8bf0a1249 100644 --- a/src/pages/api/kubernetes/status/[...service].js +++ b/src/pages/api/kubernetes/status/[...service].js @@ -3,10 +3,11 @@ import { CoreV1Api } from "@kubernetes/client-node"; import getKubeConfig from "../../../../utils/config/kubernetes"; import createLogger from "../../../../utils/logger"; +import { parseIngressSelector } from "utils/kubernetes/kubernetes-utils"; + const logger = createLogger("kubernetesStatusService"); export default async function handler(req, res) { - const APP_LABEL = "app.kubernetes.io/name"; const { service, podSelector } = req.query; const [namespace, appName] = service; @@ -16,7 +17,6 @@ export default async function handler(req, res) { }); return; } - const labelSelector = podSelector !== undefined ? podSelector : `${APP_LABEL}=${appName}`; try { const kc = getKubeConfig(); if (!kc) { @@ -25,6 +25,7 @@ export default async function handler(req, res) { }); return; } + const labelSelector = podSelector !== undefined ? podSelector : await parseIngressSelector(appName, namespace, kc); 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 cfaf610b1..53c1fedb5 100644 --- a/src/utils/kubernetes/kubernetes-utils.js +++ b/src/utils/kubernetes/kubernetes-utils.js @@ -1,3 +1,16 @@ +import { CoreV1Api, NetworkingV1Api } from "@kubernetes/client-node"; + +export async function parseIngressSelector(ingressName, namespace, kc) { + 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 svc = await coreApi.readNamespacedService(serviceName, namespace); + return svc.body.spec.selector; +} + export function parseCpu(cpuStr) { const unitLength = 1; const base = Number.parseInt(cpuStr, 10);