From 1f835e31b6e4c9e78134a97aa9cafc9eea5f0cad Mon Sep 17 00:00:00 2001 From: Claude Bot Date: Wed, 28 Oct 2026 16:44:08 +0100 Subject: [PATCH 1/2] fix(shelly-manager): bind the app to the pod addresses, not [::] [::]:8082 also listened on net1. POD_IPS (status.podIPs) lets the app bind 8080/8082/9090 to the pod IPv4 and IPv6 only; ASPNETCORE_URLS falls back to the pod IPv4 for images that do not read POD_IPS. Co-Authored-By: Claude Opus 5.5 --- .../shelly-manager-deployment.yaml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/kubernetes/apps/home-assistant-iot/shelly-manager-deployment.yaml b/kubernetes/apps/home-assistant-iot/shelly-manager-deployment.yaml index 32d530c2..a8bcf69a 100644 --- a/kubernetes/apps/home-assistant-iot/shelly-manager-deployment.yaml +++ b/kubernetes/apps/home-assistant-iot/shelly-manager-deployment.yaml @@ -94,12 +94,15 @@ spec: fieldPath: status.podIP # 8082 and 9090 are separate pipelines in the app that answer only # /fw/... and /metrics; the UI and API stay on 8080. - # 8082 binds [::] (dual-stack, all interfaces): POD_IP is IPv4 only - # and the firmware LoadBalancer also serves IPv6. That includes - # net1, which only offers the same firmware files the LoadBalancer - # already serves to the IoT VLAN. - name: ASPNETCORE_URLS - value: "http://$(POD_IP):8080;http://[::]:8082;http://$(POD_IP):9090" + value: "http://$(POD_IP):8080;http://$(POD_IP):8082;http://$(POD_IP):9090" + # Both pod addresses (IPv4,IPv6). When set, the app binds all three + # ports to exactly these and ignores ASPNETCORE_URLS, so nothing + # listens on net1 and the firmware LoadBalancer gets an IPv6 listener. + - name: POD_IPS + valueFrom: + fieldRef: + fieldPath: status.podIPs # The URL devices download firmware from: Service shelly-manager-firmware. - name: Firmware__PublicBaseUrl value: http://shelly-firmware.renner.uno -- 2.54.0 From e6d71ba0333b095529d3e40a005f8ffcd7db23ce Mon Sep 17 00:00:00 2001 From: Claude Bot Date: Wed, 28 Oct 2026 16:51:03 +0100 Subject: [PATCH 2/2] fix(shelly-manager): name the firmware endpoint firmware.shelly-manager.renner.uno App endpoints are ..renner.uno (ftp.paperless.renner.uno, syncthing.paperless.renner.uno). Co-Authored-By: Claude Opus 5.5 --- .../home-assistant-iot/shelly-manager-deployment.yaml | 2 +- .../apps/home-assistant-iot/shelly-manager-service.yaml | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kubernetes/apps/home-assistant-iot/shelly-manager-deployment.yaml b/kubernetes/apps/home-assistant-iot/shelly-manager-deployment.yaml index a8bcf69a..46ea8d6e 100644 --- a/kubernetes/apps/home-assistant-iot/shelly-manager-deployment.yaml +++ b/kubernetes/apps/home-assistant-iot/shelly-manager-deployment.yaml @@ -105,7 +105,7 @@ spec: fieldPath: status.podIPs # The URL devices download firmware from: Service shelly-manager-firmware. - name: Firmware__PublicBaseUrl - value: http://shelly-firmware.renner.uno + value: http://firmware.shelly-manager.renner.uno - name: ShellyManager__DnsSuffix value: iot.renner.uno # BLE radios: ESP32 esphome bluetooth_proxy nodes (e.g. the M5 Atom diff --git a/kubernetes/apps/home-assistant-iot/shelly-manager-service.yaml b/kubernetes/apps/home-assistant-iot/shelly-manager-service.yaml index 28cd4b58..8f4af27c 100644 --- a/kubernetes/apps/home-assistant-iot/shelly-manager-service.yaml +++ b/kubernetes/apps/home-assistant-iot/shelly-manager-service.yaml @@ -32,7 +32,8 @@ spec: --- # Firmware downloads for the Shelly fleet. Devices on the IoT VLAN reach it over # the UDM's BGP routes (like mosquitto-iot) by the name -# shelly-firmware.renner.uno, which shelly-manager hands them in the update URL. +# firmware.shelly-manager.renner.uno, which shelly-manager hands them in the +# update URL. # The app serves only /fw/... on this port. Ingress: shelly-manager-firmware- # world-ingress in network-policies/home-assistant-ns.yaml. apiVersion: v1 @@ -45,10 +46,10 @@ metadata: lb-pool: bgp dns.renner.uno/internal: "true" annotations: - # Pinned like the other bgp-pool Services: auto-assignment hands out the - # pool's first address, 10.2.99.0, which is not reachable. + # Pinned like the other bgp-pool Services, which auto-assignment would give + # the pool's base address 10.2.99.0 (see trmnl/device-service.yaml). lbipam.cilium.io/ips: "10.2.99.90,fd99::8a" - external-dns.kubernetes.io/hostname: shelly-firmware.renner.uno + external-dns.kubernetes.io/hostname: firmware.shelly-manager.renner.uno spec: type: LoadBalancer externalTrafficPolicy: Local -- 2.54.0