From ad51cedb92d96b6fd0f0bfccf2136fa365fa7f5b Mon Sep 17 00:00:00 2001 From: l0r1s Date: Tue, 25 Apr 2023 12:05:22 +0300 Subject: [PATCH 01/12] chore: refactor k8s provider resources types --- .../providers/k8s/resources/nodeResource.ts | 1 - .../src/providers/k8s/resources/types.ts | 62 +++++++++++++------ 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts index 0c5742178..b627c87b7 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts @@ -177,7 +177,6 @@ export class NodeResource { app: "zombienet", "app.kubernetes.io/name": this.namespace, "app.kubernetes.io/instance": name, - "zombie-ns": this.namespace, }, annotations: { "prometheus.io/scrape": "true", diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts index c663ef15a..e76c0b429 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts @@ -30,33 +30,55 @@ export interface Container { resources?: ContainerResource; } +export interface Labels { + "zombie-role": ZombieRoleLabel; + app: string; + "app.kubernetes.io/name": string; + "app.kubernetes.io/instance": string; +} + +export interface Annotations { + "prometheus.io/scrape": "true"; + "prometheus.io/port": string; +} + +export interface InnerPodSpec { + hostname: string; + restartPolicy: "Never" | "OnFailure" | "Always"; + containers: Container[]; + initContainers?: Container[]; + volumes?: Volume[]; + securityContext?: { + fsGroup: number; + runAsUser: number; + runAsGroup: number; + }; +} + export interface PodSpec { apiVersion: "v1"; kind: "Pod"; metadata: { name: string; - labels: { - "zombie-role": ZombieRoleLabel; - app: string; - "app.kubernetes.io/name": string; - "app.kubernetes.io/instance": string; - "zombie-ns": string; - }; - annotations?: { - "prometheus.io/scrape": "true"; - "prometheus.io/port": string; - }; + labels: Labels; + annotations?: Annotations; }; + spec: InnerPodSpec; +} + +export interface ServiceSpec { + apiVersion: "v1"; + kind: "Service"; + metadata: { name: string }; spec: { - hostname: string; - restartPolicy: "Never" | "OnFailure"; - containers: Container[]; - initContainers?: Container[]; - volumes?: Volume[]; - securityContext?: { - fsGroup: number; - runAsUser: number; - runAsGroup: number; + selector: { + "app.kubernetes.io/instance": string; }; + ports: { + name: string; + protocol: "TCP" | "UDP"; + port: number; + targetPort: number; + }[]; }; } From 19a6a81033607f6c6479198beef33096979af138 Mon Sep 17 00:00:00 2001 From: l0r1s Date: Tue, 25 Apr 2023 12:06:41 +0300 Subject: [PATCH 02/12] chore: renamed k8s resource file --- .../k8s/resources/{bootnodeResource.ts => bootNodeResource.ts} | 1 - .../packages/orchestrator/src/providers/k8s/resources/index.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) rename javascript/packages/orchestrator/src/providers/k8s/resources/{bootnodeResource.ts => bootNodeResource.ts} (96%) diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts similarity index 96% rename from javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts rename to javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts index 627ef8fd0..b2cef8961 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts @@ -22,7 +22,6 @@ export class BootNodeResource extends NodeResource { "app.kubernetes.io/instance": "bootnode", "zombie-role": ZombieRole.BootNode, app: "zombienet", - "zombie-ns": this.namespace, }, }, spec: { diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts index d65914a30..d205ff275 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts @@ -1,2 +1,2 @@ -export { BootNodeResource } from "./bootnodeResource"; +export { BootNodeResource } from "./bootNodeResource"; export { NodeResource } from "./nodeResource"; From c109f8e4ff311577ee0d0fa34e707fa574d4523f Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 1 May 2023 16:20:40 +0300 Subject: [PATCH 03/12] feat: added jaeger ports as constants --- javascript/packages/orchestrator/src/constants.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/javascript/packages/orchestrator/src/constants.ts b/javascript/packages/orchestrator/src/constants.ts index 3d0007724..88015763c 100644 --- a/javascript/packages/orchestrator/src/constants.ts +++ b/javascript/packages/orchestrator/src/constants.ts @@ -18,6 +18,13 @@ const DEFAULT_PORTS = { prometheusPort: PROMETHEUS_PORT, }; +// Jaeger agent container exposed port from: +// https://www.jaegertracing.io/docs/1.6/getting-started/#all-in-one-docker-image +const JAEGER_AGENT_ZIPKIN_COMPACT_PORT = 5775; +const JAEGER_AGENT_SERVE_CONFIGS_PORT = 5778; +const JAEGER_AGENT_THRIFT_COMPACT_PORT = 6831; +const JAEGER_AGENT_THRIFT_BINARY_PORT = 6832; + const DEFAULT_GLOBAL_TIMEOUT = 1200; // 20 mins const DEFAULT_INDIVIDUAL_TEST_TIMEOUT = 10; // seconds const DEFAULT_COMMAND = "polkadot"; @@ -111,6 +118,10 @@ export { RPC_WS_PORT, RPC_HTTP_PORT, P2P_PORT, + JAEGER_AGENT_ZIPKIN_COMPACT_PORT, + JAEGER_AGENT_SERVE_CONFIGS_PORT, + JAEGER_AGENT_THRIFT_COMPACT_PORT, + JAEGER_AGENT_THRIFT_BINARY_PORT, DEFAULT_PORTS, DEFAULT_GLOBAL_TIMEOUT, DEFAULT_INDIVIDUAL_TEST_TIMEOUT, From 945279738907dfc47cae8fc616d1b5b07f0dbf61 Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 1 May 2023 16:23:16 +0300 Subject: [PATCH 04/12] feat: added new ServiceResource and genServiceDef function --- .../providers/k8s/dynResourceDefinition.ts | 8 +- .../src/providers/k8s/resources/index.ts | 1 + .../k8s/resources/serviceResource.ts | 103 ++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 javascript/packages/orchestrator/src/providers/k8s/resources/serviceResource.ts diff --git a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts index 6a4f6af24..15f93546f 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts @@ -3,7 +3,8 @@ import { getUniqueName } from "../../configGenerator"; import { TMP_DONE, WAIT_UNTIL_SCRIPT_SUFIX } from "../../constants"; import { Network } from "../../network"; import { Node, ZombieRole } from "../../types"; -import { BootNodeResource, NodeResource } from "./resources"; +import { BootNodeResource, NodeResource, ServiceResource } from "./resources"; +import { PodSpec, ServiceSpec } from "./resources/types"; export async function genBootnodeDef( namespace: string, @@ -21,6 +22,11 @@ export async function genNodeDef( return nodeResource.generateSpec(); } +export function genServiceDef(podSpec: PodSpec): ServiceSpec { + const serviceResource = new ServiceResource(podSpec); + return serviceResource.generateSpec(); +}; + export function replaceNetworkRef(podDef: any, network: Network) { // replace command if needed in containers for (const container of podDef.spec.containers) { diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts index d205ff275..1a2cc8caf 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts @@ -1,2 +1,3 @@ export { BootNodeResource } from "./bootNodeResource"; export { NodeResource } from "./nodeResource"; +export { ServiceResource } from "./serviceResource"; diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/serviceResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/serviceResource.ts new file mode 100644 index 000000000..8b2ee4647 --- /dev/null +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/serviceResource.ts @@ -0,0 +1,103 @@ +import { + JAEGER_AGENT_SERVE_CONFIGS_PORT, + JAEGER_AGENT_THRIFT_BINARY_PORT, + JAEGER_AGENT_THRIFT_COMPACT_PORT, + JAEGER_AGENT_ZIPKIN_COMPACT_PORT, + P2P_PORT, + PROMETHEUS_PORT, + RPC_HTTP_PORT, + RPC_WS_PORT, +} from "../../../constants"; +import { PodSpec, ServiceSpec } from "./types"; + +export class ServiceResource { + constructor(private readonly podSpec: PodSpec) {} + + public generateSpec() { + const ports = this.generatePorts(); + const name = this.podSpec.metadata.name; + + return this.generateServiceSpec(name, ports); + } + + private shouldExposeJaegerPorts(): boolean { + return this.podSpec.spec.containers.some( + (container) => container.name === "jaeger-agent", + ); + } + + private generatePorts(): ServiceSpec["spec"]["ports"] { + let ports: ServiceSpec["spec"]["ports"] = [ + { + name: "prometheus", + protocol: "TCP", + port: PROMETHEUS_PORT, + targetPort: PROMETHEUS_PORT, + }, + { + name: "rpc-http", + protocol: "TCP", + port: RPC_HTTP_PORT, + targetPort: RPC_HTTP_PORT, + }, + { + name: "rpc-ws", + protocol: "TCP", + port: RPC_WS_PORT, + targetPort: RPC_WS_PORT, + }, + { + name: "p2p", + protocol: "TCP", + port: P2P_PORT, + targetPort: P2P_PORT, + }, + ]; + + if (this.shouldExposeJaegerPorts()) { + ports = ports.concat([ + { + name: "jaeger-agent-zipkin-compact", + protocol: "UDP", + port: JAEGER_AGENT_ZIPKIN_COMPACT_PORT, + targetPort: JAEGER_AGENT_ZIPKIN_COMPACT_PORT, + }, + { + name: "jaeger-agent-serve-configs", + protocol: "TCP", + port: JAEGER_AGENT_SERVE_CONFIGS_PORT, + targetPort: JAEGER_AGENT_SERVE_CONFIGS_PORT, + }, + { + name: "jaeger-agent-thrift-compact", + protocol: "UDP", + port: JAEGER_AGENT_THRIFT_COMPACT_PORT, + targetPort: JAEGER_AGENT_THRIFT_COMPACT_PORT, + }, + { + name: "jaeger-agent-thrift-binary", + protocol: "UDP", + port: JAEGER_AGENT_THRIFT_BINARY_PORT, + targetPort: JAEGER_AGENT_THRIFT_BINARY_PORT, + }, + ]); + } + + return ports; + } + + private generateServiceSpec( + name: string, + ports: ServiceSpec["spec"]["ports"], + ): ServiceSpec { + return { + apiVersion: "v1", + kind: "Service", + metadata: { name }, + spec: { + selector: { "app.kubernetes.io/instance": name }, + ports, + }, + }; + } +} From a5a79a9652d2193393543ec6b9d9318869821028 Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 1 May 2023 16:23:49 +0300 Subject: [PATCH 05/12] feat: added logic to create service for non-temp nodes in kubernetes client --- .../packages/orchestrator/src/providers/k8s/kubeClient.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts b/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts index fb12987e2..4b28aba76 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts @@ -18,13 +18,14 @@ import { TRANSFER_CONTAINER_NAME, TRANSFER_CONTAINER_WAIT_LOG, } from "../../constants"; -import { fileMap } from "../../types"; +import { fileMap, ZombieRole } from "../../types"; import { Client, RunCommandOptions, RunCommandResponse, setClient, } from "../client"; +import { genServiceDef } from "./dynResourceDefinition"; const fs = require("fs").promises; const debug = require("debug")("zombie::kube::client"); @@ -135,6 +136,11 @@ export class KubeClient extends Client { logTable.print(); await this.createResource(podDef, true); + if (podDef.metadata.labels["zombie-role"] !== ZombieRole.Temp) { + const serviceDef = genServiceDef(podDef); + await this.createResource(serviceDef, true); + } + await this.waitTransferContainerReady(name); if (dbSnapshot) { From 0356b03ed1baceaaf1ed3cc104cee46b57290eba Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 1 May 2023 16:26:40 +0300 Subject: [PATCH 06/12] feat: updated how nodeIdentifier is created in orchestrator/spawner --- javascript/packages/orchestrator/src/spawner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/packages/orchestrator/src/spawner.ts b/javascript/packages/orchestrator/src/spawner.ts index c89469cb7..3715ba333 100644 --- a/javascript/packages/orchestrator/src/spawner.ts +++ b/javascript/packages/orchestrator/src/spawner.ts @@ -136,7 +136,7 @@ export const spawnNode = async ( opts.userDefinedTypes, ); } else { - const nodeIdentifier = `${podDef.kind}/${podDef.metadata.name}`; + const nodeIdentifier = `service/${podDef.metadata.name}`; const fwdPort = await client.startPortForwarding( endpointPort, nodeIdentifier, From a326154c6aa5344dd7b29a8829f8041102f61833 Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 1 May 2023 16:31:20 +0300 Subject: [PATCH 07/12] feat: set pod restart policy to always for k8s pods and fixed zombie role label --- .../k8s/resources/bootNodeResource.ts | 2 +- .../providers/k8s/resources/nodeResource.ts | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts index b2cef8961..6b0bb9287 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts @@ -28,7 +28,7 @@ export class BootNodeResource extends NodeResource { hostname: "bootnode", containers, initContainers, - restartPolicy: "Never", + restartPolicy: "Always", volumes, securityContext: { fsGroup: 1000, diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts index b627c87b7..c86eaf05d 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts @@ -8,7 +8,7 @@ import { TRANSFER_CONTAINER_NAME, TRANSFER_CONTAINER_WAIT_LOG, } from "../../../constants"; -import { Node, ZombieRole } from "../../../types"; +import { Node, ZombieRole, ZombieRoleLabel } from "../../../types"; import { Container, ContainerPort, @@ -160,12 +160,24 @@ export class NodeResource { return containers; } + private computeZombieRoleLabel(): ZombieRoleLabel { + const { validator, zombieRole } = this.nodeSetupConfig; + + if (zombieRole) { + return zombieRole; + } + + return validator ? "authority" : "full-node"; + } + protected generatePodSpec( initContainers: Container[], containers: Container[], volumes: Volume[], ): PodSpec { - const { name, validator } = this.nodeSetupConfig; + const { name, zombieRole } = this.nodeSetupConfig; + const zombieRoleLabel = this.computeZombieRoleLabel(); + const restartPolicy = zombieRole === ZombieRole.Temp ? "Never" : "Always"; return { apiVersion: "v1", @@ -173,7 +185,7 @@ export class NodeResource { metadata: { name, labels: { - "zombie-role": validator ? "authority" : "full-node", + "zombie-role": zombieRoleLabel, app: "zombienet", "app.kubernetes.io/name": this.namespace, "app.kubernetes.io/instance": name, @@ -187,7 +199,7 @@ export class NodeResource { hostname: name, containers, initContainers, - restartPolicy: "Never", + restartPolicy, volumes, securityContext: { fsGroup: 1000, From da2a36eda4bf6c2967699133d03b86397dcd0f54 Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 1 May 2023 16:37:55 +0300 Subject: [PATCH 08/12] chore: fix linting errors and updated package-lock --- javascript/package-lock.json | 6 +++--- .../orchestrator/src/providers/k8s/dynResourceDefinition.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/javascript/package-lock.json b/javascript/package-lock.json index a650a7d76..ef2ecdb22 100644 --- a/javascript/package-lock.json +++ b/javascript/package-lock.json @@ -6524,11 +6524,11 @@ }, "packages/cli": { "name": "@zombienet/cli", - "version": "1.3.43", + "version": "1.3.44", "license": "GPL-3.0-or-later", "dependencies": { "@zombienet/dsl-parser-wrapper": "^0.1.7", - "@zombienet/orchestrator": "^0.0.34", + "@zombienet/orchestrator": "^0.0.35", "@zombienet/utils": "^0.0.19", "cli-progress": "^3.12.0", "commander": "^10.0.1", @@ -6550,7 +6550,7 @@ }, "packages/orchestrator": { "name": "@zombienet/orchestrator", - "version": "0.0.34", + "version": "0.0.35", "license": "GPL-3.0-or-later", "dependencies": { "@polkadot/api": "^10.4.1", diff --git a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts index 15f93546f..21734d13d 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts @@ -25,7 +25,7 @@ export async function genNodeDef( export function genServiceDef(podSpec: PodSpec): ServiceSpec { const serviceResource = new ServiceResource(podSpec); return serviceResource.generateSpec(); -}; +} export function replaceNetworkRef(podDef: any, network: Network) { // replace command if needed in containers From f9da133d358204fdada01bd3ef90965ce9470dc8 Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 1 May 2023 19:26:23 +0300 Subject: [PATCH 09/12] feat: updated getNodeIP to return identifier given service exists with this name --- .../packages/orchestrator/src/providers/k8s/kubeClient.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts b/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts index 4b28aba76..3f64ecdf7 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts @@ -499,9 +499,8 @@ export class KubeClient extends Client { } async getNodeIP(identifier: string): Promise { - const args = ["get", "pod", identifier, "-o", "jsonpath={.status.podIP}"]; - const result = await this.runCommand(args); - return result.stdout; + // we just return the identifier because a service exists with the same name + return identifier; } async getNodeInfo( From ad816e5c71f706119d3d0968c901a4b10f476858 Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 1 May 2023 20:48:04 +0300 Subject: [PATCH 10/12] chore: revert modification of getNodeIP --- .../packages/orchestrator/src/providers/k8s/kubeClient.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts b/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts index 3f64ecdf7..4b28aba76 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts @@ -499,8 +499,9 @@ export class KubeClient extends Client { } async getNodeIP(identifier: string): Promise { - // we just return the identifier because a service exists with the same name - return identifier; + const args = ["get", "pod", identifier, "-o", "jsonpath={.status.podIP}"]; + const result = await this.runCommand(args); + return result.stdout; } async getNodeInfo( From 3192ac236c80214856b12c431d4fd5ea2be7052c Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Mon, 1 May 2023 18:58:06 -0300 Subject: [PATCH 11/12] use service name as endpoint in CI --- javascript/packages/orchestrator/src/spawner.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/javascript/packages/orchestrator/src/spawner.ts b/javascript/packages/orchestrator/src/spawner.ts index 3715ba333..9157aea61 100644 --- a/javascript/packages/orchestrator/src/spawner.ts +++ b/javascript/packages/orchestrator/src/spawner.ts @@ -121,7 +121,9 @@ export const spawnNode = async ( const endpointPort = RPC_WS_PORT; if (opts.inCI) { - const nodeIp = await client.getNodeIP(podDef.metadata.name); + // in CI we deploy a service (with the pod name) in front of each pod + // so here we can use the name (as short dns in the ns) to connect to pod. + const nodeIp = podDef.metadata.name; networkNode = new NetworkNode( node.name, WS_URI_PATTERN.replace("{{IP}}", nodeIp).replace( From 17575e3f687fad9b3864de8591219bb87767f13c Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Mon, 1 May 2023 19:45:46 -0300 Subject: [PATCH 12/12] use fqdn --- javascript/packages/orchestrator/src/spawner.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/javascript/packages/orchestrator/src/spawner.ts b/javascript/packages/orchestrator/src/spawner.ts index 9157aea61..6be19f948 100644 --- a/javascript/packages/orchestrator/src/spawner.ts +++ b/javascript/packages/orchestrator/src/spawner.ts @@ -123,14 +123,14 @@ export const spawnNode = async ( if (opts.inCI) { // in CI we deploy a service (with the pod name) in front of each pod // so here we can use the name (as short dns in the ns) to connect to pod. - const nodeIp = podDef.metadata.name; + const nodeDns = `${podDef.metadata.name}.${namespace}.svc.cluster.local`; networkNode = new NetworkNode( node.name, - WS_URI_PATTERN.replace("{{IP}}", nodeIp).replace( + WS_URI_PATTERN.replace("{{IP}}", nodeDns).replace( "{{PORT}}", endpointPort.toString(), ), - METRICS_URI_PATTERN.replace("{{IP}}", nodeIp).replace( + METRICS_URI_PATTERN.replace("{{IP}}", nodeDns).replace( "{{PORT}}", PROMETHEUS_PORT.toString(), ),