From 84569936d964a0e2ad2ddeaf76001979f635d9b7 Mon Sep 17 00:00:00 2001 From: Joe Beda Date: Wed, 7 Jan 2015 12:35:38 -0800 Subject: [PATCH 1/2] Design doc for clustering. This is related to #2303 and steals from #2435. --- clustering.md | 56 +++++++++++++++++++++++++++++++++++++ clustering/.gitignore | 1 + clustering/Makefile | 16 +++++++++++ clustering/README.md | 9 ++++++ clustering/dynamic.png | Bin 0 -> 87530 bytes clustering/dynamic.seqdiag | 24 ++++++++++++++++ clustering/static.png | Bin 0 -> 45845 bytes clustering/static.seqdiag | 16 +++++++++++ 8 files changed, 122 insertions(+) create mode 100644 clustering.md create mode 100644 clustering/.gitignore create mode 100644 clustering/Makefile create mode 100644 clustering/README.md create mode 100644 clustering/dynamic.png create mode 100644 clustering/dynamic.seqdiag create mode 100644 clustering/static.png create mode 100644 clustering/static.seqdiag diff --git a/clustering.md b/clustering.md new file mode 100644 index 000000000..659bed7d5 --- /dev/null +++ b/clustering.md @@ -0,0 +1,56 @@ +# Clustering in Kubernetes + + +## Overview +The term "clustering" refers to the process of having all members of the kubernetes cluster find and trust each other. There are multiple different ways to achieve clustering with different security and usability profiles. This document attempts to lay out the user experiences for clustering that Kubernetes aims to address. + +Once a cluster is established, the following is true: + +1. **Master -> Node** The master needs to know which nodes can take work and what their current status is wrt capacity. + 1. **Location** The master knows the name and location of all of the nodes in the cluster. + 2. **Target AuthN** A way to securely talk to the kubelet on that node. Currently we call out to the kubelet over HTTP. This should be over HTTPS and the master should know what CA to trust for that node. + 3. **Caller AuthN/Z** Currently, this is only used to collect statistics as authorization isn't critical. This may change in the future though. +2. **Node -> Master** The nodes currently talk to the master to know which pods have been assigned to them and to publish events. + 1. **Location** The nodes must know where the master is at. + 2. **Target AuthN** Since the master is assigning work to the nodes, it is critical that they verify whom they are talking to. + 3. **Caller AuthN/Z** The nodes publish events and so must be authenticated to the master. Ideally this authentication is specific to each node so that authorization can be narrowly scoped. The details of the work to run (including things like environment variables) might be considered sensitive and should be locked down also. + +## Current Implementation + +A central authority (generally the master) is responsible for determining the set of machines which are members of the cluster. Calls to create and remove worker nodes in the cluster are restricted to this single authority, and any other requests to add or remove worker nodes are rejected. (1.i). + +Communication from the master to nodes is currently over HTTP and is not secured or authenticated in any way. (1.ii, 1.iii). + +The location of the master is communicated out of band to the nodes. For GCE, this is done via Salt. Other cluster instructions/scripts use other methods. (2.i) + +Currently most communication from the node to the master is over HTTP. When it is done over HTTPS there is currently no verification of the cert of the master (2.ii). + +Currently, the node/kubelet is authenticated to the master via a token shared across all nodes. This token is distributed out of band (using Salt for GCE) and is optional. If it is not present then the kubelet is unable to publish events to the master. (2.iii) + +Our current mix of out of band communication doesn't meet all of our needs from a security point of view and is difficult to set up and configure. + +## Proposed Solution + +The proposed solution will provide a range of options for setting up and maintaining a secure Kubernetes cluster. We want to both allow for centrally controlled systems (leveraging pre-existing trust and configuration systems) or more ad-hoc automagic systems that are incredibly easy to set up. + +The building blocks of an easier solution: + +* **Move to TLS** We will move to using TLS for all intra-cluster communication. We will work to explicitly distributing and trusting the CAs that should be trusted for each link. We will also use client certificates for all AuthN. +* [optional] **API driven CA** Optionally, we will run a CA in the master that will mint certificates for the nodes/kubelets. There will be pluggable policies that will automatically approve certificate requests here as appropriate. + * **CA approval policy** This is a pluggable policy object that can automatically approve CA signing requests. Stock policies will include `always-reject`, `queue` and `insecure-always-approve`. With `queue` there would be an API for evaluating and accepting/rejecting requests. Cloud providers could implement a policy here that verifies other out of band information and automatically approves/rejects based on other external factors. +* **Scoped Kubelet Accounts** These accounts are per-minion and (optionally) give a minion permission to register itself. +* [optional] **Bootstrap API endpoint** This is a helper service hosted outside of the Kubernetes cluster that helps with initial discovery of the master. + +### Static Clustering + +In this sequence diagram there is out of band admin entity that is creating all certificates and distributing them. It is also making sure that the kubelets know where to find the master. This provides for a lot of control but is more difficult to set up as lots of information must be communicated outside of Kubernetes. + +![Static Sequence Diagram](clustering/static.png) + +### Dynamic Clustering + +This diagram dynamic clustering using the bootstrap API endpoint. That API endpoint is used to both find the location of the master and communicate the root CA for the master. + +This flow has the admin manually approving the kubelet signing requests. This is the `queue` policy defined above.This manual intervention could be replaced by code that can verify the signing requests via other means. + +![Dynamic Sequence Diagram](clustering/dynamic.png) diff --git a/clustering/.gitignore b/clustering/.gitignore new file mode 100644 index 000000000..67bcd6cb5 --- /dev/null +++ b/clustering/.gitignore @@ -0,0 +1 @@ +DroidSansMono.ttf diff --git a/clustering/Makefile b/clustering/Makefile new file mode 100644 index 000000000..3f95bc07f --- /dev/null +++ b/clustering/Makefile @@ -0,0 +1,16 @@ +FONT := DroidSansMono.ttf + +PNGS := $(patsubst %.seqdiag,%.png,$(wildcard *.seqdiag)) + +.PHONY: all +all: $(PNGS) + +.PHONY: watch +watch: + fswatch *.seqdiag | xargs -n 1 sh -c "make || true" + +$(FONT): + curl -sLo $@ https://googlefontdirectory.googlecode.com/hg/apache/droidsansmono/DroidSansMono.ttf + +%.png: %.seqdiag $(FONT) + seqdiag -a -f '$(FONT)' $< diff --git a/clustering/README.md b/clustering/README.md new file mode 100644 index 000000000..04abb1bcb --- /dev/null +++ b/clustering/README.md @@ -0,0 +1,9 @@ +This directory contains diagrams for the clustering design doc. + +This depends on the `seqdiag` [utility](http://blockdiag.com/en/seqdiag/index.html). Assuming you have a non-borked python install, this should be installable with + +```bash +pip install seqdiag +``` + +Just call `make` to regenerate the diagrams. diff --git a/clustering/dynamic.png b/clustering/dynamic.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2ff9dbcc25ce3fea879ba2aeed48231b85cf49 GIT binary patch literal 87530 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 bootstrap [label="createCluster", return="cluster ID"]; + user <-- bootstrap [label="returns\n- bootstrap-cluster-uri"]; + + user ->> master [label="start\n- bootstrap-cluster-uri"]; + master => bootstrap [label="setMaster\n- master-location\n- master-ca"]; + + user ->> kubelet [label="start\n- bootstrap-cluster-uri"]; + kubelet => bootstrap [label="get-master", return="returns\n- master-location\n- master-ca"]; + kubelet ->> master [label="signCert\n- unsigned-kubelet-cert", return="retuns\n- kubelet-cert"]; + user => master [label="getSignRequests"]; + user => master [label="approveSignRequests"]; + kubelet <<-- master [label="returns\n- kubelet-cert"]; + + kubelet => master [label="register\n- kubelet-location"] +} diff --git a/clustering/static.png b/clustering/static.png new file mode 100644 index 0000000000000000000000000000000000000000..a01ebbe88fe6614e7bf3bf969cbbbb6d7d98cd31 GIT binary patch literal 45845 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 VNOoBzgV4sBmz>G2wf=tChf}}dgEQ1 z%lEHF2r1G4k~x7GLgsZ*%9jYPY*YJjY*WdG(&nVCT9-^5FpeJ2*vG+%vlT^6D@O!* z1E-6%#3ySw=8qmsU6#w>uPR0>IPzP&nTY>+(IVKLH{o(PXE(Y`O-5eCE~b^Ds-%=C zN{L{ogl-JY*YUjb{u>=6!S7^`fKu>Ib1DVK*t>vdFMd0Uf%Bqq{Kt}{Hw`^Clzxf> zMilh${rA=lc?>ViOsH4mf4vGd@XwmSeFt_=P2KBR4+Cg?;#^S%IES3eed@g|0zQwX z(@s0vi~67FZ)ll5nIfi>v&%wU#Ot2U?k(uA5*+*Bb8(LzA(2J*Ahp5PGM9-z2I6=VIH zcRj6{H|}^F+kv3)89r||Cjh7otJEzQO1~8*Yb55Enw@G|ProM@^Q4uv^(G%}c(QHy zg+R;5s?Q_F-5+upcYFii#l<;wS*e!fclw=P|KV4`Mg6nN*`W5JQFU8HPQ1!|L@jsbx9*_GvXe@j(m*!>g-mR~Mc)=7FZCuG#^aX1S`z^Q$+?%P(`Nee`*xWPzl#BX3P^s_O2h1{o!Y&hTTq#I) zGR`*KtB`44zyLFVU!M>S~#IZe`NF)vUs|%F4VutGZ5?svD4*U7s3PK^fPe zOqDB;ir<@OD`dQE#Y*I`W4227Y$(oZ)1sEDf+ueCIfaR-K}jyuJ!>+H*^ox%{$SD=D@2OYsI z2R_L`*&Lon)-*x#^zUM*0MDIkbICUK z^710zOtqH~S+;$1lc7lIKRkwv7Quk?zt>cvi(!2&ob12gM~z>XjD_mZoSS`sEMCy4 zjd~MCAc*#Ie!7Ng=F8~lXmIm{1w{Lo z5fd}{oR0IRB~sC~drKYz4etZsTd2Cox@bI6z$bUpj~Y5A(VSgxXhAczwb zPnu7jGq0Tcw3Jauy}$@#6`UwY$c*-`PEC zny~MwQsC!Ps2{IwI9fhwv_yk?0{}ki@S6y_n=GY`=Q7Sz#RXQ2MUU6SuLu%SRavG{ zi7G*7_D*Sm>6B@@M24$@lJ zdtU!lMzwi}gN6WlP z?kC-X0lgyrLH@ko&+)G6?C!SK3Cl1$JnRl2xPkTxn^WA~yQ`yBWF;vyjPuNm{h+}A z;Jvke)hHt3nGZ~5gK*$~mlJE+ykSGNNY_z-bU^d(;L>^rb#VFhR<&1u=sp{U(HH@- zVa1M<58^UDK6SM@(-CkcgRIPE`U^fhi(GYv_&1KwzdFXtJ({LKQbt zKq5PhhXtxs0vbU;WA^pnMZNt zeD*#^%3yM9EeEkn?@PplEx?+6G*SC!PRUnADMu29-TCa1o5TOULS%^cN;g`?XOP6> zkFF5UYjsV@h%SB~JgRdUwQj8PCc3T#n+QSn?Ne*}d?g+$&-&8ZjGkAZk*wNOQEv=Zis%Hxg?`!lAs@Tlx!{9}d>6M~Zi8y+phr^2h*+1}DpxU0MSsbRvt z{6!j-JhsljIUjc9=vayPPxGqV0P)pS97t20NK3;3&yaQ(>Y9kabu1z`o+dmUU$!8j zoSF_ac*BU;36t*95z(#$h&M7pgZlvB|A?I=1RW3dD1)J~$r5b-d>VTSVgmu}Cm0%g z+cr;}7t>B6yLx{Zkcbz0l_68TKmp4xNJUy4(p z<<=A}BDu&kFoe?0x(J6CuS>CD2J8$J7z=mG&NZnrMJFgq8M>LDpWm6n98YOMpc!Kt zyM6<01&ZQTKu<;br+lt!9)771Mxk;z3heAsFbD{g*``zV-sZQc$7qqi|zTM}o0E9K4bt>nY1*z^xC(Qs~e@`wQfI}@tE$_<-HR|M(WsP1e_roO7i}8#PAwyYXpqN2Qk)!~58(=X-ro6W%xl(ep_6BQ*^w=?^|N#)>#DkQtgqLp5Hs*>vKX^V zL4|96w3}x4yUEP%R7U~cQUE`n;D_`do6*u0~IJo$@GY!jt<3l!__8n3^i zvP^jk*;M&y;Rx9VlECiRu})Hokm9?RLSy*znwwA+kL54BghS7b^V7C11G`U2UHWWD zYkb~Uahh9VZ|mi|02d_OX?;7yZz}PYUg06;$7tu?V@dONm#G+*c3G;>VCKpm4m4c0@GtU3(tYjwaf_ zKqR+W!L1;cVUIq*tMi@6d|_oe2@)%+0q3TmnsuBixaleKO@m@_Ii{0eOdA+YHdwiG z=CiVMc>PKipr}9Ir_d&5fRcKb`+?RY&*u|pnPvgZ$3knFTuSOA=R2n{czic`U3zGI z>V;+gfMv&4`Vd)nel~oMF5@+48I1qWXg$~e4qE@`_Rar6>p{Z&zmL`zYnOTnp}g$r z?Y-jrA&ggWceOmn>vccL4f`V~m`Vkd-5;%?keeVDt?#j862A9(`6AddXVp1=&aJjF zY$O{%&vlvCpgQ?N^@-N_L&mf#gd}eU1_l~kPx_M>{x3v5S)2*^)O+U2tcof6^C=Lc zThI!Em;54Unzc^kjS@Y-GmrT~l#(xDX0r4CE{+;ya5I;l_#Ie=qPH%X+V68U7Qzii zHq$g)j#S(9BGUOdrI!`~AaT`5vuX&RI#;IIWme8V^8w6;f!k-GEz1){Ktw-953OJ1 zL}S4-Mich_Y5-IhV|NV~RYb%}_z&EY5489kq12kkbO$0=2Z%)+Tg{8-vU*coehbr$ z?Q$4VONkx7NRN;EhcV8Mmhj%%jZ#IDf@>&^^l9hTd|cJ33(kFdTXqefy}B`){)+dx znWF#$+Wo2Lz?IJR(Aj0oxxvYNHe@}zOvZ9%6W-8H{p7T|HTxdg;dLr1zWemdhXrq+ z8{cb%I>^|>L{%?g-zz@3Q&#gf>X8IPA*4@^UF^SA^PI z6F&Y{f$<6b1&=OdSpeN;xW<+))A>@w<-2T$-ko+(yK$P`c?PG+x*0c?#Pi3pu#KPc zsF0KOMnYjEOd&NqStQH-EjL;!k6VgBgyzp}{EN_*I8h3T%WdA9u&=qHs%pq0@qKqT zfZnrbc{CPA{o@A-GhCHiPAbwwn=F#_QxXRb%>QR{%duLsV$Z}s6ji_#;$1M%epy%;mJc;HQq4YU? zf;>jE*P+r-86ik7Qn~s5H|fj&aCS4K-~TCR7rOOcp$OCne-#Vhh-a~vpPU>)9(P0` zA7IDz?B&0>y22&$I3Rx#89as3Kd^YOf2Fbie|5rF z`~KqO&l{naN{uyKq)nhe!@{@RK@(k~LY5rAAaUZz-zpF==%F~=fix{jviz`}lmKv8 zE}wbyhz;@_BnR)ee1?f7-p+94gyr1X@6P-I;>I5{e0Sl3nX5${nYp^ex-&DR?9X2v bWwKm)<8x+TyZ>jrB0 ca [label="create\n- master-cert"]; + admin ->> master [label="start\n- ca-root\n- master-cert"]; + + admin => ca [label="create\n- kubelet-cert"]; + admin ->> kubelet [label="start\n- ca-root\n- kubelet-cert\n- master-location"]; + + kubelet => master [label="register\n- kubelet-location"]; +} From 59e0bba24631462700ad9db6b41fecc730a807e7 Mon Sep 17 00:00:00 2001 From: Joe Beda Date: Fri, 9 Jan 2015 09:11:26 -0800 Subject: [PATCH 2/2] Tweaks based on comments --- clustering.md | 8 ++++++-- clustering/Makefile | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/clustering.md b/clustering.md index 659bed7d5..f447ef105 100644 --- a/clustering.md +++ b/clustering.md @@ -8,13 +8,16 @@ Once a cluster is established, the following is true: 1. **Master -> Node** The master needs to know which nodes can take work and what their current status is wrt capacity. 1. **Location** The master knows the name and location of all of the nodes in the cluster. + * For the purposes of this doc, location and name should be enough information so that the master can open a TCP connection to the Node. Most probably we will make this either an IP address or a DNS name. It is going to be important to be consistent here (master must be able to reach kubelet on that DNS name) so that we can verify certificates appropriately. 2. **Target AuthN** A way to securely talk to the kubelet on that node. Currently we call out to the kubelet over HTTP. This should be over HTTPS and the master should know what CA to trust for that node. - 3. **Caller AuthN/Z** Currently, this is only used to collect statistics as authorization isn't critical. This may change in the future though. + 3. **Caller AuthN/Z** This would be the master verifying itself (and permissions) when calling the node. Currently, this is only used to collect statistics as authorization isn't critical. This may change in the future though. 2. **Node -> Master** The nodes currently talk to the master to know which pods have been assigned to them and to publish events. 1. **Location** The nodes must know where the master is at. 2. **Target AuthN** Since the master is assigning work to the nodes, it is critical that they verify whom they are talking to. 3. **Caller AuthN/Z** The nodes publish events and so must be authenticated to the master. Ideally this authentication is specific to each node so that authorization can be narrowly scoped. The details of the work to run (including things like environment variables) might be considered sensitive and should be locked down also. +**Note:** While the description here refers to a singular Master, in the future we should enable multiple Masters operating in an HA mode. While the "Master" is currently the combination of the API Server, Scheduler and Controller Manager, we will restrict ourselves to thinking about the main API and policy engine -- the API Server. + ## Current Implementation A central authority (generally the master) is responsible for determining the set of machines which are members of the cluster. Calls to create and remove worker nodes in the cluster are restricted to this single authority, and any other requests to add or remove worker nodes are rejected. (1.i). @@ -35,10 +38,11 @@ The proposed solution will provide a range of options for setting up and maintai The building blocks of an easier solution: -* **Move to TLS** We will move to using TLS for all intra-cluster communication. We will work to explicitly distributing and trusting the CAs that should be trusted for each link. We will also use client certificates for all AuthN. +* **Move to TLS** We will move to using TLS for all intra-cluster communication. We will explicitly idenitfy the trust chain (the set of trusted CAs) as opposed to trusting the system CAs. We will also use client certificates for all AuthN. * [optional] **API driven CA** Optionally, we will run a CA in the master that will mint certificates for the nodes/kubelets. There will be pluggable policies that will automatically approve certificate requests here as appropriate. * **CA approval policy** This is a pluggable policy object that can automatically approve CA signing requests. Stock policies will include `always-reject`, `queue` and `insecure-always-approve`. With `queue` there would be an API for evaluating and accepting/rejecting requests. Cloud providers could implement a policy here that verifies other out of band information and automatically approves/rejects based on other external factors. * **Scoped Kubelet Accounts** These accounts are per-minion and (optionally) give a minion permission to register itself. + * To start with, we'd have the kubelets generate a cert/account in the form of `kubelet:`. To start we would then hard code policy such that we give that particular account appropriate permissions. Over time, we can make the policy engine more generic. * [optional] **Bootstrap API endpoint** This is a helper service hosted outside of the Kubernetes cluster that helps with initial discovery of the master. ### Static Clustering diff --git a/clustering/Makefile b/clustering/Makefile index 3f95bc07f..c4095421a 100644 --- a/clustering/Makefile +++ b/clustering/Makefile @@ -10,7 +10,7 @@ watch: fswatch *.seqdiag | xargs -n 1 sh -c "make || true" $(FONT): - curl -sLo $@ https://googlefontdirectory.googlecode.com/hg/apache/droidsansmono/DroidSansMono.ttf + curl -sLo $@ https://googlefontdirectory.googlecode.com/hg/apache/droidsansmono/$(FONT).ttf %.png: %.seqdiag $(FONT) seqdiag -a -f '$(FONT)' $<