metropolis/node: use Event Value for network status

This moves over the GetIP API to use our fancy new event/value library.
The consumers of this data are currently the cluster manager and the
kubernetes root service. Both are migrated over.

Test Plan: Refactor, covered by E2E tests.

X-Origin-Diff: phab/D711
GitOrigin-RevId: 8a1e0dd35236d55492722f4439323cb2ee9574fc
diff --git a/metropolis/node/core/main.go b/metropolis/node/core/main.go
index 0f6ebd1..7c3f10c 100644
--- a/metropolis/node/core/main.go
+++ b/metropolis/node/core/main.go
@@ -37,7 +37,6 @@
 	"source.monogon.dev/metropolis/node/core/localstorage"
 	"source.monogon.dev/metropolis/node/core/localstorage/declarative"
 	"source.monogon.dev/metropolis/node/core/network"
-	"source.monogon.dev/metropolis/node/core/network/dns"
 	"source.monogon.dev/metropolis/node/kubernetes"
 	"source.monogon.dev/metropolis/node/kubernetes/containerd"
 	"source.monogon.dev/metropolis/node/kubernetes/pki"
@@ -112,9 +111,7 @@
 		logger.Fatalf("Failed to initialize TPM 2.0: %v", err)
 	}
 
-	corednsRegistrationChan := make(chan *dns.ExtraDirective)
-
-	networkSvc := network.New(network.Config{CorednsRegistrationChan: corednsRegistrationChan})
+	networkSvc := network.New()
 
 	// This function initializes a headless Delve if this is a debug build or does nothing if it's not
 	initializeDebugger(networkSvc)
@@ -146,12 +143,6 @@
 			return fmt.Errorf("when starting network: %w", err)
 		}
 
-		// Wait for IP address from network.
-		ip, err := networkSvc.GetIP(ctx, true)
-		if err != nil {
-			return fmt.Errorf("when waiting for IP address: %w", err)
-		}
-
 		// Start cluster manager. This kicks off cluster membership machinery, which will either start
 		// a new cluster, enroll into one or join one.
 		m := cluster.NewManager(root, networkSvc)
@@ -211,8 +202,7 @@
 
 			kubernetesConfig.KPKI = kpki
 			kubernetesConfig.Root = root
-			kubernetesConfig.AdvertiseAddress = *ip
-			kubernetesConfig.CorednsRegistrationChan = corednsRegistrationChan
+			kubernetesConfig.Network = networkSvc
 			kubeSvc = kubernetes.New(kubernetesConfig)
 			if err := supervisor.Run(ctx, "kubernetes", kubeSvc.Run); err != nil {
 				return fmt.Errorf("failed to start kubernetes service: %w", err)