See on õige, pärast vabastamist Hashicorpi konsul 1.5.0 2019. aasta mai alguses saate Consulis autoriseerida Kubernetes töötavaid rakendusi ja teenuseid.
Selles õpetuses loome samm-sammult POC (Proof of concept, PoC), mis demonstreerib seda uut funktsiooni. Teilt eeldatakse põhiteadmisi Kubernetese ja Hashicorpi konsuli kohta. Kuigi saate kasutada mis tahes pilveplatvormi või kohapealset keskkonda, kasutame selles õpetuses Google'i pilveplatvormi.
Vaadata
Kui me läheme Konsuli dokumentatsioon selle autoriseerimismeetodi kohta, saame kiire ülevaate selle eesmärgist ja kasutusjuhtumist, samuti mõningaid tehnilisi üksikasju ja üldise ülevaate loogikast. Soovitan seda enne jätkamist vähemalt korra lugeda, sest nüüd selgitan ja närin seda kõike.
Diagramm 1: Ametlik ülevaade konsuli volitamise meetodist
Muidugi on seal kasulikku teavet, kuid puudub juhend selle kohta, kuidas seda kõike tegelikult kasutada. Niisiis, nagu iga terve mõistusega inimene, otsite juhiseid Internetist. Ja siis... Sa ebaõnnestud. Juhtub. Teeme selle korda.
Enne kui asume oma POC loomise juurde, pöördume tagasi Consuli autoriseerimismeetodite ülevaate juurde (joonis 1) ja täpsustame seda Kubernetese kontekstis.
arhitektuur
Selles õpetuses loome eraldi masinas Consuli serveri, mis suhtleb Kubernetese klastriga, kuhu on installitud Consuli klient. Seejärel loome kaustas oma näiva rakenduse ja kasutame oma konfigureeritud autoriseerimismeetodit, et lugeda meie konsuli võtme/väärtuste poest.
Allolev diagramm kirjeldab üksikasjalikult arhitektuuri, mida me selles õpetuses loome, ja autoriseerimismeetodi taga olevat loogikat, mida selgitatakse hiljem.
Kiire märkus: selle toimimiseks ei pea Consul server elama väljaspool Kubernetese klastrit. Aga jah, ta oskab nii ja naa.
Niisiis, võttes konsuli ülevaate diagrammi (diagramm 1) ja rakendades sellele Kubernetes, saame ülaltoodud diagrammi (diagramm 2) ja loogika on järgmine:
Igale podile on lisatud teenusekonto, mis sisaldab Kubernetesi loodud ja teadaolevat JWT-märki. See märk sisestatakse vaikimisi ka podisse.
Meie podi sees rakendus või teenus käivitab meie Consul kliendile sisselogimiskäsu. Sisselogimistaotlus sisaldab ka meie tunnust ja nime spetsiaalselt loodud autoriseerimismeetod (Kubernetes tüüpi). See samm #2 vastab konsuli diagrammi 1. etapile (skeem 1).
Meie Consul klient edastab selle päringu meie konsuli serverisse.
MAAGIA! See on koht, kus Consul server kontrollib päringu autentsust, kogub teavet päringu identiteedi kohta ja võrdleb seda eelnevalt määratletud reeglitega. Allpool on selle illustreerimiseks veel üks diagramm. See samm vastab konsuli ülevaateskeemi (joonis 3) sammudele 4, 5 ja 1.
Meie konsuli server genereerib taotleja identiteedi osas lubadega konsuli märgi vastavalt meie määratud autoriseerimismeetodi reeglitele (mille oleme määratlenud). Seejärel saadab see märgi tagasi. See vastab konsuli diagrammi 6. etapile (joonis 1).
Meie konsul klient edastab märgi taotlevale rakendusele või teenusele.
Meie rakendus või teenus saab nüüd kasutada seda konsuli luba meie konsuli andmetega suhtlemiseks, mis on määratud loa õigustes.
Maagia on paljastatud!
Neile teist, kes ei ole rahul sellega, et jänes on mütsist välja võetud ja soovite teada, kuidas see toimib... las ma näitan teile, kui sügav on jäneseurg'.
Nagu varem mainitud, on meie "maagiline" samm (joonis 2: samm 4), kus Consul server autentib päringu, kogub päringu teavet ja võrdleb seda mis tahes seotud eelmääratletud reeglitega. See samm vastab konsuli ülevaateskeemi (joonis 3) sammudele 4, 5 ja 1. Allpool on diagramm (joonis 3), mille eesmärk on selgelt näidata, mis tegelikult toimub kapoti all spetsiifiline Kubernetese autoriseerimismeetod.
Diagramm 3: Maagia on paljastatud!
Alustuseks edastab meie Consul klient sisselogimispäringu meie Consuli serverisse Kubernetese konto tunnuse ja varem loodud autoriseerimismeetodi konkreetse eksemplari nimega. See samm vastab 3. sammule eelmises vooluringi selgituses.
Nüüd peab konsuli server (või juht) kontrollima vastuvõetud märgi autentsust. Seetõttu konsulteerib ta Kubernetese klastriga (Konsuli kliendi kaudu) ja vastavate lubadega selgitame välja, kas token on ehtne ja kellele see kuulub.
Seejärel tagastatakse kinnitatud päring konsuli juhile ja konsuli server otsib sisselogimistaotlusest (ja Kubernetese tüübist) määratud nimega autoriseerimismeetodi eksemplari.
Konsuli juht tuvastab määratud autoriseerimismeetodi eksemplari (kui see on leitud) ja loeb sellele lisatud siduvate reeglite komplekti. Seejärel loeb see neid reegleid ja võrdleb neid kinnitatud identiteediatribuutidega.
TA-dah! Liigume edasi 5. sammu juurde eelmises vooluringi selgituses.
Käivitage Consul-server tavalises virtuaalmasinas
Edaspidi annan enamasti juhiseid selle POC loomise kohta, sageli täppides, ilma täislausete selgitusteta. Nagu varem märgitud, kasutan kogu infrastruktuuri loomiseks GCP-d, kuid sama infrastruktuuri saate luua ka mujal.
Käivitage virtuaalmasin (eksemplar/server).
Looge tulemüüri reegel (AWS-i turvarühm):
Mulle meeldib määrata nii reeglile kui ka võrgusildile sama masina nimi, antud juhul "skywiz-consul-server-poc".
Otsige üles oma kohaliku arvuti IP-aadress ja lisage see lähte-IP-aadresside loendisse, et saaksime juurdepääsu kasutajaliidesele (UI).
Avage kasutajaliidese jaoks port 8500. Klõpsake nuppu Loo. Muudame seda tulemüüri varsti uuesti [link].
Lisage eksemplarile tulemüüri reegel. Minge tagasi Consul Serveri VM-i armatuurlauale ja lisage võrgusiltide väljale "skywiz-consul-server-poc". Klõpsake nuppu Salvesta.
Installige Consul virtuaalsesse masinasse, vaadake siit. Pidage meeles, et vajate Consuli versiooni ≥ 1.5 [link]
Loome ühe sõlme Consul - konfiguratsioon on järgmine.
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
Üksikasjalikuma juhendi Consuli installimise ja 3 sõlmest koosneva klastri seadistamise kohta vt siin.
consul agent
-server
-ui
-client 0.0.0.0
-data-dir=/var/lib/consul
-bootstrap-expect=1
-config-dir=/etc/consul.d
Peaksite nägema hunnikut väljundit ja lõppema tekstiga "... värskendus on ACL-ide poolt blokeeritud".
Otsige üles Consul serveri väline IP-aadress ja avage selle IP-aadressiga brauser pordis 8500. Veenduge, et kasutajaliides avaneb.
Proovige lisada võtme/väärtuse paar. Peab olema viga. Selle põhjuseks on asjaolu, et laadisime Consuli serverisse ACL-i ja keelasime kõik reeglid.
Minge tagasi oma kestale Consul serveris ja käivitage protsess taustal või mõnel muul viisil selle käivitamiseks ning sisestage järgmine:
consul acl bootstrap
Leidke väärtus "SecretID" ja naaske kasutajaliidese juurde. Sisestage vahekaardil ACL äsja kopeeritud loa salajane ID. Kopeerige SecretID kuhugi mujale, meil läheb seda hiljem vaja.
Nüüd lisage võtme/väärtuse paar. Selle POC jaoks lisage järgmine: võti: "custom-ns/test_key", väärtus: "Olen kohandatud-ns-i kaustas!"
Kubernetese klastri käivitamine meie rakenduse jaoks koos Consul kliendiga kui Daemonset
Looge K8s (Kubernetes) klaster. Loome selle kiiremaks juurdepääsuks serveriga samasse tsooni ja saame kasutada sama alamvõrku, et hõlpsasti sisemiste IP-aadressidega ühenduse luua. Nimetame seda "skywiz-app-with-consul-client-poc".
Vahemärkusena on siin hea õpetus, milleni sattusin Consul Connectiga POC Consul klastri loomisel.
Kasutame ka Hashicorpi roolidiagrammi koos laiendatud väärtuste failiga.
Installige ja konfigureerige Helm. Konfigureerimise sammud:
Kasutage järgmist väärtusfaili (märkus, et olen enamiku keelanud):
### 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
Rakenda roolidiagrammi:
./helm install -f poc-helm-consul-values.yaml ./consul-helm - name skywiz-app-with-consul-client-poc
Kui see proovib käivitada, vajab see Consul serveri õigusi, nii et lisame need.
Pange tähele klastri armatuurlaual asuvat „Podi aadressivahemikku” ja vaadake tagasi meie tulemüürireeglit „skywiz-consul-server-poc”.
Lisage kabiini aadressivahemik IP-aadresside loendisse ja avage pordid 8301 ja 8300.
Minge konsuli kasutajaliidese ja mõne minuti pärast näete sõlmede vahekaardil meie klastrit.
Naaske Consul serveri kesta ja eksportige varem salvestatud luba:
export CONSUL_HTTP_TOKEN=<SecretID>
Auth-meetodi eksemplari loomiseks vajame teavet meie Kubernetese klastrist:
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:
Token on base64 kodeeritud, nii et dekrüpteerige see oma lemmiktööriista abil [link]
kubernetes-ca-cert
kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:
Võtke "ca.crt" sertifikaat (pärast base64 dekodeerimist) ja kirjutage see faili "ca.crt".
Nüüd looge autentimismeetod, asendades kohahoidjad äsja saadud väärtustega.
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>"
Järgmisena peame looma reegli ja lisama selle uuele rollile. Selle osa jaoks saate kasutada Consul UI-d, kuid me kasutame käsurida.
Seejärel kasutage konfiguratsioonikaardi loomiseks järgmist sisseehitatud käsku [link]. Pange tähele, et me viitame oma teenuse nimele, vajadusel asendage see.
Looge sama ülataseme võtmega veel mitu võtmekausta (st. /sample_key) ja teie valitud väärtus. Looge uute võtmeteede jaoks sobivad poliitikad ja rollid. Sidemed teeme hiljem.
Kohandatud nimeruumi test:
Loome oma nimeruumi:
kubectl create namespace custom-ns
Loome oma uues nimeruumis kausta. Kirjutage podi konfiguratsioon.
Saate base64 dekodeerida "Väärtuse" ja vaadata, et see ühtiks kasutajaliidese jaotises custom-ns/test_key oleva väärtusega. Kui kasutasite selles õpetuses ülaltoodud väärtust, oleks teie kodeeritud väärtus IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi.
Kasutajateenuse konto test:
Looge kohandatud teenusekonto, kasutades järgmist käsku [link].
Samuti saate tagada, et see luba ei anna juurdepääsu kv-le jaotises "custom-ns/". Lihtsalt korrake ülaltoodud käsku pärast "custom-sa" asendamist eesliitega "custom-ns".
Luba ei antud.
Ülekatte näide:
Väärib märkimist, et kõik reeglid siduvad vastendused lisatakse nende õigustega märgile.
Meie konteiner "poc-ubuntu-custom-sa" on vaikenimeruumis – nii et kasutame seda teistsuguse reegli sidumiseks.
Korrake eelmisi samme:
a) Looge vaikimisi/-klahvi eesliite jaoks identne poliitika.
b) Looge roll, pange sellele nimi "default-ns-role"
c) Lisage rollile poliitika.
Looge reeglite sidumine (võimalik ainult cli/api kaudu)
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='default-ns-role'
-selector='serviceaccount.namespace=="default"'
Minge tagasi meie konteinerisse "poc-ubuntu-custom-sa" ja proovige pääseda juurde kv-teele "default/".
Luba ei antud.
Saate vaadata kasutajaliidese iga loa määratud mandaate jaotises ACL > Tokens. Nagu näete, on meie praegusel märgil ainult üks kohandatud roll. Praegu kasutatav märk genereeriti sisselogimisel ja siis oli ainult üks reegli sidumine, mis sobis. Peame uuesti sisse logima ja kasutama uut tunnust.
Veenduge, et saaksite lugeda nii "custom-sa/" kui ka "default/" kv-teelt.
Edu!
Seda seetõttu, et meie "poc-ubuntu-custom-sa" vastab "custom-sa" ja "default-ns" reegli sidumistele.
Järeldus
TTL token mgmt?
Selle kirjutamise ajal ei olnud integreeritud viisi selle autoriseerimismeetodi abil loodud žetoonide TTL-i määramiseks. See oleks suurepärane võimalus tagada konsuli volituste turvaline automatiseerimine.