m/node: pass node identity into k8s
This plumbs through the node identity to K8s as an identity.Node
object and gets rid of the os.Hostname invocation that passed around
this data out-of-band. It also changes everything in its path to use
the newer identity.Node object instead of a plain string so that the
Metropolis Identity CA is more accessible.
Change-Id: I6db8e1db7e333c0ea364aefd61c27bf50acc25f3
Reviewed-on: https://review.monogon.dev/c/monogon/+/505
Reviewed-by: Sergiusz Bazanski <serge@monogon.tech>
diff --git a/metropolis/node/kubernetes/BUILD.bazel b/metropolis/node/kubernetes/BUILD.bazel
index cec9a6e..a162bcc 100644
--- a/metropolis/node/kubernetes/BUILD.bazel
+++ b/metropolis/node/kubernetes/BUILD.bazel
@@ -15,6 +15,7 @@
visibility = ["//metropolis/node:__subpackages__"],
deps = [
"//metropolis/node:go_default_library",
+ "//metropolis/node/core/identity:go_default_library",
"//metropolis/node/core/localstorage:go_default_library",
"//metropolis/node/core/network:go_default_library",
"//metropolis/node/core/network/dns:go_default_library",
diff --git a/metropolis/node/kubernetes/service.go b/metropolis/node/kubernetes/service.go
index fe701e6..1af7607 100644
--- a/metropolis/node/kubernetes/service.go
+++ b/metropolis/node/kubernetes/service.go
@@ -20,7 +20,6 @@
"context"
"fmt"
"net"
- "os"
"time"
"google.golang.org/grpc/codes"
@@ -29,6 +28,7 @@
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
+ "source.monogon.dev/metropolis/node/core/identity"
"source.monogon.dev/metropolis/node/core/localstorage"
"source.monogon.dev/metropolis/node/core/network"
"source.monogon.dev/metropolis/node/core/network/dns"
@@ -48,6 +48,7 @@
KPKI *pki.PKI
Root *localstorage.Root
Network *network.Service
+ Node *identity.Node
}
type Service struct {
@@ -90,11 +91,6 @@
informerFactory := informers.NewSharedInformerFactory(clientSet, 5*time.Minute)
- hostname, err := os.Hostname()
- if err != nil {
- return fmt.Errorf("failed to get hostname: %w", err)
- }
-
// Sub-runnable which starts all parts of Kubernetes that depend on the
// machine's external IP address. If it changes, the runnable will exit.
// TODO(q3k): test this
@@ -122,7 +118,7 @@
}
kubelet := kubeletService{
- NodeName: hostname,
+ NodeName: s.c.Node.ID(),
ClusterDNS: []net.IP{address},
KubeletDirectory: &s.c.Root.Data.Kubernetes.Kubelet,
EphemeralDirectory: &s.c.Root.Ephemeral,
@@ -154,14 +150,14 @@
}
csiProvisioner := csiProvisionerServer{
- NodeName: hostname,
+ NodeName: s.c.Node.ID(),
Kubernetes: clientSet,
InformerFactory: informerFactory,
VolumesDirectory: &s.c.Root.Data.Volumes,
}
clusternet := clusternet.Service{
- NodeName: hostname,
+ NodeName: s.c.Node.ID(),
Kubernetes: clientSet,
ClusterNet: s.c.ClusterNet,
InformerFactory: informerFactory,