Skip to content

updated IPV6 [] and testing#165

Open
peatey wants to merge 5 commits into
developfrom
IPV6-fix-#164
Open

updated IPV6 [] and testing#165
peatey wants to merge 5 commits into
developfrom
IPV6-fix-#164

Conversation

@peatey

@peatey peatey commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

fix: use net.JoinHostPort for IPv6-safe kubelet scrape URLs

Fixes #164

Problem

directNode.formatEndpoint() constructs kubelet scrape URLs via fmt.Sprintf("https://%s:%v/%s", d.ip, d.port, s). On IPv6-only clusters, NodeAddress() returns a bare IPv6 address from the Kubernetes API (e.g. 2a05:d014:1314:704::a282), producing an invalid URL:

https://2a05:d014:1314:704::a282:10250/stats/summary

Go's net/url.Parse (called by http.NewRequest) interprets the colons as port delimiters and fails with invalid port ":d014:1314:..." after host. This silently breaks all node metrics scraping on IPv6-only clusters — the pod stays Running but cost allocation data is completely absent.

Per RFC 3986 §3.2.2, IPv6 literals in URIs must be enclosed in square brackets:

https://[2a05:d014:1314:704::a282]:10250/stats/summary

Fix

Replace bare string concatenation with net.JoinHostPort in pkg/nodes/request.go:

// Before
func (d directNode) formatEndpoint(s string) string {
    return fmt.Sprintf("https://%s:%v/%s", d.ip, d.port, s)
}

// After
func (d directNode) formatEndpoint(s string) string {
return fmt.Sprintf("https://%s/%s", net.JoinHostPort(d.ip, strconv.FormatInt(d.port, 10)), s)
}

net.JoinHostPort is the Go standard library's intended API for this — it wraps IPv6 addresses in brackets automatically and passes IPv4 addresses through unchanged. No behavioural change for existing IPv4 clusters.

Changes

  • pkg/nodes/request.go — Added "net" and "strconv" imports; replaced fmt.Sprintf URL construction with net.JoinHostPort
  • pkg/nodes/request_test.go (new) — Unit tests for formatEndpoint covering IPv4, full IPv6, loopback (::1), and ULA (fd00::1) addresses. Each test verifies the URL is parseable by net/url.Parse

Testing

go test ./pkg/nodes/... -v

All existing tests pass. New tests validate:

Input IP Port Expected Output
10.128.15.239 10250 https://10.128.15.239:10250/stats/summary
2a05:d014:1314:704::a282 10250 https://[2a05:d014:1314:704::a282]:10250/stats/summary
::1 10250 https://[::1]:10250/stats/summary
fd00::1 443 https://[fd00::1]:443/stats/summary

Impact

  • IPv6-only clusters: Fixes complete loss of cost allocation data
  • IPv4 clusters: No change — net.JoinHostPort is a no-op for IPv4
  • Dual-stack clusters: Fix applies when NodeInternalIP resolves to an IPv6 address
# fix: use net.JoinHostPort for IPv6-safe kubelet scrape URLs

Fixes #164

Problem

directNode.formatEndpoint() constructs kubelet scrape URLs via fmt.Sprintf("https://%s:%v/%s", d.ip, d.port, s). On IPv6-only clusters, NodeAddress() returns a bare IPv6 address from the Kubernetes API (e.g. 2a05:d014:1314:704::a282), producing an invalid URL:

https://2a05:d014:1314:704::a282:10250/stats/summary

Go's net/url.Parse (called by http.NewRequest) interprets the colons as port delimiters and fails with invalid port ":d014:1314:..." after host. This silently breaks all node metrics scraping on IPv6-only clusters — the pod stays Running but cost allocation data is completely absent.

Per [RFC 3986 §3.2.2](https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2), IPv6 literals in URIs must be enclosed in square brackets:

https://[2a05:d014:1314:704::a282]:10250/stats/summary

Fix

Replace bare string concatenation with net.JoinHostPort in pkg/nodes/request.go:

// Before
func (d directNode) formatEndpoint(s string) string {
    return fmt.Sprintf("https://%s:%v/%s", d.ip, d.port, s)
}

// After
func (d directNode) formatEndpoint(s string) string {
    return fmt.Sprintf("https://%s/%s", net.JoinHostPort(d.ip, strconv.FormatInt(d.port, 10)), s)
}

net.JoinHostPort is the Go standard library's intended API for this — it wraps IPv6 addresses in brackets automatically and passes IPv4 addresses through unchanged. No behavioural change for existing IPv4 clusters.

Changes

  • pkg/nodes/request.go — Added "net" and "strconv" imports; replaced fmt.Sprintf URL construction with net.JoinHostPort
  • pkg/nodes/request_test.go (new) — Unit tests for formatEndpoint covering IPv4, full IPv6, loopback (::1), and ULA (fd00::1) addresses. Each test verifies the URL is parseable by net/url.Parse

Testing

go test ./pkg/nodes/... -v

All existing tests pass. New tests validate:

Input IP Port Expected Output
10.128.15.239 10250 https://10.128.15.239:10250/stats/summary
2a05:d014:1314:704::a282 10250 https://[2a05:d014:1314:704::a282]:10250/stats/summary
::1 10250 https://[::1]:10250/stats/summary
fd00::1 443 https://[fd00::1]:443/stats/summary

Impact

  • IPv6-only clusters: Fixes complete loss of cost allocation data
  • IPv4 clusters: No change — net.JoinHostPort is a no-op for IPv4
  • Dual-stack clusters: Fix applies when NodeInternalIP resolves to an IPv6 address

{"metadata":{"name":"nodename2","uid":"934ae34e-a4bc-4936-bbfe-5b63f8a092aa","resourceVersion":"377577810","creationTimestamp":"2025-02-27T21:56:56Z","labels":{"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/instance-type":"e2-medium","beta.kubernetes.io/os":"linux","cloud.google.com/gke-boot-disk":"pd-balanced","cloud.google.com/gke-container-runtime":"containerd","cloud.google.com/gke-cpu-scaling-level":"2","cloud.google.com/gke-logging-variant":"DEFAULT","cloud.google.com/gke-max-pods-per-node":"100","cloud.google.com/gke-memory-gb-scaling-level":"4","cloud.google.com/gke-nodepool":"default-pool","cloud.google.com/gke-os-distribution":"cos","cloud.google.com/gke-provisioning":"standard","cloud.google.com/gke-stack-type":"IPV4","cloud.google.com/machine-family":"e2","cloud.google.com/private-node":"false","failure-domain.beta.kubernetes.io/region":"us-central1","failure-domain.beta.kubernetes.io/zone":"us-central1-c","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"nodename2","kubernetes.io/os":"linux","node.kubernetes.io/instance-type":"e2-medium","topology.gke.io/zone":"us-central1-c","topology.kubernetes.io/region":"us-central1","topology.kubernetes.io/zone":"us-central1-c"},"annotations":{"container.googleapis.com/instance_id":"8761733261181149550","csi.volume.kubernetes.io/nodeid":"{\"pd.csi.storage.gke.io\":\"projects/containers-183923/zones/us-central1-c/instances/nodename2\"}","node.alpha.kubernetes.io/ttl":"0","node.gke.io/last-applied-node-labels":"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=100,cloud.google.com/gke-memory-gb-scaling-level=4,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false","node.gke.io/last-applied-node-taints":"","volumes.kubernetes.io/controller-managed-attach-detach":"true"},"managedFields":[{"manager":"cloud-controller-manager","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:56:56Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:labels":{"f:beta.kubernetes.io/instance-type":{},"f:failure-domain.beta.kubernetes.io/region":{},"f:failure-domain.beta.kubernetes.io/zone":{},"f:node.kubernetes.io/instance-type":{},"f:topology.kubernetes.io/region":{},"f:topology.kubernetes.io/zone":{}}},"f:spec":{"f:podCIDR":{},"f:podCIDRs":{".":{},"v:\"10.84.3.0/24\"":{}},"f:providerID":{}}}},{"manager":"cloud-controller-manager","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:56:56Z","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:addresses":{".":{},"k:{\"type\":\"ExternalIP\"}":{".":{},"f:address":{},"f:type":{}},"k:{\"type\":\"InternalIP\"}":{".":{},"f:address":{},"f:type":{}}},"f:conditions":{"k:{\"type\":\"NetworkUnavailable\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}}}}},"subresource":"status"},{"manager":"kube-controller-manager","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:56:56Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{"f:node.alpha.kubernetes.io/ttl":{}}}}},{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:56:56Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:volumes.kubernetes.io/controller-managed-attach-detach":{}},"f:labels":{".":{},"f:beta.kubernetes.io/arch":{},"f:beta.kubernetes.io/os":{},"f:cloud.google.com/gke-boot-disk":{},"f:cloud.google.com/gke-container-runtime":{},"f:cloud.google.com/gke-cpu-scaling-level":{},"f:cloud.google.com/gke-logging-variant":{},"f:cloud.google.com/gke-max-pods-per-node":{},"f:cloud.google.com/gke-memory-gb-scaling-level":{},"f:cloud.google.com/gke-nodepool":{},"f:cloud.google.com/gke-os-distribution":{},"f:cloud.google.com/gke-provisioning":{},"f:cloud.google.com/gke-stack-type":{},"f:cloud.google.com/machine-family":{},"f:cloud.google.com/private-node":{},"f:kubernetes.io/arch":{},"f:kubernetes.io/hostname":{},"f:kubernetes.io/os":{}}}}},{"manager":"gcp-controller-manager","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:56:57Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{"f:container.googleapis.com/instance_id":{},"f:node.gke.io/last-applied-node-labels":{},"f:node.gke.io/last-applied-node-taints":{}}}}},{"manager":"node-problem-detector","operation":"Update","apiVersion":"v1","time":"2025-03-01T23:37:39Z","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:conditions":{"k:{\"type\":\"CorruptDockerOverlay2\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedAuthsFieldInContainerdConfiguration\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedConfigsFieldInContainerdConfiguration\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedMirrorsFieldInContainerdConfiguration\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedOtherContainerdFeatures\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedPullingSchemaV1Image\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedUsingV1Alpha2Cri\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"FrequentContainerdRestart\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"FrequentDockerRestart\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"FrequentKubeletRestart\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"FrequentUnregisterNetDevice\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"KernelDeadlock\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"ReadonlyFilesystem\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"SysctlChanged\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}}}}},"subresource":"status"},{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2025-03-01T23:38:27Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{"f:csi.volume.kubernetes.io/nodeid":{}},"f:labels":{"f:topology.gke.io/zone":{}}},"f:status":{"f:conditions":{"k:{\"type\":\"DiskPressure\"}":{"f:lastHeartbeatTime":{}},"k:{\"type\":\"MemoryPressure\"}":{"f:lastHeartbeatTime":{}},"k:{\"type\":\"PIDPressure\"}":{"f:lastHeartbeatTime":{}},"k:{\"type\":\"Ready\"}":{"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{}}},"f:images":{}}},"subresource":"status"}]},"spec":{"podCIDR":"10.84.3.0/24","podCIDRs":["10.84.3.0/24"],"providerID":"gce://containers-183923/us-central1-c/nodename2"},"status":{"capacity":{"cpu":"2","ephemeral-storage":"98831908Ki","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"4018124Ki","pods":"100"},"allocatable":{"cpu":"940m","ephemeral-storage":"47060071478","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"2872268Ki","pods":"100"},"conditions":[{"type":"SysctlChanged","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"SysctlNotChanged","message":"Default sysctls are in effect, no unexpected sysctl changes"},{"type":"FrequentUnregisterNetDevice","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"NoFrequentUnregisterNetDevice","message":"node is functioning properly"},{"type":"FrequentKubeletRestart","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"NoFrequentKubeletRestart","message":"kubelet is functioning properly"},{"type":"FrequentDockerRestart","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"NoFrequentDockerRestart","message":"docker is functioning properly"},{"type":"DeprecatedUsingV1Alpha2Cri","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"DeprecatedUsingV1Alpha2CriNotDetected","message":"No deprecation risk: did not use v1alpha2 CRI"},{"type":"CorruptDockerOverlay2","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"NoCorruptDockerOverlay2","message":"docker overlay2 is functioning properly"},{"type":"DeprecatedPullingSchemaV1Image","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"DeprecatedPullingSchemaV1ImageDetected","message":"No deprecation risk: did not pull any schema v1 images"},{"type":"DeprecatedMirrorsFieldInContainerdConfiguration","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"DeprecatedMirrorsFieldInContainerdConfigurationNotDetected","message":"No deprecation risk: did not find any deprecated 'mirrors' field in containerd's config"},{"type":"DeprecatedAuthsFieldInContainerdConfiguration","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"DeprecatedAuthsFieldInContainerdConfigurationNotDetected","message":"No deprecation risk: did not find any deprecated 'auths' field in containerd's config"},{"type":"KernelDeadlock","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"KernelHasNoDeadlock","message":"kernel has no deadlock"},{"type":"DeprecatedOtherContainerdFeatures","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"DeprecatedOtherContainerdFeaturesNotDetected","message":"No deprecation risk: did not find any deprecations other than 3 configs fields (auths/configs/mirrors), pulling schema v1 images and using v1alpha2 CRI."},{"type":"DeprecatedConfigsFieldInContainerdConfiguration","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"DeprecatedConfigsFieldInContainerdConfigurationNotDetected","message":"No deprecation risk: did not find any deprecated 'configs' field in containerd's config"},{"type":"FrequentContainerdRestart","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"NoFrequentContainerdRestart","message":"containerd is functioning properly"},{"type":"ReadonlyFilesystem","status":"False","lastHeartbeatTime":"2025-03-01T23:37:39Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"FilesystemIsNotReadOnly","message":"Filesystem is not read-only"},{"type":"NetworkUnavailable","status":"False","lastHeartbeatTime":"2025-02-27T21:56:56Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"RouteCreated","message":"NodeController create implicit route"},{"type":"MemoryPressure","status":"False","lastHeartbeatTime":"2025-03-01T23:38:27Z","lastTransitionTime":"2025-02-27T21:56:54Z","reason":"KubeletHasSufficientMemory","message":"kubelet has sufficient memory available"},{"type":"DiskPressure","status":"False","lastHeartbeatTime":"2025-03-01T23:38:27Z","lastTransitionTime":"2025-02-27T21:56:54Z","reason":"KubeletHasNoDiskPressure","message":"kubelet has no disk pressure"},{"type":"PIDPressure","status":"False","lastHeartbeatTime":"2025-03-01T23:38:27Z","lastTransitionTime":"2025-02-27T21:56:54Z","reason":"KubeletHasSufficientPID","message":"kubelet has sufficient PID available"},{"type":"Ready","status":"True","lastHeartbeatTime":"2025-03-01T23:38:27Z","lastTransitionTime":"2025-02-27T21:56:56Z","reason":"KubeletReady","message":"kubelet is posting ready status"}],"addresses":[{"type":"InternalIP","address":"10.128.15.218"},{"type":"ExternalIP","address":"104.154.120.113"}],"daemonEndpoints":{"kubeletEndpoint":{"Port":10250}},"nodeInfo":{"machineID":"0a8dd5524cb9aff0eea913210e98dab7","systemUUID":"0a8dd552-4cb9-aff0-eea9-13210e98dab7","bootID":"a2e09d0b-ad28-471c-a375-3959a856c779","kernelVersion":"6.1.123+","osImage":"Container-Optimized OS from Google","containerRuntimeVersion":"containerd://1.7.24","kubeletVersion":"v1.30.9-gke.1127000","kubeProxyVersion":"v1.30.9-gke.1127000","operatingSystem":"linux","architecture":"amd64"},"images":[{"names":["asia.gcr.io/gke-release-staging/cilium/cilium@sha256:a69b8b0cab532f641f2bcdd823842599b852666f1bcc763200b9cf4b3f40537f","eu.gcr.io/gke-release-staging/cilium/cilium@sha256:a69b8b0cab532f641f2bcdd823842599b852666f1bcc763200b9cf4b3f40537f","gcr.io/gke-release-staging/cilium/cilium@sha256:a69b8b0cab532f641f2bcdd823842599b852666f1bcc763200b9cf4b3f40537f","asia.gke.gcr.io/cilium/cilium:v1.14.13-gke1.30-gke.64","eu.gke.gcr.io/cilium/cilium:v1.14.13-gke1.30-gke.64"],"sizeBytes":171632673},{"names":["gke.gcr.io/prometheus-engine/prometheus@sha256:3e6493d4b01ab583382731491d980bc164873ad4969e92c0bdd0da278359ccac"],"sizeBytes":113010021},{"names":["gke.gcr.io/fluent-bit@sha256:bd48755377a723a91bc3fd96f67796ba3a3023808fd69b37d97cb1aa5985d9ae"],"sizeBytes":93330926},{"names":["gke.gcr.io/kube-proxy-amd64:v1.30.9-gke.1127000","gke.gcr.io/kube-proxy-amd64:v1.30.9-gke.500","k8s.gcr.io/kube-proxy-amd64:v1.30.9-gke.500"],"sizeBytes":88273080},{"names":["gke.gcr.io/gcp-compute-persistent-disk-csi-driver@sha256:bbbf275b1482cf3fc658f0bde28b1fbd24054451b5a97e23812821c82374a2b2"],"sizeBytes":60814920},{"names":["gke.gcr.io/prometheus-engine/config-reloader@sha256:d199f266545ee281fa51d30e0a5f9c4da27da23055b153ca93adbf7483d19633"],"sizeBytes":59834302},{"names":["asia.gcr.io/gke-release-staging/cilium/certgen@sha256:73529e65f241d2b390d4eadb4b886ea9de8c3ef27ae3854733d6a9cbefd6d0b0","eu.gcr.io/gke-release-staging/cilium/certgen@sha256:73529e65f241d2b390d4eadb4b886ea9de8c3ef27ae3854733d6a9cbefd6d0b0","gcr.io/gke-release-staging/cilium/certgen@sha256:73529e65f241d2b390d4eadb4b886ea9de8c3ef27ae3854733d6a9cbefd6d0b0","asia.gke.gcr.io/cilium/certgen:v0.1.13-gke.14","eu.gke.gcr.io/cilium/certgen:v0.1.13-gke.14"],"sizeBytes":40760357},{"names":["gke.gcr.io/k8s-dns-dnsmasq-nanny@sha256:e178b753d49a90ec32f1f45e0f52ce64019641d3fd45d8deadcf08cb73b8c840"],"sizeBytes":37001839},{"names":["gke.gcr.io/prometheus-to-sd@sha256:443ce4937d4bc893e894cd740c730e9039ccc76e0bd7494d8bf8725486658e10"],"sizeBytes":35881529},{"names":["docker.io/cloudability/metrics-agent@sha256:88da6d41e0cd48be4e273fc4bb640c98883259c3b8e450175725e75150b075dd","docker.io/cloudability/metrics-agent:latest"],"sizeBytes":35846897},{"names":["asia.gcr.io/gke-release-staging/cilium/slim-daemon/anet-agent@sha256:1a871e457e08d4e3e06a079f76e6a5a67c5869797ae305a6fb7f1e2c4712f0cd","eu.gcr.io/gke-release-staging/cilium/slim-daemon/anet-agent@sha256:1a871e457e08d4e3e06a079f76e6a5a67c5869797ae305a6fb7f1e2c4712f0cd","gcr.io/gke-release-staging/cilium/slim-daemon/anet-agent@sha256:1a871e457e08d4e3e06a079f76e6a5a67c5869797ae305a6fb7f1e2c4712f0cd","asia.gke.gcr.io/cilium/slim-daemon/anet-agent:v1.14.13-gke1.30-gke.64","eu.gke.gcr.io/cilium/slim-daemon/anet-agent:v1.14.13-gke1.30-gke.64"],"sizeBytes":33172919},{"names":["gke.gcr.io/fluent-bit-gke-exporter@sha256:0ed31fb2cc1b2b747a1e304a5530124c97909a0eb17774c7ce80595abf73d1e6"],"sizeBytes":32969391},{"names":["gke.gcr.io/k8s-dns-kube-dns@sha256:b609a51c8aa4add2d1d0811737f177b4e944ea0781a48eead0d804722787f96f"],"sizeBytes":32667404},{"names":["gke.gcr.io/k8s-dns-sidecar@sha256:9e60f83b54d010a7dd7e5a868a6713ad410442c72f0b7540cda010c50651c0bc"],"sizeBytes":29112653},{"names":["gke.gcr.io/gke-metrics-agent@sha256:be215beaf8f2acd5c4f64ff3d28e6dc60071ef6f0da5eb9774fda69148c38ba4"],"sizeBytes":27003958},{"names":["gke.gcr.io/gke-metrics-collector@sha256:3d76420863be0cdbdf5f9a512e032d9b20ae8fd7be4b5eca22ecdb1e867f23bf"],"sizeBytes":25809971},{"names":["gke.gcr.io/gke-metrics-collector@sha256:360c05bb437d77b55090ba512bddfda52f62166c78171593d1152327db2a914f"],"sizeBytes":25582287},{"names":["gke.gcr.io/gke-metrics-collector@sha256:d460e6b5088332f62b990f8a1f7bf6d9eca7c3f41cb974e3db493d6b0fc4ad70"],"sizeBytes":24425624},{"names":["gke.gcr.io/gke-metrics-collector@sha256:463e73163c4d343b8a3327e0d2e8e955d22434e9005a1a188275ac55b8cfebb4"],"sizeBytes":24343841},{"names":["asia.gcr.io/gke-release-staging/cilium/hubble-cli@sha256:327d40413ece3e0cf8e14cebd5d24b15a1987bf8a4e5ec369dabdb17203e62c2","eu.gcr.io/gke-release-staging/cilium/hubble-cli@sha256:327d40413ece3e0cf8e14cebd5d24b15a1987bf8a4e5ec369dabdb17203e62c2","gcr.io/gke-release-staging/cilium/hubble-cli@sha256:327d40413ece3e0cf8e14cebd5d24b15a1987bf8a4e5ec369dabdb17203e62c2","asia.gke.gcr.io/cilium/hubble-cli:v0.13.5-gke.14","eu.gke.gcr.io/cilium/hubble-cli:v0.13.5-gke.14"],"sizeBytes":24123625},{"names":["asia.gcr.io/gke-release-staging/anthos-networking/anetd-sidecar@sha256:2a788f8b3fc1112f706a7b22f13fb0e430d76c5743e6f8a6c2c350345f3a006d","eu.gcr.io/gke-release-staging/anthos-networking/anetd-sidecar@sha256:2a788f8b3fc1112f706a7b22f13fb0e430d76c5743e6f8a6c2c350345f3a006d","gcr.io/gke-release-staging/anthos-networking/anetd-sidecar@sha256:2a788f8b3fc1112f706a7b22f13fb0e430d76c5743e6f8a6c2c350345f3a006d","asia.gke.gcr.io/anthos-networking/anetd-sidecar:v2.9.77","eu.gke.gcr.io/anthos-networking/anetd-sidecar:v2.9.77"],"sizeBytes":23881188},{"names":["asia.gcr.io/gke-release-staging/gke-metrics-collector@sha256:1593f1e9570b99b1843cc886b723d4e291e2281fe2b9e45f565064cac379e4cf","eu.gcr.io/gke-release-staging/gke-metrics-collector@sha256:1593f1e9570b99b1843cc886b723d4e291e2281fe2b9e45f565064cac379e4cf","gcr.io/gke-release-staging/gke-metrics-collector@sha256:1593f1e9570b99b1843cc886b723d4e291e2281fe2b9e45f565064cac379e4cf","asia.gke.gcr.io/gke-metrics-collector:20240508_2300_RC0","eu.gke.gcr.io/gke-metrics-collector:20240508_2300_RC0"],"sizeBytes":23823718},{"names":["asia.gcr.io/gke-release-staging/gke-metrics-collector@sha256:545f5594f9a6ee714b315897f92edeaa858b1074e4c6a38894353214907e4fe5","eu.gcr.io/gke-release-staging/gke-metrics-collector@sha256:545f5594f9a6ee714b315897f92edeaa858b1074e4c6a38894353214907e4fe5","gcr.io/gke-release-staging/gke-metrics-collector@sha256:545f5594f9a6ee714b315897f92edeaa858b1074e4c6a38894353214907e4fe5","asia.gke.gcr.io/gke-metrics-collector:20240425_2300_RC0","eu.gke.gcr.io/gke-metrics-collector:20240425_2300_RC0"],"sizeBytes":23717101},{"names":["asia.gcr.io/gke-release-staging/netd@sha256:6ca0892cc32f66705087257c12ef97f3f27b270402e03299450b19ecb93e48e6","eu.gcr.io/gke-release-staging/netd@sha256:6ca0892cc32f66705087257c12ef97f3f27b270402e03299450b19ecb93e48e6","gcr.io/gke-release-staging/netd@sha256:6ca0892cc32f66705087257c12ef97f3f27b270402e03299450b19ecb93e48e6","asia.gke.gcr.io/netd:v0.8.4-gke.18","eu.gke.gcr.io/netd:v0.8.4-gke.18"],"sizeBytes":23427157},{"names":["asia.gcr.io/gke-release-staging/cilium/hubble-relay@sha256:365232539d4c473b20544833b79b2fe448190dc2a5280e6bd38b672a2d7ad121","eu.gcr.io/gke-release-staging/cilium/hubble-relay@sha256:365232539d4c473b20544833b79b2fe448190dc2a5280e6bd38b672a2d7ad121","gcr.io/gke-release-staging/cilium/hubble-relay@sha256:365232539d4c473b20544833b79b2fe448190dc2a5280e6bd38b672a2d7ad121","asia.gke.gcr.io/cilium/hubble-relay:v1.14.13-gke1.30-gke.64","eu.gke.gcr.io/cilium/hubble-relay:v1.14.13-gke1.30-gke.64"],"sizeBytes":21850766}]}}
{"metadata":{"name":"nodename3","uid":"e11a5a98-56c9-4bc9-b8f7-1e951f1f2140","resourceVersion":"377579378","creationTimestamp":"2025-02-27T21:49:29Z","labels":{"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/instance-type":"e2-medium","beta.kubernetes.io/os":"linux","cloud.google.com/gke-boot-disk":"pd-balanced","cloud.google.com/gke-container-runtime":"containerd","cloud.google.com/gke-cpu-scaling-level":"2","cloud.google.com/gke-logging-variant":"DEFAULT","cloud.google.com/gke-max-pods-per-node":"100","cloud.google.com/gke-memory-gb-scaling-level":"4","cloud.google.com/gke-nodepool":"default-pool","cloud.google.com/gke-os-distribution":"cos","cloud.google.com/gke-provisioning":"standard","cloud.google.com/gke-stack-type":"IPV4","cloud.google.com/machine-family":"e2","cloud.google.com/private-node":"false","failure-domain.beta.kubernetes.io/region":"us-central1","failure-domain.beta.kubernetes.io/zone":"us-central1-c","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"nodename3","kubernetes.io/os":"linux","node.kubernetes.io/instance-type":"e2-medium","topology.gke.io/zone":"us-central1-c","topology.kubernetes.io/region":"us-central1","topology.kubernetes.io/zone":"us-central1-c"},"annotations":{"container.googleapis.com/instance_id":"2148973188718879535","csi.volume.kubernetes.io/nodeid":"{\"pd.csi.storage.gke.io\":\"projects/containers-183923/zones/us-central1-c/instances/nodename3\"}","node.alpha.kubernetes.io/ttl":"0","node.gke.io/last-applied-node-labels":"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=100,cloud.google.com/gke-memory-gb-scaling-level=4,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false","node.gke.io/last-applied-node-taints":"","volumes.kubernetes.io/controller-managed-attach-detach":"true"},"managedFields":[{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:49:29Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:volumes.kubernetes.io/controller-managed-attach-detach":{}},"f:labels":{".":{},"f:beta.kubernetes.io/arch":{},"f:beta.kubernetes.io/os":{},"f:cloud.google.com/gke-boot-disk":{},"f:cloud.google.com/gke-container-runtime":{},"f:cloud.google.com/gke-cpu-scaling-level":{},"f:cloud.google.com/gke-logging-variant":{},"f:cloud.google.com/gke-max-pods-per-node":{},"f:cloud.google.com/gke-memory-gb-scaling-level":{},"f:cloud.google.com/gke-nodepool":{},"f:cloud.google.com/gke-os-distribution":{},"f:cloud.google.com/gke-provisioning":{},"f:cloud.google.com/gke-stack-type":{},"f:cloud.google.com/machine-family":{},"f:cloud.google.com/private-node":{},"f:kubernetes.io/arch":{},"f:kubernetes.io/hostname":{},"f:kubernetes.io/os":{}}}}},{"manager":"cloud-controller-manager","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:49:30Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:labels":{"f:beta.kubernetes.io/instance-type":{},"f:failure-domain.beta.kubernetes.io/region":{},"f:failure-domain.beta.kubernetes.io/zone":{},"f:node.kubernetes.io/instance-type":{},"f:topology.kubernetes.io/region":{},"f:topology.kubernetes.io/zone":{}}},"f:spec":{"f:podCIDR":{},"f:podCIDRs":{".":{},"v:\"10.84.4.0/24\"":{}},"f:providerID":{}}}},{"manager":"cloud-controller-manager","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:49:30Z","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:addresses":{".":{},"k:{\"type\":\"ExternalIP\"}":{".":{},"f:address":{},"f:type":{}},"k:{\"type\":\"InternalIP\"}":{".":{},"f:address":{},"f:type":{}}},"f:conditions":{"k:{\"type\":\"NetworkUnavailable\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}}}}},"subresource":"status"},{"manager":"kube-controller-manager","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:49:30Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{"f:node.alpha.kubernetes.io/ttl":{}}}}},{"manager":"gcp-controller-manager","operation":"Update","apiVersion":"v1","time":"2025-02-27T21:49:31Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{"f:container.googleapis.com/instance_id":{},"f:node.gke.io/last-applied-node-labels":{},"f:node.gke.io/last-applied-node-taints":{}}}}},{"manager":"node-problem-detector","operation":"Update","apiVersion":"v1","time":"2025-03-01T23:40:09Z","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:conditions":{"k:{\"type\":\"CorruptDockerOverlay2\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedAuthsFieldInContainerdConfiguration\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedConfigsFieldInContainerdConfiguration\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedMirrorsFieldInContainerdConfiguration\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedOtherContainerdFeatures\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedPullingSchemaV1Image\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"DeprecatedUsingV1Alpha2Cri\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"FrequentContainerdRestart\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"FrequentDockerRestart\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"FrequentKubeletRestart\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"FrequentUnregisterNetDevice\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"KernelDeadlock\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"ReadonlyFilesystem\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"SysctlChanged\"}":{".":{},"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}}}}},"subresource":"status"},{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2025-03-01T23:41:05Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{"f:csi.volume.kubernetes.io/nodeid":{}},"f:labels":{"f:topology.gke.io/zone":{}}},"f:status":{"f:conditions":{"k:{\"type\":\"DiskPressure\"}":{"f:lastHeartbeatTime":{}},"k:{\"type\":\"MemoryPressure\"}":{"f:lastHeartbeatTime":{}},"k:{\"type\":\"PIDPressure\"}":{"f:lastHeartbeatTime":{}},"k:{\"type\":\"Ready\"}":{"f:lastHeartbeatTime":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{}}},"f:images":{}}},"subresource":"status"}]},"spec":{"podCIDR":"10.84.4.0/24","podCIDRs":["10.84.4.0/24"],"providerID":"gce://containers-183923/us-central1-c/nodename3"},"status":{"capacity":{"cpu":"2","ephemeral-storage":"98831908Ki","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"4018132Ki","pods":"100"},"allocatable":{"cpu":"940m","ephemeral-storage":"47060071478","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"2872276Ki","pods":"100"},"conditions":[{"type":"DeprecatedUsingV1Alpha2Cri","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"DeprecatedUsingV1Alpha2CriNotDetected","message":"No deprecation risk: did not use v1alpha2 CRI"},{"type":"CorruptDockerOverlay2","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"NoCorruptDockerOverlay2","message":"docker overlay2 is functioning properly"},{"type":"SysctlChanged","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"SysctlNotChanged","message":"Default sysctls are in effect, no unexpected sysctl changes"},{"type":"DeprecatedAuthsFieldInContainerdConfiguration","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"DeprecatedAuthsFieldInContainerdConfigurationNotDetected","message":"No deprecation risk: did not find any deprecated 'auths' field in containerd's config"},{"type":"FrequentUnregisterNetDevice","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"NoFrequentUnregisterNetDevice","message":"node is functioning properly"},{"type":"FrequentContainerdRestart","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"NoFrequentContainerdRestart","message":"containerd is functioning properly"},{"type":"DeprecatedPullingSchemaV1Image","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"DeprecatedPullingSchemaV1ImageDetected","message":"No deprecation risk: did not pull any schema v1 images"},{"type":"FrequentDockerRestart","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"NoFrequentDockerRestart","message":"docker is functioning properly"},{"type":"DeprecatedOtherContainerdFeatures","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"DeprecatedOtherContainerdFeaturesNotDetected","message":"No deprecation risk: did not find any deprecations other than 3 configs fields (auths/configs/mirrors), pulling schema v1 images and using v1alpha2 CRI."},{"type":"DeprecatedConfigsFieldInContainerdConfiguration","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:30Z","reason":"DeprecatedConfigsFieldInContainerdConfigurationNotDetected","message":"No deprecation risk: did not find any deprecated 'configs' field in containerd's config"},{"type":"ReadonlyFilesystem","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"FilesystemIsNotReadOnly","message":"Filesystem is not read-only"},{"type":"DeprecatedMirrorsFieldInContainerdConfiguration","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"DeprecatedMirrorsFieldInContainerdConfigurationNotDetected","message":"No deprecation risk: did not find any deprecated 'mirrors' field in containerd's config"},{"type":"KernelDeadlock","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"KernelHasNoDeadlock","message":"kernel has no deadlock"},{"type":"FrequentKubeletRestart","status":"False","lastHeartbeatTime":"2025-03-01T23:40:09Z","lastTransitionTime":"2025-02-27T21:49:29Z","reason":"NoFrequentKubeletRestart","message":"kubelet is functioning properly"},{"type":"NetworkUnavailable","status":"False","lastHeartbeatTime":"2025-02-27T21:49:30Z","lastTransitionTime":"2025-02-27T21:49:30Z","reason":"RouteCreated","message":"NodeController create implicit route"},{"type":"MemoryPressure","status":"False","lastHeartbeatTime":"2025-03-01T23:41:05Z","lastTransitionTime":"2025-02-27T21:49:27Z","reason":"KubeletHasSufficientMemory","message":"kubelet has sufficient memory available"},{"type":"DiskPressure","status":"False","lastHeartbeatTime":"2025-03-01T23:41:05Z","lastTransitionTime":"2025-02-27T21:49:27Z","reason":"KubeletHasNoDiskPressure","message":"kubelet has no disk pressure"},{"type":"PIDPressure","status":"False","lastHeartbeatTime":"2025-03-01T23:41:05Z","lastTransitionTime":"2025-02-27T21:49:27Z","reason":"KubeletHasSufficientPID","message":"kubelet has sufficient PID available"},{"type":"Ready","status":"True","lastHeartbeatTime":"2025-03-01T23:41:05Z","lastTransitionTime":"2025-02-27T21:49:30Z","reason":"KubeletReady","message":"kubelet is posting ready status"}],"addresses":[{"type":"InternalIP","address":"10.128.15.217"},{"type":"ExternalIP","address":"34.56.144.234"}],"daemonEndpoints":{"kubeletEndpoint":{"Port":10250}},"nodeInfo":{"machineID":"97fb66702ba318020f503a2cb0c3d8e7","systemUUID":"97fb6670-2ba3-1802-0f50-3a2cb0c3d8e7","bootID":"22f0f516-6608-4f80-bfb8-d2529fe5b7d7","kernelVersion":"6.1.123+","osImage":"Container-Optimized OS from Google","containerRuntimeVersion":"containerd://1.7.24","kubeletVersion":"v1.30.9-gke.1127000","kubeProxyVersion":"v1.30.9-gke.1127000","operatingSystem":"linux","architecture":"amd64"},"images":[{"names":["asia.gcr.io/gke-release-staging/cilium/cilium@sha256:a69b8b0cab532f641f2bcdd823842599b852666f1bcc763200b9cf4b3f40537f","eu.gcr.io/gke-release-staging/cilium/cilium@sha256:a69b8b0cab532f641f2bcdd823842599b852666f1bcc763200b9cf4b3f40537f","gcr.io/gke-release-staging/cilium/cilium@sha256:a69b8b0cab532f641f2bcdd823842599b852666f1bcc763200b9cf4b3f40537f","asia.gke.gcr.io/cilium/cilium:v1.14.13-gke1.30-gke.64","eu.gke.gcr.io/cilium/cilium:v1.14.13-gke1.30-gke.64"],"sizeBytes":171632673},{"names":["gke.gcr.io/prometheus-engine/prometheus@sha256:3e6493d4b01ab583382731491d980bc164873ad4969e92c0bdd0da278359ccac"],"sizeBytes":113010021},{"names":["gke.gcr.io/fluent-bit@sha256:bd48755377a723a91bc3fd96f67796ba3a3023808fd69b37d97cb1aa5985d9ae"],"sizeBytes":93330926},{"names":["gke.gcr.io/kube-proxy-amd64:v1.30.9-gke.1127000","gke.gcr.io/kube-proxy-amd64:v1.30.9-gke.500","k8s.gcr.io/kube-proxy-amd64:v1.30.9-gke.500"],"sizeBytes":88273080},{"names":["gke.gcr.io/gcp-compute-persistent-disk-csi-driver@sha256:bbbf275b1482cf3fc658f0bde28b1fbd24054451b5a97e23812821c82374a2b2"],"sizeBytes":60814920},{"names":["gke.gcr.io/prometheus-engine/config-reloader@sha256:d199f266545ee281fa51d30e0a5f9c4da27da23055b153ca93adbf7483d19633"],"sizeBytes":59834302},{"names":["asia.gcr.io/gke-release-staging/cilium/certgen@sha256:73529e65f241d2b390d4eadb4b886ea9de8c3ef27ae3854733d6a9cbefd6d0b0","eu.gcr.io/gke-release-staging/cilium/certgen@sha256:73529e65f241d2b390d4eadb4b886ea9de8c3ef27ae3854733d6a9cbefd6d0b0","gcr.io/gke-release-staging/cilium/certgen@sha256:73529e65f241d2b390d4eadb4b886ea9de8c3ef27ae3854733d6a9cbefd6d0b0","asia.gke.gcr.io/cilium/certgen:v0.1.13-gke.14","eu.gke.gcr.io/cilium/certgen:v0.1.13-gke.14"],"sizeBytes":40760357},{"names":["docker.io/artichoke111/metrics-agent@sha256:3cbe3fbd370ee77dc47fc4a918b14822811d22585566791a9f4ecc569d9c29c9","docker.io/artichoke111/metrics-agent:metrics-agent-2.11.17-dirty"],"sizeBytes":35927772},{"names":["docker.io/cloudability/metrics-agent@sha256:88da6d41e0cd48be4e273fc4bb640c98883259c3b8e450175725e75150b075dd","docker.io/cloudability/metrics-agent:latest"],"sizeBytes":35846897},{"names":["asia.gcr.io/gke-release-staging/cilium/slim-daemon/anet-agent@sha256:1a871e457e08d4e3e06a079f76e6a5a67c5869797ae305a6fb7f1e2c4712f0cd","eu.gcr.io/gke-release-staging/cilium/slim-daemon/anet-agent@sha256:1a871e457e08d4e3e06a079f76e6a5a67c5869797ae305a6fb7f1e2c4712f0cd","gcr.io/gke-release-staging/cilium/slim-daemon/anet-agent@sha256:1a871e457e08d4e3e06a079f76e6a5a67c5869797ae305a6fb7f1e2c4712f0cd","asia.gke.gcr.io/cilium/slim-daemon/anet-agent:v1.14.13-gke1.30-gke.64","eu.gke.gcr.io/cilium/slim-daemon/anet-agent:v1.14.13-gke1.30-gke.64"],"sizeBytes":33172919},{"names":["gke.gcr.io/fluent-bit-gke-exporter@sha256:0ed31fb2cc1b2b747a1e304a5530124c97909a0eb17774c7ce80595abf73d1e6"],"sizeBytes":32969391},{"names":["gke.gcr.io/gke-metrics-agent@sha256:be215beaf8f2acd5c4f64ff3d28e6dc60071ef6f0da5eb9774fda69148c38ba4"],"sizeBytes":27003958},{"names":["gke.gcr.io/gke-metrics-collector@sha256:3d76420863be0cdbdf5f9a512e032d9b20ae8fd7be4b5eca22ecdb1e867f23bf"],"sizeBytes":25809971},{"names":["gke.gcr.io/gke-metrics-collector@sha256:d460e6b5088332f62b990f8a1f7bf6d9eca7c3f41cb974e3db493d6b0fc4ad70"],"sizeBytes":24425624},{"names":["gke.gcr.io/gke-metrics-collector@sha256:463e73163c4d343b8a3327e0d2e8e955d22434e9005a1a188275ac55b8cfebb4"],"sizeBytes":24343841},{"names":["asia.gcr.io/gke-release-staging/cilium/hubble-cli@sha256:327d40413ece3e0cf8e14cebd5d24b15a1987bf8a4e5ec369dabdb17203e62c2","eu.gcr.io/gke-release-staging/cilium/hubble-cli@sha256:327d40413ece3e0cf8e14cebd5d24b15a1987bf8a4e5ec369dabdb17203e62c2","gcr.io/gke-release-staging/cilium/hubble-cli@sha256:327d40413ece3e0cf8e14cebd5d24b15a1987bf8a4e5ec369dabdb17203e62c2","asia.gke.gcr.io/cilium/hubble-cli:v0.13.5-gke.14","eu.gke.gcr.io/cilium/hubble-cli:v0.13.5-gke.14"],"sizeBytes":24123625},{"names":["asia.gcr.io/gke-release-staging/anthos-networking/anetd-sidecar@sha256:2a788f8b3fc1112f706a7b22f13fb0e430d76c5743e6f8a6c2c350345f3a006d","eu.gcr.io/gke-release-staging/anthos-networking/anetd-sidecar@sha256:2a788f8b3fc1112f706a7b22f13fb0e430d76c5743e6f8a6c2c350345f3a006d","gcr.io/gke-release-staging/anthos-networking/anetd-sidecar@sha256:2a788f8b3fc1112f706a7b22f13fb0e430d76c5743e6f8a6c2c350345f3a006d","asia.gke.gcr.io/anthos-networking/anetd-sidecar:v2.9.77","eu.gke.gcr.io/anthos-networking/anetd-sidecar:v2.9.77"],"sizeBytes":23881188},{"names":["asia.gcr.io/gke-release-staging/gke-metrics-collector@sha256:1593f1e9570b99b1843cc886b723d4e291e2281fe2b9e45f565064cac379e4cf","eu.gcr.io/gke-release-staging/gke-metrics-collector@sha256:1593f1e9570b99b1843cc886b723d4e291e2281fe2b9e45f565064cac379e4cf","gcr.io/gke-release-staging/gke-metrics-collector@sha256:1593f1e9570b99b1843cc886b723d4e291e2281fe2b9e45f565064cac379e4cf","asia.gke.gcr.io/gke-metrics-collector:20240508_2300_RC0","eu.gke.gcr.io/gke-metrics-collector:20240508_2300_RC0"],"sizeBytes":23823718},{"names":["asia.gcr.io/gke-release-staging/gke-metrics-collector@sha256:545f5594f9a6ee714b315897f92edeaa858b1074e4c6a38894353214907e4fe5","eu.gcr.io/gke-release-staging/gke-metrics-collector@sha256:545f5594f9a6ee714b315897f92edeaa858b1074e4c6a38894353214907e4fe5","gcr.io/gke-release-staging/gke-metrics-collector@sha256:545f5594f9a6ee714b315897f92edeaa858b1074e4c6a38894353214907e4fe5","asia.gke.gcr.io/gke-metrics-collector:20240425_2300_RC0","eu.gke.gcr.io/gke-metrics-collector:20240425_2300_RC0"],"sizeBytes":23805895},{"names":["asia.gcr.io/gke-release-staging/netd@sha256:6ca0892cc32f66705087257c12ef97f3f27b270402e03299450b19ecb93e48e6","eu.gcr.io/gke-release-staging/netd@sha256:6ca0892cc32f66705087257c12ef97f3f27b270402e03299450b19ecb93e48e6","gcr.io/gke-release-staging/netd@sha256:6ca0892cc32f66705087257c12ef97f3f27b270402e03299450b19ecb93e48e6","asia.gke.gcr.io/netd:v0.8.4-gke.18","eu.gke.gcr.io/netd:v0.8.4-gke.18"],"sizeBytes":23427157},{"names":["asia.gcr.io/gke-release-staging/cilium/hubble-relay@sha256:365232539d4c473b20544833b79b2fe448190dc2a5280e6bd38b672a2d7ad121","eu.gcr.io/gke-release-staging/cilium/hubble-relay@sha256:365232539d4c473b20544833b79b2fe448190dc2a5280e6bd38b672a2d7ad121","gcr.io/gke-release-staging/cilium/hubble-relay@sha256:365232539d4c473b20544833b79b2fe448190dc2a5280e6bd38b672a2d7ad121","asia.gke.gcr.io/cilium/hubble-relay:v1.14.13-gke1.30-gke.64","eu.gke.gcr.io/cilium/hubble-relay:v1.14.13-gke1.30-gke.64"],"sizeBytes":21850766},{"names":["gke.gcr.io/gke-distroless/bash@sha256:12d99a6a72f4fecd689ead5d93001c1f3acea08ec72a55bbdfc070e0edc30fa4"],"sizeBytes":18654784},{"names":["gke.gcr.io/gke-distroless/bash@sha256:ec5022c67b5316ae07f44ed374894e9bb55d548884d293da6b0d350a46dff2df"],"sizeBytes":18373482},{"names":["asia.gcr.io/gke-release-staging/ip-masq-agent@sha256:4035e9a6996d792ded07e94aab4e0a54bd3a3d58dddbbd0fb4edc8898a4c4d71","eu.gcr.io/gke-release-staging/ip-masq-agent@sha256:4035e9a6996d792ded07e94aab4e0a54bd3a3d58dddbbd0fb4edc8898a4c4d71","gcr.io/gke-release-staging/ip-masq-agent@sha256:4035e9a6996d792ded07e94aab4e0a54bd3a3d58dddbbd0fb4edc8898a4c4d71","asia.gke.gcr.io/ip-masq-agent:v2.11.0-gke.30","eu.gke.gcr.io/ip-masq-agent:v2.11.0-gke.30"],"sizeBytes":16420466},{"names":["asia.gcr.io/gke-release-staging/netd-init@sha256:96c1dd2984b3d3f7029242b9248a0dcbdde2714e7d92bdbc51e9a85f60f0e9f3","eu.gcr.io/gke-release-staging/netd-init@sha256:96c1dd2984b3d3f7029242b9248a0dcbdde2714e7d92bdbc51e9a85f60f0e9f3","gcr.io/gke-release-staging/netd-init@sha256:96c1dd2984b3d3f7029242b9248a0dcbdde2714e7d92bdbc51e9a85f60f0e9f3","asia.gke.gcr.io/netd-init:v0.8.4-gke.18","eu.gke.gcr.io/netd-init:v0.8.4-gke.18"],"sizeBytes":15416418}]}}

{"metadata":{"name":"nodename5","uid":"f8a3c2d1-9b4e-4c5a-a1f2-3d6e7b8c9a0b","resourceVersion":"377580000","creationTimestamp":"2025-02-27T22:30:00Z","labels":{"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/instance-type":"e2-medium","beta.kubernetes.io/os":"linux","cloud.google.com/gke-boot-disk":"pd-balanced","cloud.google.com/gke-container-runtime":"containerd","cloud.google.com/gke-cpu-scaling-level":"2","cloud.google.com/gke-logging-variant":"DEFAULT","cloud.google.com/gke-max-pods-per-node":"100","cloud.google.com/gke-memory-gb-scaling-level":"4","cloud.google.com/gke-nodepool":"ipv6-pool","cloud.google.com/gke-os-distribution":"cos","cloud.google.com/gke-provisioning":"standard","cloud.google.com/gke-stack-type":"IPV4_IPV6","cloud.google.com/machine-family":"e2","cloud.google.com/private-node":"false","failure-domain.beta.kubernetes.io/region":"us-central1","failure-domain.beta.kubernetes.io/zone":"us-central1-c","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"nodename5","kubernetes.io/os":"linux","node.kubernetes.io/instance-type":"e2-medium","topology.gke.io/zone":"us-central1-c","topology.kubernetes.io/region":"us-central1","topology.kubernetes.io/zone":"us-central1-c"},"annotations":{"container.googleapis.com/instance_id":"1234567890123456789","csi.volume.kubernetes.io/nodeid":"{\"pd.csi.storage.gke.io\":\"projects/containers-183923/zones/us-central1-c/instances/nodename5\"}","node.alpha.kubernetes.io/ttl":"0","volumes.kubernetes.io/controller-managed-attach-detach":"true"},"managedFields":[{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2025-02-27T22:30:00Z","fieldsType":"FieldsV1"}]},"spec":{"podCIDR":"10.84.5.0/24","podCIDRs":["10.84.5.0/24","2600:1900:4000::/64"],"providerID":"gce://containers-183923/us-central1-c/nodename5"},"status":{"capacity":{"cpu":"2","ephemeral-storage":"98831908Ki","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"4018132Ki","pods":"100"},"allocatable":{"cpu":"940m","ephemeral-storage":"47060071478","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"2872276Ki","pods":"100"},"conditions":[{"type":"Ready","status":"True","lastHeartbeatTime":"2025-03-01T23:45:00Z","lastTransitionTime":"2025-02-27T22:30:00Z","reason":"KubeletReady","message":"kubelet is posting ready status"}],"addresses":[{"type":"InternalIP","address":"2001:db8::1"},{"type":"InternalIP","address":"10.128.0.50"},{"type":"ExternalIP","address":"2001:db8:85a3::8a2e:370:7334"}],"daemonEndpoints":{"kubeletEndpoint":{"Port":10250}},"nodeInfo":{"machineID":"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6","systemUUID":"a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6","bootID":"b1c2d3e4-f5g6-h7i8-j9k0-l1m2n3o4p5q6","kernelVersion":"6.1.123+","osImage":"Container-Optimized OS from Google","containerRuntimeVersion":"containerd://1.7.24","kubeletVersion":"v1.30.9-gke.1127000","kubeProxyVersion":"v1.30.9-gke.1127000","operatingSystem":"linux","architecture":"amd64"},"images":[]}}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? I see that it's given an IPv6 address, but I don't feel we're really testing against it at all?

@thomasvn thomasvn left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a minor comment, but overall LGTM!

cpetersen5 and others added 2 commits April 2, 2026 09:51
Co-authored-by: Warwick <warwick@automatic.systems>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

finopsagent fails to scrape node metrics on IPv6-only clusters invalid URL construction

3 participants