TieÅ”i tÄ, pÄc atbrÄ«voÅ”anas Hashicorp Consul 1.5.0 2019. gada maija sÄkumÄ vietnÄ Consul varat autorizÄt lietojumprogrammas un pakalpojumus, kas darbojas Kubernetes.
Å ajÄ apmÄcÄ«bÄ mÄs izveidosim soli pa solim POC (Proof of Concept, PoC), kas demonstrÄ Å”o jauno funkciju. Jums ir jÄbÅ«t pamatzinÄÅ”anÄm par Kubernetes un Hashicorp konsulu. Lai gan varat izmantot jebkuru mÄkoÅa platformu vai lokÄlo vidi, Å”ajÄ apmÄcÄ«bÄ mÄs izmantosim Google mÄkoÅu platformu.
PÄrskatiet
Ja mÄs ejam uz KonsulÄta dokumentÄcija par tÄ autorizÄcijas metodi, mÄs iegÅ«sim Ätru pÄrskatu par tÄ mÄrÄ·i un lietoÅ”anas gadÄ«jumu, kÄ arÄ« dažas tehniskas detaļas un vispÄrÄ«gu loÄ£ikas pÄrskatu. Es ļoti iesaku to izlasÄ«t vismaz vienu reizi, pirms turpinÄt, jo tagad es to visu izskaidroÅ”u un koŔļÄÅ”u.
1. diagramma: OficiÄlais pÄrskats par konsula autorizÄcijas metodi
Protams, tur ir noderÄ«ga informÄcija, taÄu nav ceļveža, kÄ to visu izmantot. TÄtad, kÄ jebkurÅ” saprÄtÄ«gs cilvÄks, jÅ«s meklÄjat padomus internetÄ. Un tad... Jums neizdodas. Tas notiek. Labosim Å”o.
Pirms pÄrejam pie mÅ«su POC izveides, atgriezÄ«simies pie konsula autorizÄcijas metožu pÄrskata (1. diagramma) un precizÄsim to Kubernetes kontekstÄ.
Arhitektūra
Å ajÄ apmÄcÄ«bÄ mÄs izveidosim Consul serveri atseviÅ”Ä·Ä maŔīnÄ, kas sazinÄsies ar Kubernetes klasteru ar instalÄtu Consul klientu. PÄc tam mÄs podÄ izveidosim savu fiktÄ«vo lietojumprogrammu un izmantosim mÅ«su konfigurÄto autorizÄcijas metodi, lai lasÄ«tu no mÅ«su Consul atslÄgu/vÄrtÄ«bu krÄtuves.
TÄlÄk esoÅ”ajÄ diagrammÄ ir detalizÄti aprakstÄ«ta arhitektÅ«ra, ko veidojam Å”ajÄ apmÄcÄ«bÄ, kÄ arÄ« autorizÄcijas metodes loÄ£ika, kas tiks izskaidrota vÄlÄk.
2. diagramma: Kubernetes autorizÄcijas metodes pÄrskats
ÄŖsa piezÄ«me: lai tas darbotos, Consul serverim nav jÄdzÄ«vo Ärpus Kubernetes klastera. Bet jÄ, viÅÅ” var tÄ un Å”itÄ.
TÄtad, Åemot Consul pÄrskata diagrammu (1. diagramma) un piemÄrojot tai Kubernetes, mÄs iegÅ«stam iepriekÅ” redzamo diagrammu (2. diagramma), un loÄ£ika Å”eit ir Å”Äda:
Katram podam bÅ«s pievienots pakalpojuma konts, kurÄ bÅ«s Kubernetes Ä£enerÄts un zinÄms JWT marÄ·ieris. Å is marÄ·ieris pÄc noklusÄjuma tiek ievietots arÄ« podÄ.
MÅ«su lietojumprogramma vai pakalpojums podÄ uzsÄk pieteikÅ”anÄs komandu mÅ«su Consul klientam. PieteikÅ”anÄs pieprasÄ«jumÄ bÅ«s arÄ« mÅ«su pilnvara un vÄrds Ä«paÅ”i izveidots autorizÄcijas metode (Kubernetes tips). Å is 2. solis atbilst konsula diagrammas 1. solim (1. shÄma).
MÅ«su Consul klients pÄc tam pÄrsÅ«tÄ«s Å”o pieprasÄ«jumu uz mÅ«su konsula serveri.
MAÄ¢IJA! Å eit Consul serveris pÄrbauda pieprasÄ«juma autentiskumu, apkopo informÄciju par pieprasÄ«juma identitÄti un salÄ«dzina to ar jebkuriem saistÄ«tajiem iepriekÅ” definÄtajiem noteikumiem. ZemÄk ir cita diagramma, kas to ilustrÄ. Å is solis atbilst 3., 4. un 5. solim konsulu pÄrskata diagrammÄ (1. diagramma).
MÅ«su Consul serveris Ä£enerÄ Consul marÄ·ieri ar atļaujÄm saskaÅÄ ar mÅ«su norÄdÄ«tajiem autorizÄcijas metodes noteikumiem (ko esam definÄjuÅ”i) attiecÄ«bÄ uz pieprasÄ«tÄja identitÄti. PÄc tam tas nosÅ«tÄ«s Å”o marÄ·ieri atpakaļ. Tas atbilst konsula diagrammas 6. solim (1. diagramma).
MÅ«su konsula klients pÄrsÅ«ta marÄ·ieri pieprasÄ«tÄjai lietojumprogrammai vai pakalpojumam.
MÅ«su lietojumprogramma vai pakalpojums tagad var izmantot Å”o Consul pilnvaru, lai sazinÄtos ar mÅ«su konsula datiem, kÄ noteikts pilnvaras privilÄÄ£ijÄs.
MaÄ£ija ir atklÄta!
Tiem no jums, kuri nav apmierinÄti ar truÅ”u no cepures un vÄlas uzzinÄt, kÄ tas darbojas... ļaujiet man parÄdÄ«t, cik dziļi truÅ”a ala'.
KÄ minÄts iepriekÅ”, mÅ«su "maÄ£iskais" solis (2. attÄls: 4. darbÄ«ba) ir tas, kurÄ Consul serveris autentificÄ pieprasÄ«jumu, apkopo informÄciju par pieprasÄ«jumu un salÄ«dzina to ar jebkuriem saistÄ«tajiem iepriekÅ” definÄtajiem noteikumiem. Å is solis atbilst 3., 4. un 5. solim konsulu pÄrskata diagrammÄ (1. diagramma). ZemÄk ir diagramma (3. diagramma), kuras mÄrÄ·is ir skaidri parÄdÄ«t, kas patiesÄ«bÄ notiek zem kapuces specifiska Kubernetes autorizÄcijas metode.
3. diagramma: MaÄ£ija ir atklÄta!
SÄkumÄ mÅ«su Consul klients pÄrsÅ«ta pieteikÅ”anÄs pieprasÄ«jumu uz mÅ«su Consul serveri ar Kubernetes konta pilnvaru un iepriekÅ” izveidotÄs autorizÄcijas metodes konkrÄtu instances nosaukumu. Å is solis atbilst 3. darbÄ«bai iepriekÅ”ÄjÄ Ä·Ädes skaidrojumÄ.
Tagad konsula serverim (vai vadÄ«tÄjam) ir jÄpÄrbauda saÅemtÄ marÄ·iera autentiskums. TÄpÄc tÄ konsultÄsies ar Kubernetes klasteru (ar Consul klienta starpniecÄ«bu) un ar atbilstoÅ”Äm atļaujÄm noskaidrosim, vai marÄ·ieris ir Ä«sts un kam tas pieder.
PÄc tam apstiprinÄtais pieprasÄ«jums tiek atgriezts konsula vadÄ«tÄjam, un Consul serveris meklÄ autorizÄcijas metodes gadÄ«jumu ar norÄdÄ«to nosaukumu no pieteikÅ”anÄs pieprasÄ«juma (un Kubernetes veida).
Konsula vadÄ«tÄjs identificÄ norÄdÄ«to autorizÄcijas metodes gadÄ«jumu (ja ir atrasts) un nolasa tai pievienoto saistoÅ”o noteikumu kopumu. PÄc tam tas nolasa Å”os noteikumus un salÄ«dzina tos ar pÄrbaudÄ«tajiem identitÄtes atribÅ«tiem.
TA-dah! PÄrejam uz 5. darbÄ«bu iepriekÅ”ÄjÄ shÄmas skaidrojumÄ.
TurpmÄk es galvenokÄrt sniegÅ”u norÄdÄ«jumus, kÄ izveidot Å”o POC, bieži vien aizzÄ«mju punktos, bez pilniem teikumu paskaidrojumiem. TÄpat, kÄ minÄts iepriekÅ”, es izmantoÅ”u GCP, lai izveidotu visu infrastruktÅ«ru, taÄu jÅ«s varat izveidot tÄdu paÅ”u infrastruktÅ«ru jebkur citur.
SÄciet virtuÄlo maŔīnu (instance/serveris).
Izveidojiet kÄrtulu ugunsmÅ«rim (droŔības grupa AWS):
Man patÄ«k gan kÄrtulai, gan tÄ«kla tagam pieŔķirt vienu un to paÅ”u maŔīnas nosaukumu, Å”ajÄ gadÄ«jumÄ "skywiz-consul-server-poc".
Atrodiet sava lokÄlÄ datora IP adresi un pievienojiet to avota IP adreÅ”u sarakstam, lai mÄs varÄtu piekļūt lietotÄja interfeisam (UI).
Atveriet 8500. portu lietotÄja interfeisam. NoklikŔķiniet uz Izveidot. DrÄ«zumÄ mÄs atkal mainÄ«sim Å”o ugunsmÅ«ri [saite].
Pievienojiet instancÄ ugunsmÅ«ra kÄrtulu. Dodieties atpakaļ uz VM informÄcijas paneli vietnÄ Consul Server un tÄ«kla tagu laukÄ pievienojiet āskywiz-consul-server-pocā. NoklikŔķiniet uz SaglabÄt.
InstalÄjiet Consul virtuÄlajÄ maŔīnÄ, pÄrbaudiet Å”eit. Atcerieties, ka jums ir nepiecieÅ”ama Consul versija ā„ 1.5 [saite]
Izveidosim vienu mezglu Consul - konfigurÄcija ir Å”Äda.
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
DetalizÄtÄku rokasgrÄmatu par Consul instalÄÅ”anu un 3 mezglu kopas iestatÄ«Å”anu skatiet Å”eit.
consul agent
-server
-ui
-client 0.0.0.0
-data-dir=/var/lib/consul
-bootstrap-expect=1
-config-dir=/etc/consul.d
Jums vajadzÄtu redzÄt virkni izvadu, un beigÄs tiks parÄdÄ«ts ziÅojums ā... atjauninÄjumu bloÄ·Ä ACLā.
Atrodiet Consul servera ÄrÄjo IP adresi un atveriet pÄrlÅ«kprogrammu ar Å”o IP adresi portÄ 8500. PÄrliecinieties, vai tiek atvÄrts lietotÄja interfeiss.
MÄÄ£iniet pievienot atslÄgas/vÄrtÄ«bas pÄri. Ir jÄbÅ«t kļūdai. Tas ir tÄpÄc, ka mÄs ielÄdÄjÄm Consul serveri ar ACL un atspÄjojÄm visus noteikumus.
Atgriezieties pie sava apvalka Consul serverÄ« un sÄciet procesu fonÄ vai kÄdÄ citÄ veidÄ, lai to palaistu, un ievadiet Å”o:
consul acl bootstrap
Atrodiet "SecretID" vÄrtÄ«bu un atgriezieties lietotÄja saskarnÄ. CilnÄ ACL ievadiet tikko nokopÄtÄ marÄ·iera slepeno ID. KopÄjiet SecretID kaut kur citur, mums tas bÅ«s vajadzÄ«gs vÄlÄk.
Tagad pievienojiet atslÄgas/vÄrtÄ«bas pÄri. Å im POC pievienojiet Å”Ädu: atslÄga: ācustom-ns/test_keyā, vÄrtÄ«ba: āEs esmu mapÄ custom-ns!ā
Kubernetes klastera palaiÅ”ana mÅ«su lietojumprogrammai ar Consul klientu kÄ Daemonset
Izveidojiet K8s (Kubernetes) kopu. MÄs to izveidosim tajÄ paÅ”Ä zonÄ, kur atrodas serveris, lai nodroÅ”inÄtu ÄtrÄku piekļuvi, un tÄdÄjÄdi mÄs varam izmantot to paÅ”u apakÅ”tÄ«klu, lai viegli izveidotu savienojumu ar iekÅ”ÄjÄm IP adresÄm. MÄs to sauksim par "skywiz-app-with-consul-client-poc".
KÄ sÄnu piezÄ«mi, Å”eit ir laba apmÄcÄ«ba, ar kuru es saskÄros, izveidojot POC Consul kopu ar Consul Connect.
MÄs izmantosim arÄ« Hashicorp stÅ«res diagrammu ar paplaÅ”inÄtu vÄrtÄ«bu failu.
InstalÄjiet un konfigurÄjiet Helm. KonfigurÄcijas soļi:
### 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
Izmantojiet stūres diagrammu:
./helm install -f poc-helm-consul-values.yaml ./consul-helm - name skywiz-app-with-consul-client-poc
Kad tas mÄÄ£ina palaist, tam bÅ«s nepiecieÅ”amas Consul servera atļaujas, tÄpÄc pievienosim tÄs.
Å emiet vÄrÄ āPod Address Rangeā, kas atrodas klastera informÄcijas panelÄ«, un skatiet mÅ«su ugunsmÅ«ra noteikumu āskywiz-consul-server-pocā.
Pievienojiet podziÅas adreÅ”u diapazonu IP adreÅ”u sarakstam un atveriet portus 8301 un 8300.
Dodieties uz Consul lietotÄja interfeisu, un pÄc dažÄm minÅ«tÄm mezglu cilnÄ redzÄsit mÅ«su kopu.
AutorizÄcijas metodes konfigurÄÅ”ana, integrÄjot konsulu ar Kubernetes
Atgriezieties Consul servera apvalkÄ un eksportÄjiet iepriekÅ” saglabÄto marÄ·ieri:
export CONSUL_HTTP_TOKEN=<SecretID>
Lai izveidotu autentifikÄcijas metodes gadÄ«jumu, mums bÅ«s nepiecieÅ”ama informÄcija no mÅ«su Kubernetes klastera:
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:
Tokens ir kodÄts base64, tÄpÄc atÅ”ifrÄjiet to, izmantojot savu iecienÄ«tÄko rÄ«ku [saite]
kubernetes-ca-cert
kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:
PaÅemiet āca.crtā sertifikÄtu (pÄc base64 dekodÄÅ”anas) un ierakstiet to failÄ āca.crtā.
Tagad izveidojiet autentifikÄcijas metodi, aizstÄjot vietturus ar tikko saÅemtajÄm vÄrtÄ«bÄm.
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>"
TÄlÄk mums ir jÄizveido noteikums un jÄpievieno tÄ jaunajai lomai. Å ai daļai varat izmantot Consul UI, bet mÄs izmantosim komandrindu.
PÄc tam izmantojiet Å”o iebÅ«vÄto komandu, lai izveidotu konfigurÄcijas karti [saite]. LÅ«dzu, Åemiet vÄrÄ, ka mÄs atsaucamies uz mÅ«su pakalpojuma nosaukumu, vajadzÄ«bas gadÄ«jumÄ nomainiet to.
Atļauja liegta. Ak, mÄs aizmirsÄm pievienot jaunus noteikumus, kas ir saistoÅ”i ar atbilstoÅ”Äm atļaujÄm, darÄ«sim to tÅ«lÄ«t.
AtkÄrtojiet iepriekÅ” minÄtÄs darbÄ«bas:
a) Izveidojiet identisku politiku prefiksam ācustom-sa/ā.
b) Izveidojiet lomu, nosauciet to par āpielÄgotu lomuā
c) Pievienojiet lomai politiku.
Izveidojiet kÄrtulu saistoÅ”o elementu (iespÄjams tikai no cli/api). Å emiet vÄrÄ atlasÄ«tÄja karoga atŔķirÄ«go nozÄ«mi.
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='custom-sa-role'
-selector='serviceaccount.name=="custom-sa"'
Piesakieties vÄlreiz no konteinera "poc-ubuntu-custom-sa". Veiksmi!
Varat arÄ« nodroÅ”inÄt, ka Å”is marÄ·ieris nepieŔķir piekļuvi kv failÄ "custom-ns/". VienkÄrÅ”i atkÄrtojiet iepriekÅ” minÄto komandu pÄc "custom-sa" aizstÄÅ”anas ar prefiksu "custom-ns".
Atļauja liegta.
PÄrklÄjuma piemÄrs:
Ir vÄrts atzÄ«mÄt, ka visi kÄrtulu saistoÅ”ie kartÄjumi tiks pievienoti pilnvarai ar Ŕīm tiesÄ«bÄm.
MÅ«su konteiners āpoc-ubuntu-custom-saā atrodas noklusÄjuma nosaukumvietÄ ā tÄpÄc izmantosim to citai noteikumu saistÄ«Å”anai.
AtkÄrtojiet iepriekÅ”ÄjÄs darbÄ«bas:
a) Izveidojiet identisku politiku ānoklusÄjuma/ā atslÄgas prefiksam.
b) Izveidojiet lomu, nosauciet to par ādefault-ns-roleā
c) Pievienojiet lomai politiku.
Izveidojiet kÄrtulu saistoÅ”u elementu (iespÄjams tikai no 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"'
Atgriezieties mÅ«su "poc-ubuntu-custom-sa" konteinerÄ un mÄÄ£iniet piekļūt "noklusÄjuma/" kv ceļam.
Atļauja liegta.
Katrai pilnvarai norÄdÄ«tos akreditÄcijas datus varat skatÄ«t UI sadaÄ¼Ä ACL > Tokens. KÄ redzat, mÅ«su paÅ”reizÄjam marÄ·ierim ir pievienota tikai viena āpielÄgota lomaā. PaÅ”laik izmantojamais marÄ·ieris tika Ä£enerÄts, kad mÄs pieteicÄmies, un tajÄ brÄ«dÄ« bija tikai viens kÄrtulu saistoÅ”ais elements. Mums vÄlreiz jÄpiesakÄs un jÄizmanto jaunais marÄ·ieris.
PÄrliecinieties, vai varat lasÄ«t gan no kv ceļiem "custom-sa/", gan "default/".
Veiksme!
Tas ir tÄpÄc, ka mÅ«su āpoc-ubuntu-custom-saā atbilst ācustom-saā un ādefault-nsā kÄrtulu saistÄ«jumiem.
SecinÄjums
TTL pilnvaras mgmt?
Å Ä«s rakstÄ«Å”anas laikÄ nebija integrÄta veida, kÄ noteikt TTL marÄ·ieriem, kas Ä£enerÄti ar Å”o autorizÄcijas metodi. TÄ bÅ«tu lieliska iespÄja nodroÅ”inÄt droÅ”u konsulu autorizÄcijas automatizÄciju.