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. |