fix(shelly-manager): reachable firmware LoadBalancer on IPv4 and IPv6 #1515

Merged
k.renner merged 1 commits from shelly-firmware-lb-reachable into main 2026-10-28 14:50:52 +00:00
Member

shelly-firmware.renner.uno (from #1514) timed out on both address families. The pod itself serves the images: GET http://10.244.0.35:8082/fw/... from the LAN returns 200.

Change

  • shelly-manager-firmware Service: pin lbipam.cilium.io/ips: "10.2.99.90,fd99::8a", like the other bgp-pool Services.
    • Auto-assignment had given it 10.2.99.0, the pool's first address. That address was advertised from k8s-1 but did not answer.
    • .90 is the next free address (live Services use .81–.89). fd99::8a is the IPv6 address it already holds.
  • Deployment: Kestrel binds the firmware port on [::]:8082 instead of $(POD_IP):8082.
    • POD_IP is IPv4 only, so the Service's IPv6 endpoint had no listener.
    • [::] also covers net1, which offers only the firmware files the LoadBalancer already serves to the IoT VLAN.
    • 8080 and 9090 stay pinned to the pod IPv4.

Tested

  • kubectl kustomize kubernetes/apps/home-assistant-iot renders.
  • kubectl apply --dry-run=server accepts the Services.

🤖 Generated with Claude Code

`shelly-firmware.renner.uno` (from #1514) timed out on both address families. The pod itself serves the images: `GET http://10.244.0.35:8082/fw/...` from the LAN returns 200. ## Change - `shelly-manager-firmware` Service: pin `lbipam.cilium.io/ips: "10.2.99.90,fd99::8a"`, like the other bgp-pool Services. - Auto-assignment had given it `10.2.99.0`, the pool's first address. That address was advertised from k8s-1 but did not answer. - `.90` is the next free address (live Services use `.81`–`.89`). `fd99::8a` is the IPv6 address it already holds. - Deployment: Kestrel binds the firmware port on `[::]:8082` instead of `$(POD_IP):8082`. - `POD_IP` is IPv4 only, so the Service's IPv6 endpoint had no listener. - `[::]` also covers net1, which offers only the firmware files the LoadBalancer already serves to the IoT VLAN. - 8080 and 9090 stay pinned to the pod IPv4. ## Tested - `kubectl kustomize kubernetes/apps/home-assistant-iot` renders. - `kubectl apply --dry-run=server` accepts the Services. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-bot added 1 commit 2026-10-28 14:25:46 +00:00
fix(shelly-manager): reachable firmware LoadBalancer on IPv4 and IPv6
ci/woodpecker/pr/ci-manifests-test Pipeline was successful
ci/woodpecker/pr/ci-scripts-test Pipeline was successful
371f18c85f
The auto-assigned IPv4 address 10.2.99.0 timed out from the LAN while
the pod answered on 8082 directly; pin 10.2.99.90/fd99::8a like the
other bgp-pool Services. Kestrel listened on 8082 only on the pod IPv4,
so the IPv6 endpoint had no listener; bind 8082 on [::].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
k.renner merged commit 4d556c1b4b into main 2026-10-28 14:50:52 +00:00
Sign in to join this conversation.