Initial Kubernetes Control Plane
This adds a minimum viable Kubernetes Control Plane consisting of a
kube-apiserver, kube-controller-manager and kube-scheduler. It contains
two small CAs for Kubernetes Identity management based on shared
certificates and contains changes for exposing etcd via UNIX socket
so that the apiserver can talk to it.
Test Plan:
Tested by manually calling Setup() and observing subsequent logs and
connecting to the API server.
Bug: T485
X-Origin-Diff: phab/D271
GitOrigin-RevId: e56f3e50eb9d33ea291289faa1aac3bebdeb3346
diff --git a/core/internal/node/BUILD.bazel b/core/internal/node/BUILD.bazel
index 39b1aca..c83d095 100644
--- a/core/internal/node/BUILD.bazel
+++ b/core/internal/node/BUILD.bazel
@@ -13,6 +13,7 @@
"//core/internal/api:go_default_library",
"//core/internal/common:go_default_library",
"//core/internal/consensus:go_default_library",
+ "//core/internal/kubernetes:go_default_library",
"//core/internal/storage:go_default_library",
"@com_github_google_uuid//:go_default_library",
"@org_uber_go_zap//:go_default_library",
diff --git a/core/internal/node/main.go b/core/internal/node/main.go
index 76a5cf2..40aa8b3 100644
--- a/core/internal/node/main.go
+++ b/core/internal/node/main.go
@@ -18,9 +18,11 @@
import (
"flag"
+
"git.monogon.dev/source/nexantic.git/core/internal/api"
"git.monogon.dev/source/nexantic.git/core/internal/common"
"git.monogon.dev/source/nexantic.git/core/internal/consensus"
+ "git.monogon.dev/source/nexantic.git/core/internal/kubernetes"
"git.monogon.dev/source/nexantic.git/core/internal/storage"
"os"
@@ -30,14 +32,15 @@
type (
SmalltownNode struct {
- Api *api.Server
- Consensus *consensus.Service
- Storage *storage.Manager
+ Api *api.Server
+ Consensus *consensus.Service
+ Storage *storage.Manager
+ Kubernetes *kubernetes.Service
- logger *zap.Logger
- state common.SmalltownState
- joinToken string
- hostname string
+ logger *zap.Logger
+ state common.SmalltownState
+ joinToken string
+ hostname string
}
)
@@ -57,9 +60,10 @@
}
consensusService, err := consensus.NewConsensusService(consensus.Config{
- Name: hostname,
- ListenPort: consensusPort,
- ListenHost: "0.0.0.0",
+ Name: hostname,
+ ListenPort: consensusPort,
+ ListenHost: "0.0.0.0",
+ ExternalHost: "10.0.2.15", // TODO: Once Multi-Node setups are actually used, this needs to be corrected
}, logger.With(zap.String("module", "consensus")))
if err != nil {
return nil, err
@@ -81,6 +85,8 @@
s.Api = apiService
+ s.Kubernetes = kubernetes.New(logger.With(zap.String("module", "kubernetes")), consensusService)
+
logger.Info("Created SmalltownNode")
return s, nil
@@ -140,6 +146,11 @@
return err
}
+ err = s.Kubernetes.Start()
+ if err != nil {
+ s.logger.Error("Failed to start the Kubernetes Service", zap.Error(err))
+ }
+
return nil
}
diff --git a/core/internal/node/setup.go b/core/internal/node/setup.go
index efc72d3..98873d3 100644
--- a/core/internal/node/setup.go
+++ b/core/internal/node/setup.go
@@ -83,6 +83,14 @@
return err
}
+ if err := s.Kubernetes.NewCluster(); err != nil {
+ return err
+ }
+
+ if err := s.Kubernetes.Start(); err != nil {
+ return err
+ }
+
// Change system state
s.state = common.StateConfigured