Project

General

Profile

Crowd cloud » History » Version 4

Nico Schottelius, 06/01/2019 06:50 PM

1 3 Nico Schottelius
h1. Crown Cloud / Bird Cloud / Crowd cloud / Kraut Computing (KC's)
2 1 Evil Ham
3 4 Nico Schottelius
{{toc}}
4
5 2 Evil Ham
h2. Idea
6
7
Make something simple that "doesn't suck", which allows us to manage VMs at our will.
8
It should support basic concepts and therefore be as generic and portable as possible.
9 1 Evil Ham
10
h2. Use-cases
11
12
h3. Create a VM:
13
14
1. Pick an image
15
2. Pick network(s)
16
3. Pick machine type
17
[4. Pick machine type parameters]
18
[X. Add nic to VM / mod VM]
19
[Y. Upload images to be used for 1]
20
[Z. Destroy a VM]
21
22
Note: this actually includes most of the life-cycle of a VM.
23
24
h2. Components
25
26
Following components were identified and commented out, sorted out by subjective order of importance.
27
28
These components are thought as being some kind of key/value (JSON seems likely, a priori no NOSQL) with possibilities for opaque customer metadata.
29
30
* This key/value + metadata information should be usable for filtering / operations.
31
* It should be versioned.
32
33
h3. VM
34
Defined as an instance of different settings and multiplicities of the other components
35
36
h3. Machine types / Templates
37
38
General definition with fixed sets of settings and, in a future stage, parametrised options.
39
40
Examples of settings:
41
* CPU/RAM
42
* HW Type: arm64 / x86
43
* HW / VM
44
* ...
45
46
h3. Network(s)
47
48
Layer2-based, allow common use-cases like: static, dhcp, slaac, dhcpv6, custom gateway.
49
50
Outside connections: VXLAN
51
52
Note: it is quite important that the gateway can be set to another VM / something customised. That way, we can see firewalls and VPNs as special cases to be considered.
53
54
h3. Firewall / routing
55
56
Thought as: extra VM, that is potentially "invisible" to customers/users and that can:
57
* deal with basic sets of rules (e.g. allow TCP 80, 22 from $SUBNET, ...)
58
* ratelimit
59
* standard ACLs
60
* geek_mode: on --> "I know what I'm doing, gimme SSH"
61
62
Note: By treating this component as a special case of VMs, we simplify things and keep them simple.
63
64
h3. Storage
65
66
Thought as being out-of-scope to begin with since it can vary so much. We shouldn't rely on a specific implementation.
67
68
h3. Images
69
70
Basically a rw repository of prepared images. Uploads can be thought as being "raw" to begin with, and we can later add pre-processors that convert them as needed.
71
72
h3. Auth
73
74
Thought as "not being our problem".
75
*BUT*: we should have provisions for checkers as follows:
76
77
Use some HTTP Auth Header, which should be treated as opaque.
78
This value of the header, along with the details of the request, should offload Auth to an implementation.
79
That implementation should reply with the result of such request.
80
81
To facilitate adoption / testing, we should implement a few such Authenticators:
82
* httpasswd file
83
* ldap
84
* god-like tokens
85
* OTP
86
* limited-scope tokens
87
Note: by treating the header as something opaque, it can be e.g. base64(user:name) à la HTTP Basic Auth or a uuid or jwt or ...
88
89
h2. Things to consider
90
91
* The whole thing should aim to be a set of integrated tools that work well together and build on top of standard technologies as much as possible.
92
* Language of implementation should be consistent, but is open for discussion
93
* For the JSON metadata, Azure has some interesting tools / Schemas that are worth taking a look into.
94
* Take a look at ETCD, consul and the like.