commit | 3379a5d0ffcd652031c135f2ffe7600272fa0093 | [log] [tgz] |
---|---|---|
author | Serge Bazanski <serge@monogon.tech> | Thu Sep 09 12:56:40 2021 +0200 |
committer | Sergiusz Bazanski <serge@monogon.tech> | Tue Oct 05 17:13:53 2021 +0000 |
tree | 6c771e39336d5df9f7d956fadb9578b94b25b174 | |
parent | 6adf8840e846b15b7b34151c3432c886b540f420 [diff] |
m/n/core: factor out gRPC/TLS into rpc and identity libraries This is an annoying large change, which started its life as me pulling the 'let's add tests for authentication' thread, and ended up in unifying a whole bunch of dispersed logic under two new libraries. Notable changes: - m/n/core/identity now contains the NodeCertificate (now called Node) and NodeCredentials types. These used to exist in the cluster code, but were factored out to prevent loops between the curator, the cluster enrolment logic, and other code. They can now be shared by nearly all of the node code, removing the need for some conversions between subsystems/packages. - Alongside Node{,Credentials} types, the identity package contains code that creates x509 certificate templates and verifies x509 certificates, and has functions specific to nodes and users - not clients and servers. This allows moving most of the rest of certificate checking code into a single set of functions, and allows us to test this logic thoroughly. - pki.{Client,Server,CA} are not used by the node core code anymore, and can now be moved to kubernetes-specific code (as that was their original purpose and that's their only current use). - m/n/core/rpc has been refactored to deduplicate code between the local/external gRPC servers and unary/stream interceptors for these servers, also allowing for more thorough testing and unified behaviour between all. - A PeerInfo structure is now injected into all gRPC handlers, and is unified to contain information both about nodes, users, and possibly unauthenticated callers. - The AAA.Escrow implementation now makes use of PeerInfo in order to retrieve the client's certificate, instead of rolling its own logic. - The EphemeralClusterCredentials test helper has been moved to the rpc library, and now returns identity objects, allowing for simplified test code (less juggling of bare public keys and {x509,tls}.Certificate objects). Change-Id: I9284966b4f18c0d7628167ca3168b4b4037808c1 Reviewed-on: https://review.monogon.dev/c/monogon/+/325 Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
This is the main repository containing the source code for the Monogon Project.
⚠️ This is pre-release software that happens to be publicly available. Nothing to see here, please move along.
Our build environment requires a working Podman binary (your distribution should have one).
Spinning up: scripts/create_container.sh
Spinning down: scripts/destroy_container.sh
Running commands: scripts/run_in_container.sh <...>
Using bazel using a wrapper script: scripts/bin/bazel <...>
(add to your local $PATH for convenience)
This repository is compatible with the IntelliJ Bazel plugin, which enables full autocompletion for external dependencies and generated code. All commands run inside the container, and necessary paths are mapped into the container.
The following steps are necessary:
Install Google's Bazel plugin in IntelliJ. On IntelliJ 2020.3 or later, you need to install a beta release of the plugin.
Add the absolute path to your ~/.cache/bazel-monogon
folder to your idea64.vmoptions
(Help → Edit Custom VM Options) and restart IntelliJ:
-Dbazel.bep.path=/home/leopold/.cache/bazel-monogon
Set "Bazel Binary Location" in Other Settings → Bazel Settings to the absolute path of scripts/bin/bazel
. This is a wrapper that will execute Bazel inside the container.
Use File → Import Bazel project... to create a new project from .bazelproject
.
After running the first sync, everything should now resolve in the IDE, including generated code.
Launch the node:
scripts/bin/bazel run //:launch
Run a kubectl command:
scripts/bin/bazel run //metropolis/cli/dbg -- kubectl describe
Run tests:
scripts/bin/bazel test //...