Introduzzjoni għall-Awtorizzazzjoni Kubernetes ta' Hashicorp Consul
Hekk hu, wara r-rilaxx Hashicorp Consul 1.5.0 fil-bidu ta' Mejju 2019, f'Consul tista' tawtorizza applikazzjonijiet u servizzi li jaħdmu f'Kubernetes b'mod nattiv.
F'dan it-tutorja aħna noħolqu pass pass POC (Prova tal-kunċett, PoC) li turi din il-karatteristika ġdida. Inti mistenni li jkollok għarfien bażiku ta' Kubernetes u l-Konslu ta' Hashicorp. Filwaqt li tista' tuża kwalunkwe pjattaforma tal-cloud jew ambjent fuq il-post, f'dan it-tutorja se nużaw il-Pjattaforma tal-Cloud ta' Google.
Reviżjoni
Jekk immorru Dokumentazzjoni tal-konslu dwar il-metodu ta' awtorizzazzjoni tiegħu, aħna ser tingħata ħarsa ġenerali ta 'malajr ta' l-iskop tagħha u l-każ ta 'użu, kif ukoll xi dettalji tekniċi u ħarsa ġenerali ġenerali tal-loġika. Nirrakkomanda ħafna li taqrah mill-inqas darba qabel ma nipproċedi, peress li issa se nkun qed nispjegaha u tomgħodha kollha.
Dijagramma 1: Ħarsa ġenerali uffiċjali tal-metodu ta' awtorizzazzjoni tal-Konsli
Żgur, hemm informazzjoni utli hemmhekk, iżda m'hemm l-ebda gwida dwar kif fil-fatt tużaha kollha. Allura, bħal kull persuna sensiela, inti tgħajjat l-Internet għall-gwida. U mbagħad... Inti tonqos. Dan jiġri. Ejja nirranġaw dan.
Qabel ma ngħaddu għall-ħolqien tal-POC tagħna, ejja mmorru lura għall-ħarsa ġenerali tal-metodi ta 'awtorizzazzjoni tal-Konslu (Dijagramma 1) u rfinawh fil-kuntest ta' Kubernetes.
arkitettura
F'dan it-tutorja, se noħolqu server Konslu fuq magna separata li tikkomunika ma' cluster Kubernetes bil-klijent Konslu installat. Imbagħad se noħolqu l-applikazzjoni finta tagħna fil-pod u nużaw il-metodu ta 'awtorizzazzjoni konfigurat tagħna biex naqraw mill-maħżen taċ-ċavetta/valur tal-Konslu tagħna.
Id-dijagramma t'hawn taħt tagħti dettalji dwar l-arkitettura li qed noħolqu f'dan it-tutorja, kif ukoll il-loġika wara l-metodu ta 'awtorizzazzjoni, li se tiġi spjegata aktar tard.
Dijagramma 2: Ħarsa ġenerali tal-Metodu ta' Awtorizzazzjoni Kubernetes
Nota ta 'malajr: is-server tal-Konslu m'għandux għalfejn jgħix barra mill-cluster Kubernetes biex dan jaħdem. Imma iva, jista 'jagħmel dan il-mod u l-ieħor.
Allura, billi nieħdu d-dijagramma tal-ħarsa ġenerali tal-Konslu (Dijagramma 1) u napplikaw Kubernetes għaliha, niksbu d-dijagramma ta 'hawn fuq (Dijagramma 2), u l-loġika hawnhekk hija kif ġej:
Kull pod se jkollu kont tas-servizz mehmuż miegħu li jkun fih token JWT iġġenerat u magħruf minn Kubernetes. Dan it-token jiddaħħal ukoll fil-pod b'mod awtomatiku.
L-applikazzjoni jew is-servizz tagħna ġewwa l-pod jibda kmand tal-login lill-klijent Konslu tagħna. It-talba tal-login se tinkludi wkoll it-token u l-isem tagħna maħluqa apposta metodu ta' awtorizzazzjoni (tip Kubernetes). Dan il-pass #2 jikkorrispondi għall-pass 1 tad-dijagramma tal-Konslu (Skema 1).
Il-klijent tal-Konslu tagħna mbagħad jgħaddi din it-talba lis-server tal-Konslu tagħna.
MAGIKA! Dan huwa fejn is-server tal-Konslu jivverifika l-awtentiċità tat-talba, jiġbor informazzjoni dwar l-identità tat-talba u jqabbelha ma 'kwalunkwe regola assoċjata predefinita. Hawn taħt hemm dijagramma oħra biex turi dan. Dan il-pass jikkorrispondi għall-passi 3, 4 u 5 tad-dijagramma tal-ħarsa ġenerali tal-Konslu (Dijagramma 1).
Is-server tal-Konslu tagħna jiġġenera token tal-Konslu b'permessi skont ir-regoli tal-metodu tal-awtorizzazzjoni speċifikati tagħna (li ddefinijna aħna) rigward l-identità ta' min jagħmel it-talba. Imbagħad jibgħat dak it-token lura. Dan jikkorrispondi mal-pass 6 tad-dijagramma tal-Konslu (Dijagramma 1).
Il-klijent tal-Konslu tagħna jgħaddi t-token lill-applikazzjoni jew is-servizz li qed jagħmel it-talba.
L-applikazzjoni jew is-servizz tagħna issa jistgħu jużaw dan it-token tal-Konslu biex jikkomunikaw mad-dejta tal-Konslu tagħna, kif determinat mill-privileġġi tat-token.
Il-maġija hija żvelata!
Għal dawk minnkom li mhumiex kuntenti b'fenek biss minn kappell u jridu jkunu jafu kif jaħdem... ħallini "nurik kemm hu profond toqba tal-fenek".
Kif issemma qabel, il-pass "maġiku" tagħna (Figura 2: Pass 4) huwa fejn is-server tal-Konslu jawtentika t-talba, jiġbor informazzjoni dwar it-talba, u jqabbelha ma' kwalunkwe regola predefinita assoċjata. Dan il-pass jikkorrispondi għall-passi 3, 4 u 5 tad-dijagramma tal-ħarsa ġenerali tal-Konslu (Dijagramma 1). Hawn taħt hemm dijagramma (Dijagramma 3), li l-għan tagħha huwa li juri b'mod ċar dak li qed jiġri fil-fatt taħt il-barnuża metodu speċifiku ta’ awtorizzazzjoni Kubernetes.
Dijagramma 3: Il-maġija hija żvelata!
Bħala punt tat-tluq, il-klijent Konslu tagħna jgħaddi t-talba tal-login lis-server tal-Konslu tagħna bit-token tal-kont Kubernetes u l-isem tal-istanza speċifika tal-metodu ta 'awtorizzazzjoni li nħoloq qabel. Dan il-pass jikkorrispondi għall-pass 3 fl-ispjegazzjoni taċ-ċirkwit preċedenti.
Issa s-server tal-Konslu (jew il-mexxej) jeħtieġ li jivverifika l-awtentiċità tat-token riċevut. Għalhekk, se tikkonsulta l-cluster Kubernetes (permezz tal-klijent Konslu) u, bil-permessi xierqa, insibu jekk it-token huwiex ġenwin u ta' min jappartjeni.
It-talba vvalidata mbagħad tiġi rritornata lill-mexxej tal-Konslu, u s-server tal-Konslu jfittex l-istanza tal-metodu ta 'awtorizzazzjoni bl-isem speċifikat mit-talba tal-login (u t-tip Kubernetes).
Il-mexxej tal-konslu jiddetermina l-istanza tal-metodu ta’ awtorizzazzjoni speċifikata (jekk jinstab) u jaqra s-sett ta’ regoli vinkolanti li huma mehmuża magħha. Imbagħad jaqra dawn ir-regoli u jqabbelhom mal-attributi tal-identità verifikati.
Minn issa 'l quddiem, l-aktar ser inkun qed nagħti struzzjonijiet dwar kif toħloq dan il-POC, ħafna drabi f'punti ta' bulit, mingħajr spjegazzjonijiet ta' sentenzi sħaħ. Ukoll, kif innutat qabel, se nuża GCP biex noħloq l-infrastruttura kollha, iżda tista 'toħloq l-istess infrastruttura kullimkien ieħor.
Inħobb nassenja l-istess isem tal-magna kemm għar-regola kif ukoll għat-tikketta tan-netwerk, f'dan il-każ "skywiz-consul-server-poc".
Sib l-indirizz IP tal-kompjuter lokali tiegħek u żidu mal-lista tal-indirizzi IP tas-sors sabiex inkunu nistgħu naċċessaw l-interface tal-utent (UI).
Iftaħ il-port 8500 għall-UI. Ikklikkja Oħloq. Aħna se nerġgħu nbiddlu dan il-firewall dalwaqt [rabta].
Żid regola tal-firewall mal-istanza. Mur lura għad-dashboard tal-VM fuq Consul Server u żid "skywiz-consul-server-poc" fil-qasam tat-tikketti tan-netwerk. Ikklikkja Save.
Installa Consul fuq magna virtwali, iċċekkja hawn. Ftakar li għandek bżonn il-verżjoni tal-Konslu ≥ 1.5 [link]
Ejja noħolqu node wieħed Konslu - il-konfigurazzjoni hija kif ġej.
groupadd --system consul
useradd -s /sbin/nologin --system -g consul consul
mkdir -p /var/lib/consul
chown -R consul:consul /var/lib/consul
chmod -R 775 /var/lib/consul
mkdir /etc/consul.d
chown -R consul:consul /etc/consul.d
Għal gwida aktar dettaljata dwar l-installazzjoni tal-Konsul u t-twaqqif ta 'grupp ta' 3 nodi, ara hawn.
Oħloq fajl /etc/consul.d/agent.json kif ġej [rabta]:
consul agent
-server
-ui
-client 0.0.0.0
-data-dir=/var/lib/consul
-bootstrap-expect=1
-config-dir=/etc/consul.d
Għandek tara mazz ta 'output u tispiċċa b'"... aġġornament imblukkat minn ACLs."
Sib l-indirizz IP estern tas-server Konslu u iftaħ browser b'dan l-indirizz IP fuq il-port 8500. Kun żgur li l-UI tiftaħ.
Ipprova żid par ċavetta/valur. Għandu jkun hemm żball. Dan għaliex għabbejna s-server tal-Konslu b'ACL u ddiżattivajna r-regoli kollha.
Mur lura għall-qoxra tiegħek fuq is-server tal-Konslu u ibda l-proċess fl-isfond jew b'xi mod ieħor biex tibda taħdem u daħħal dan li ġej:
consul acl bootstrap
Sib il-valur "SecretID" u lura għall-UI. Fit-tab ACL, daħħal l-ID sigrieta tat-token li għadek kif ikkuppjat. Ikkopja SecretID x'imkien ieħor, ikollna bżonnha aktar tard.
Issa żid par ċavetta/valur. Għal dan il-POC, żid dan li ġej: ċavetta: “custom-ns/test_key”, valur: “Jien fil-folder custom-ns!”
Tnedija ta 'cluster Kubernetes għall-applikazzjoni tagħna mal-klijent Consul bħala Daemonset
Oħloq cluster K8s (Kubernetes). Aħna ser noħolquha fl-istess żona bħas-server għal aċċess aktar mgħaġġel, u għalhekk nistgħu nużaw l-istess subnet biex nikkonnettjaw faċilment ma 'indirizzi IP interni. Aħna ser nsejħulu "skywiz-app-with-consul-client-poc".
Bħala nota tal-ġenb, hawn tutorja tajba li ltqajt magħha waqt li kont qed nistabbilixxi raggruppament tal-POC Consul ma’ Consul Connect.
Se nkunu qed nużaw ukoll it-tmun tat-tmun ta 'Hashicorp b'fajl ta' valuri estiż.
Installa u kkonfigurat Helm. Passi tal-konfigurazzjoni:
Uża l-fajl tal-valur li ġej (nota li ddiżattivajt l-aktar):
### poc-helm-consul-values.yaml
global:
enabled: false
image: "consul:latest"
# Expose the Consul UI through this LoadBalancer
ui:
enabled: false
# Allow Consul to inject the Connect proxy into Kubernetes containers
connectInject:
enabled: false
# Configure a Consul client on Kubernetes nodes. GRPC listener is required for Connect.
client:
enabled: true
join: ["<PRIVATE_IP_CONSUL_SERVER>"]
extraConfig: |
{
"acl" : {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true
}
}
# Minimal Consul configuration. Not suitable for production.
server:
enabled: false
# Sync Kubernetes and Consul services
syncCatalog:
enabled: false
Applika chart tat-tmun:
./helm install -f poc-helm-consul-values.yaml ./consul-helm - name skywiz-app-with-consul-client-poc
Meta jipprova jaħdem, ikollu bżonn permessi għas-server tal-Konslu, allura ejja nżiduhom.
Innota l-"Pod Address Range" li tinsab fuq id-dashboard tal-cluster u irreferi għar-regola tagħna tal-firewall "skywiz-consul-server-poc".
Żid il-firxa tal-indirizzi għall-pod mal-lista tal-indirizzi IP u l-portijiet miftuħa 8301 u 8300.
Mur fil-Konslu UI u wara ftit minuti tara l-cluster tagħna jidher fit-tab tan-nodi.
Konfigurazzjoni ta' Metodu ta' Awtorizzazzjoni billi Tintegra l-Konsul ma' Kubernetes
Irritorna lejn il-qoxra tas-server tal-Konsul u esporta t-token li ssejvjajt qabel:
export CONSUL_HTTP_TOKEN=<SecretID>
Ikollna bżonn informazzjoni mill-cluster Kubernetes tagħna biex noħolqu eżempju tal-metodu awth:
kubernetes-host
kubectl get endpoints | grep kubernetes
kubernetes-service-account-jwt
kubectl get sa <helm_deployment_name>-consul-client -o yaml | grep "- name:"
kubectl get secret <secret_name_from_prev_command> -o yaml | grep token:
It-token huwa kodifikat base64, għalhekk iddekriptah billi tuża l-għodda favorita tiegħek [rabta]
kubernetes-ca-cert
kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:
Ħu ċ-ċertifikat "ca.crt" (wara d-dekodifikazzjoni base64) u ikteb fil-fajl "ca.crt".
Issa istanzija l-metodu ta 'awtentikazzjoni, billi tissostitwixxi l-placeholders bil-valuri li għadek kif irċevejt.
consul acl auth-method create
-type "kubernetes"
-name "auth-method-skywiz-consul-poc"
-description "This is an auth method using kubernetes for the cluster skywiz-app-with-consul-client-poc"
-kubernetes-host "<k8s_endpoint_retrieved earlier>"
[email protected]
-kubernetes-service-account-
jwt="<decoded_token_retrieved_earlier>"
Sussegwentement irridu noħolqu regola u nwaħħalha mar-rwol il-ġdid. Għal din il-parti tista 'tuża Consul UI, iżda aħna se nużaw il-linja tal-kmand.
Imbagħad uża l-kmand mibni li ġej biex toħloq configmap [rabta]. Jekk jogħġbok innota li qed nirreferu għall-isem tas-servizz tagħna, tibdilha jekk meħtieġ.
Oħloq diversi folders ewlenin oħra bl-istess ċavetta tal-ogħla livell (i.e. /sample_key) u valur tal-għażla tiegħek. Oħloq politiki u rwoli xierqa għal mogħdijiet ewlenin ġodda. Nagħmlu l-irbit aktar tard.
Test tal-ispazju tal-isem personalizzat:
Ejja noħolqu l-ispazju tal-isem tagħna stess:
kubectl create namespace custom-ns
Ejja noħolqu pod fl-ispazju tal-isem il-ġdid tagħna. Ikteb il-konfigurazzjoni għall-pod.
Tista 'tibbaża64 jiddekowdja "Valur" u tara li jaqbel mal-valur f'custom-ns/test_key fl-UI. Jekk użajt l-istess valur hawn fuq f'dan it-tutorja, il-valur kodifikat tiegħek ikun IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi.
Test tal-kont tas-servizz tal-utent:
Oħloq ServiceAccount tad-dwana billi tuża l-kmand li ġej [rabta].
Permess miċħud. Oh, insejt inżidu regoli ġodda li jorbtu bil-permessi xierqa, ejja nagħmlu dan issa.
Irrepeti l-passi preċedenti hawn fuq:
a) Oħloq Politika identika għall-prefiss “custom-sa/”.
b) Oħloq Rwol, sejjaħlu “custom-sa-role”
c) Waħħal il-Politika mar-Rwol.
Oħloq Rule-Binding (possibbli biss minn cli/api). Innota t-tifsira differenti tal-bandiera tas-selettur.
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='custom-sa-role'
-selector='serviceaccount.name=="custom-sa"'
Tista' wkoll tiżgura li dan it-token ma jagħtix aċċess għal kv f'"custom-ns/". Irrepeti biss il-kmand ta 'hawn fuq wara li tissostitwixxi "custom-sa" bil-prefiss "custom-ns".
Permess miċħud.
Eżempju ta' overlay:
Ta 'min jinnota li l-mappings kollha li jorbtu r-regoli se jiżdiedu mat-token b'dawn id-drittijiet.
Il-kontenitur tagħna "poc-ubuntu-custom-sa" jinsab fl-ispazju tal-isem default - allura ejja nużawh għal rbit differenti tar-regoli.
Irrepeti l-passi preċedenti:
a) Oħloq Politika identika għall-prefiss ewlieni “default/”.
b) Oħloq Rwol, isimha "default-ns-role"
c) Waħħal il-Politika mar-Rwol.
Oħloq Irbit ta' Regola (possibbli biss minn cli/api)
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='default-ns-role'
-selector='serviceaccount.namespace=="default"'
Mur lura għall-kontenitur "poc-ubuntu-custom-sa" tagħna u pprova jaċċessa l-mogħdija kv "default/".
Permess miċħud.
Tista' tara l-kredenzjali speċifikati għal kull token fl-UI taħt ACL > Tokens. Kif tistgħu taraw, it-token attwali tagħna għandu biss "custom-sa-role" wieħed imwaħħal miegħu. It-token li qed nużaw bħalissa ġie ġġenerat meta dħalna u kien hemm rbit wieħed biss ta' regola li qabbel dak iż-żmien. Għandna bżonn nerġgħu nilloggjaw u nużaw it-token il-ġdid.
Kun żgur li tista 'taqra kemm mill-mogħdijiet kv "custom-sa/" kif ukoll "default/".
Success!
Dan għaliex il-“poc-ubuntu-custom-sa” tagħna jaqbel mar-rabta tar-regoli “custom-sa” u “default-ns”.
Konklużjoni
TTL token mgmt?
Fiż-żmien ta 'din il-kitba, m'hemm l-ebda mod integrat biex jiġi ddeterminat it-TTL għal tokens iġġenerati minn dan il-metodu ta' awtorizzazzjoni. Tkun opportunità meraviljuża li tipprovdi awtomazzjoni sigura tal-awtorizzazzjoni tal-Konslu.