m/n/core/clusternet: grab external IP address prefix from network service
This moves the logic for merging the node IP and node prefixes from the
submitter of the prefixes into the clusternet logic itself.
This means clusternet now has two independent sources of prefix data:
the network service's external IP address, and the kubelet's node
prefixes.
This simplifies use in a worker/controller split, where a controller
node normally doesn't submit any prefixes as it's not running a kubelet
or kubelet-adjacent prefixes - but we still want it to submit its
external IP address.
Change-Id: I46c9430228ce966426d3a8d33a765ecfdfca0d29
Reviewed-on: https://review.monogon.dev/c/monogon/+/1479
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/roleserve/roleserve.go b/metropolis/node/core/roleserve/roleserve.go
index a665044..d2e5bf0 100644
--- a/metropolis/node/core/roleserve/roleserve.go
+++ b/metropolis/node/core/roleserve/roleserve.go
@@ -151,6 +151,7 @@
clusterMembership: &s.ClusterMembership,
podNetwork: &s.podNetwork,
+ network: s.Network,
}
s.hostsfile = &workerHostsfile{
diff --git a/metropolis/node/core/roleserve/worker_clusternet.go b/metropolis/node/core/roleserve/worker_clusternet.go
index d80dea1..7dfeba6 100644
--- a/metropolis/node/core/roleserve/worker_clusternet.go
+++ b/metropolis/node/core/roleserve/worker_clusternet.go
@@ -6,6 +6,7 @@
"source.monogon.dev/metropolis/node/core/clusternet"
"source.monogon.dev/metropolis/node/core/localstorage"
+ "source.monogon.dev/metropolis/node/core/network"
"source.monogon.dev/metropolis/pkg/event/memory"
"source.monogon.dev/metropolis/pkg/supervisor"
@@ -19,6 +20,7 @@
clusterMembership *memory.Value[*ClusterMembership]
// podNetwork will be read.
podNetwork *memory.Value[*clusternet.Prefixes]
+ network *network.Service
}
func (s *workerClusternet) run(ctx context.Context) error {
@@ -46,6 +48,7 @@
},
DataDirectory: &s.storageRoot.Data.Kubernetes.ClusterNetworking,
LocalKubernetesPodNetwork: s.podNetwork,
+ Network: s.network.Value(),
}
return svc.Run(ctx)
}