blob: 9bae680996d097f597b61eff68fa39b109a8df71 [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
22message Node {
23 // Node's public key..
24 bytes public_key = 1;
25 // Node's individual cluster part of the data partition encryption key. It
26 // is combined with the Node Unlock Key (NUK) kept within
27 // SealedConfiguration.
28 bytes cluster_unlock_key = 2;
29
30 // TODO(q3k): document this based on cluster lifecycle design doc once this
31 // fully stabilizes.
32 enum FSMState {
33 FSM_STATE_INVALID = 0;
34 FSM_STATE_NEW = 1;
35 FSM_STATE_STANDBY = 2;
36 FSM_STATE_UP = 3;
37 FSM_STATE_DISOWNED = 4;
38 };
39 FSMState fsm_state = 3;
40
41 message Roles {
42 message ConsensusMember {
43 // Used to be: consensus member name, can be deduced from
44 // Certificate/Pubkey/ID.
45 reserved 1;
46 }
47 ConsensusMember consensus_member = 1;
48 message KubernetesWorker {
49 // Used to be: node name, can be deduced from
50 // Certificate/Pubkey/ID.
51 reserved 1;
52 }
53 KubernetesWorker kubernetes_worker = 2;
54 }
55 Roles roles = 4;
56}
57
58// SealedConfiguration is all configuration kept in a TPM-sealed (ie.
59// confidential and tamper-resistant) blob within the node's ESP (EFI)
60// partition. It contains everything that the node needs to join an existing
61// cluster after rebooting.
62message SealedConfiguration {
63 // node_unlock_key (NUK) is the node's part of the key required to unlock
64 // the node's data partition(s). It is combined with the Cluster Unlock Key
65 // (CUK) that's stored in etcd to create a key which is then used to mount
66 // the data partition. The NUK and CUK are generated on bootstrap and
67 // registration.
68 bytes node_unlock_key = 1;
69}