Skip to content

Cluster Manager "LXD UI" link points to a single member's internal address — No existing path to advertise an HA/load-balancer URL #1527

Description

@riancasi

The "LXD UI" button on the Cluster Manager's cluster details page links to the first cluster member's internal cluster address (the cluster.https_address visible in lxc cluster list). This was found while running MicroCloud demo environments on GCP, where each cluster sits behind a TCP load balancer with a static address across all members (the address operators actually use), but the button links to one member's private IP instead.

Tracing the behavior, the value appears to originate in the connector's status heartbeat: enrichClusterMemberMetrics in cmd/microcloudd/cluster_manager_task.go sets ui_url from lxdMembers[0].URL, and the Cluster Manager stores and renders it as-is (in microcloud-cluster-manager: RemoteClusterStatusPost → remote_cluster_detail.go, refreshed on each heartbeat → ClusterUiButton.tsx). No configuration point was found along that path where an operator-supplied URL could be provided.

Concerns related to current limitations:

  1. HA: production deployments front the UI with a VIP/load balancer across all members. Linking to one specific member means the button dies when that member is down for maintenance, even though the cluster and its LB remain healthy.

  2. TLS: a member's private IP cannot carry the certificate an operator has issued for their DNS-named LB endpoint, so the link always produces browser warnings, even when the deployment has a perfectly clean HTTPS entry point.

  3. Segmented networks: deployments that keep cluster-internal addresses on an isolated management network (exposing only the LB/DNS endpoint to operators) end up with a link that isn't reachable from the browsers meant to use it.

Request: a way to set the UI URL a cluster reports to the Cluster Manager, for example the load balancer's address or DNS name. If nothing is set, the current behavior stays the default. This could potentially be implemented in a preseed field or join field, or another mechanism that would work best.

Metadata

Metadata

Assignees

No one assigned

    Labels

    FeatureNew feature, not a bug

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions