blob: c682311ad4d6199bc92df4b90d80bad463bd8aed [file] [log] [blame]
Serge Bazanski72068da2021-03-16 13:15:45 +01001// Copyright 2020 The Monogon Project Authors.
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
17syntax = "proto3";
18option go_package = "source.monogon.dev/metropolis/proto/private";
19package metropolis.proto.private;
20
21// Node describes a single node's state in etcd
Serge Bazanski30653ee2021-06-17 15:44:29 +020022// DEPRECATED: this will be moved to //metropolis/node/curator.
Serge Bazanski72068da2021-03-16 13:15:45 +010023message Node {
24 // Node's public key..
25 bytes public_key = 1;
26 // Node's individual cluster part of the data partition encryption key. It
27 // is combined with the Node Unlock Key (NUK) kept within
28 // SealedConfiguration.
29 bytes cluster_unlock_key = 2;
30
31 // TODO(q3k): document this based on cluster lifecycle design doc once this
32 // fully stabilizes.
33 enum FSMState {
34 FSM_STATE_INVALID = 0;
35 FSM_STATE_NEW = 1;
36 FSM_STATE_STANDBY = 2;
37 FSM_STATE_UP = 3;
38 FSM_STATE_DISOWNED = 4;
39 };
40 FSMState fsm_state = 3;
41
42 message Roles {
43 message ConsensusMember {
44 // Used to be: consensus member name, can be deduced from
45 // Certificate/Pubkey/ID.
46 reserved 1;
47 }
48 ConsensusMember consensus_member = 1;
49 message KubernetesWorker {
50 // Used to be: node name, can be deduced from
51 // Certificate/Pubkey/ID.
52 reserved 1;
53 }
54 KubernetesWorker kubernetes_worker = 2;
55 }
56 Roles roles = 4;
57}
58
59// SealedConfiguration is all configuration kept in a TPM-sealed (ie.
60// confidential and tamper-resistant) blob within the node's ESP (EFI)
61// partition. It contains everything that the node needs to join an existing
62// cluster after rebooting.
63message SealedConfiguration {
64 // node_unlock_key (NUK) is the node's part of the key required to unlock
65 // the node's data partition(s). It is combined with the Cluster Unlock Key
66 // (CUK) that's stored in etcd to create a key which is then used to mount
67 // the data partition. The NUK and CUK are generated on bootstrap and
68 // registration.
69 bytes node_unlock_key = 1;
Mateusz Zalega2930e992022-04-25 12:52:35 +020070 // join_key is an ED25519 private key generated during registration. The
71 // public part is shared with Curator to authenticate the join procedure.
72 bytes join_key = 2;
73 // cluster_ca is the X509 CA certificate of the cluster set during
74 // registration and used by nodes joining the cluster.
75 bytes cluster_ca = 3;
Serge Bazanski72068da2021-03-16 13:15:45 +010076}