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/kubernetes/clusternet/clusternet.go b/metropolis/node/kubernetes/clusternet/clusternet.go
index f4974eb..7b51c30 100644
--- a/metropolis/node/kubernetes/clusternet/clusternet.go
+++ b/metropolis/node/kubernetes/clusternet/clusternet.go
@@ -33,7 +33,6 @@
import (
"context"
- "errors"
"net/netip"
"time"
@@ -64,25 +63,6 @@
return nil
}
- var internalIP netip.Addr
- for _, addr := range newNode.Status.Addresses {
- if addr.Type == corev1.NodeInternalIP {
- if internalIP.IsUnspecified() {
- s.logger.Warningf("More than one NodeInternalIP specified, using the first one")
- break
- }
- ip, err := netip.ParseAddr(addr.Address)
- if err != nil {
- s.logger.Warningf("Failed to parse Internal IP %s", addr.Address)
- continue
- }
- internalIP = ip
- }
- }
- if internalIP.IsUnspecified() {
- return errors.New("node has no Internal IP")
- }
-
var prefixes oclusternet.Prefixes
for _, podNetStr := range newNode.Spec.PodCIDRs {
prefix, err := netip.ParsePrefix(podNetStr)
@@ -92,7 +72,6 @@
}
prefixes = append(prefixes, prefix)
}
- prefixes = append(prefixes, netip.PrefixFrom(internalIP, 32))
s.logger.V(1).Infof("Updating locally originated prefixes: %+v", prefixes)
s.Prefixes.Set(&prefixes)
diff --git a/metropolis/node/kubernetes/service_worker.go b/metropolis/node/kubernetes/service_worker.go
index 5ddc32d..2e6e190 100644
--- a/metropolis/node/kubernetes/service_worker.go
+++ b/metropolis/node/kubernetes/service_worker.go
@@ -7,8 +7,10 @@
"source.monogon.dev/go/net/tinylb"
"source.monogon.dev/metropolis/node"
+ oclusternet "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"
"source.monogon.dev/metropolis/pkg/event/memory"
"source.monogon.dev/metropolis/pkg/supervisor"
@@ -24,6 +26,7 @@
Network *network.Service
NodeID string
CuratorClient ipb.CuratorClient
+ PodNetwork event.Value[*oclusternet.Prefixes]
}
type Worker struct {
@@ -67,6 +70,7 @@
if err != nil {
return err
}
+
supervisor.Signal(ctx, supervisor.SignalHealthy)
<-ctx.Done()
return nil