Pasiuna sa Hashicorp Consul's Kubernetes Authorization
Mao na, pagkahuman sa pagpagawas Hashicorp Consul 1.5.0 sa sinugdanan sa Mayo 2019, ang Consul mahimong lumad nga magtugot sa mga aplikasyon ug serbisyo nga nagdagan sa Kubernetes.
Niini nga panudlo, maghimo kami nga lakang sa lakang POC (Proof of concept, PoC) nga nagpakita niining bag-ong feature. Gilauman nga aduna kay batakang kahibalo sa Kubernetes ug Hashicorp's Consul. Ug samtang makagamit ka sa bisan unsang cloud platform o lokal nga palibot, niining tutorial, gamiton namo ang Cloud Platform sa Google.
kinatibuk-ang paghulagway
Kung kita moadto sa Dokumentasyon sa konsul sa paagi sa pagtugot niini, makakuha kami usa ka mubo nga pagtan-aw sa katuyoan ug kaso sa paggamit niini, ingon man ang pipila ka mga teknikal nga detalye ug usa ka kinatibuk-ang pagtan-aw sa lohika. Girekomenda nako nga basahon kini bisan usa ka beses sa dili pa magpadayon, tungod kay akong ipasabut ug i-chewing kini tanan karon.
Scheme 1: Opisyal nga overview sa pamaagi sa pagtugot sa Consul
Siyempre, adunay mapuslanon nga impormasyon didto, apan walay giya kon unsaon paggamit ang tanan niini. Busa, sama sa bisan kinsang tawong buotan, imong gisuhid ang Internet alang sa giya. Ug unya... Mapildi. Kini mahitabo. Ayuhon nato ni.
Sa dili pa kita mopadayon sa paghimo sa atong POC, mobalik kita sa kinatibuk-ang panglantaw sa mga pamaagi sa pagtugot sa Konsul (Diagram 1) ug pinohon kini sa konteksto sa Kubernetes.
arkitektura
Sa kini nga panudlo, maghimo kami usa ka server sa Consul sa usa ka bulag nga makina nga makig-uban sa usa ka cluster sa Kubernetes nga na-install ang kliyente sa Consul. Buhaton namo ang among dummy app sa pod ug gamiton ang among gi-configure nga paagi sa pagtugot sa pagbasa gikan sa among Consul key/value store.
Ang dayagram sa ubos nagpakita sa detalye sa arkitektura nga atong gihimo niini nga panudlo, ingon man usab sa lohika nga pamaagi sa pagtugot, nga ipasabut sa ulahi.
Diagram 2: Kinatibuk-ang Pamaagi sa Pagtugot sa Kubernetes
Usa ka dali nga nota: ang Consul server dili kinahanglan nga magpuyo sa gawas sa Kubernetes cluster aron kini molihok. Apan oo, mahimo niya ang bisan unsang paagi.
Busa, ang pagkuha sa schema sa kinatibuk-ang panglantaw sa Consul (Scheme 1) ug pag-apply sa Kubernetes niini, makuha nato ang scheme sa ibabaw (Scheme 2), ug dinhi ang lohika mao ang mosunod:
Ang matag pod adunay account sa serbisyo nga gilakip niini, nga adunay JWT token nga gihimo ug nahibal-an sa Kubernetes. Kini nga timaan gisulod usab sa pod sa default.
Ang among aplikasyon o serbisyo sa sulod sa usa ka pod magsugod sa usa ka login command sa among Consul client. Ang hangyo sa pag-login maglakip usab sa among timaan ug ngalan espesyal nga gibuhat paagi sa pagtugot (sama sa Kubernetes). Kini nga lakang #2 katumbas sa lakang 1 sa Consul circuit (Diagram 1).
Ang among kliyente sa Consul ipasa kini nga hangyo sa among server sa Consul.
MAGIC! Dinhi ang Consul server nagpamatuod sa hangyo, nagkolekta sa identidad sa hangyo, ug nagtandi niini batok sa bisan unsang kauban nga gitakda nang daan nga mga lagda. Sa ubos mao ang laing diagram aron ihulagway kini. Kini nga lakang katumbas sa mga lakang 3, 4 ug 5 sa Consul overview diagram (Diagram 1).
Ang among Consul server nagmugna og usa ka Consul token nga adunay mga pagtugot sumala sa mga lagda sa pamaagi sa pagtugot nga among gipiho (nga among gipasabut) mahitungod sa pagkatawo sa nangayo. Ipadala dayon kana nga token balik. Kini katumbas sa lakang 6 sa laraw sa Consul (Diagram 1).
Gipasa sa among kliyente sa Consul ang token sa nangayo nga aplikasyon o serbisyo.
Ang among aplikasyon o serbisyo mahimo nang magamit kini nga Consul token aron makigkomunikar sa among data sa Consul, ingon nga gipasabut sa mga pribilehiyo sa token.
Ang salamangka gipadayag!
Para sa inyo nga wala malipay sa usa lang ka kuneho gikan sa kalo ug gusto mahibal-an kung giunsa kini molihok ... tuguti ako "ipakita kanimo kung unsa ka lawom lungag sa koneho".
Sama sa nahisgutan sa sayo pa, ang among "magic" nga lakang (Skema 2: Lakang 4) alang sa Consul server aron mapamatud-an ang hangyo, magtigum og kasayuran bahin sa hangyo, ug itandi kini sa bisan unsang kauban nga gitakda nang daan nga mga lagda. Kini nga lakang katumbas sa mga lakang 3, 4 ug 5 sa Consul overview diagram (Diagram 1). Sa ubos mao ang usa ka diagram (Skema 3), ang katuyoan niini mao ang tin-aw nga pagpakita kung unsa ang tinuod nga nahitabo sa ilalum sa hood piho nga pamaagi sa pagtugot sa Kubernetes.
Diagram 3: Ang salamangka gipadayag!
Isip usa ka punto sa pagsugod, gipasa sa among kliyente sa Consul ang hangyo sa pag-login sa among server sa Consul nga adunay token sa account sa Kubernetes ug ang espesipikong ngalan sa instance sa paagi sa pagtugot nga among gihimo sa sayo pa. Kini nga lakang katumbas sa lakang 3 sa miaging katin-awan sa diagram.
Karon ang Consul server (o lider) kinahanglan nga magpamatuod sa pagkatinuod sa nadawat nga token. Busa, mokonsulta kini sa Kubernetes cluster (pinaagi sa Consul client) ug, uban sa angay nga mga permiso, atong mahibal-an kung ang token tinuod ug kinsa ang tag-iya niini.
Ang gi-validate nga hangyo ibalik sa lider sa Consul, ug ang server sa Consul gipangita alang sa usa ka paagi sa pagtugot nga pananglitan nga adunay piho nga ngalan gikan sa hangyo sa pag-login (ug tipo sa Kubernetes).
Gitino sa lider sa Konsul ang espesipikong paagi sa pagtugot nga pananglitan (kung makit-an) ug gibasa ang hugpong sa mga lagda nga nagbugkos nga gilakip niini. Gibasa dayon niini ang mga lagda ug gitandi kini sa napamatud-an nga mga kinaiya sa pagkatawo.
TA-dah! Adto sa lakang 5 sa miaging katin-awan sa sirkito.
Pagdalag Consul-server sa usa ka normal nga virtual machine
Sugod karon, mag-una na ko sa paghatag ug mga instruksyon sa paghimo niini nga POC, kasagaran sa mga paragraph, nga walay pagpatin-aw sa tibuok nga mga tudling-pulong. Usab, sama sa nahisgotan na sa sayo pa, akong gamiton ang GCP sa paghimo sa tibuok nga imprastraktura, apan makahimo ka sa samang imprastraktura bisan asa.
Pagsugod sa virtual machine (instance / server).
Paghimo usa ka lagda sa firewall (usa ka grupo sa seguridad sa AWS):
Gusto ko nga i-assign ang parehas nga ngalan sa makina sa lagda ug tag sa network, sa kini nga kaso "skywiz-consul-server-poc".
Pangitaa ang IP address sa imong lokal nga kompyuter ug idugang kini sa lista sa tinubdan nga mga IP address aron ma-access namo ang user interface (UI).
Ablihi ang port 8500 para sa UI. I-klik ang Paghimo. Usbon namo kini nga firewall sa dili madugay [link].
Pagdugang usa ka lagda sa firewall sa pananglitan. Balik sa VM dashboard sa Consul server ug idugang ang "skywiz-consul-server-poc" sa network tags field. I-klik ang Save.
I-install ang Consul sa usa ka virtual machine, susiha dinhi. Hinumdumi kinahanglan nimo ang bersyon sa Consul β₯ 1.5 [link]
Maghimo kita og usa ka node nga Consul - ang configuration mao ang mosunod.
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
Para sa mas detalyado nga giya sa pag-install sa Consul ug pag-set up sa 3-node cluster, tan-awa dinhi.
Paghimo og file /etc/consul.d/agent.json nga sama niini [link]:
consul agent
-server
-ui
-client 0.0.0.0
-data-dir=/var/lib/consul
-bootstrap-expect=1
-config-dir=/etc/consul.d
Kinahanglan nimo nga makita ang usa ka hugpong sa mga output ug sa katapusan "... update gibabagan sa ACLs".
Pangitaa ang eksternal nga IP address sa Consul server ug ablihi ang usa ka browser nga adunay kana nga IP address sa port 8500. Siguroha nga ang UI moabli.
Sulayi ang pagdugang usa ka pares nga yawe/bili. Kinahanglang adunay sayop. Kini tungod kay gikarga namo ang Consul server og ACL ug gibalibaran ang tanang lagda.
Balik sa imong kabhang sa Consul server ug sugdi ang proseso sa background o uban pang paagi aron kini molihok ug i-type ang mosunod:
consul acl bootstrap
Pangitaa ang "SecretID" nga kantidad ug balik sa UI. Sa ACL tab, isulod ang sekretong token ID nga bag-o lang nimong gikopya. Kopyaha ang SecretID sa laing dapit, kinahanglan namo kini sa ulahi.
Karon pagdugang usa ka pares nga yawe/bili. Alang niini nga POC, idugang ang mosunod: yawe: "custom-ns/test_key", bili: "Naa ko sa custom-ns folder!"
Pagsugod ug Kubernetes cluster para sa among aplikasyon sa Consul client isip Daemonset
Paghimo ug K8s (Kubernetes) cluster. Himoon namo kini sa samang sona sa server para sa mas paspas nga pag-access ug aron magamit namo ang samang subnet aron daling makonektar sa mga internal nga IP. Atong nganlan kini nga "skywiz-app-with-consul-client-poc".
Ingon usa ka nota sa kilid, ania ang usa ka maayong giya nga akong nakit-an sa pag-set up sa usa ka cluster sa Consul POC nga adunay Consul Connect.
Gamiton usab namo ang tsart sa timon sa Hashicorp nga adunay taas nga kantidad nga file.
I-install ug i-configure ang Helm. Mga lakang sa pag-configure:
Gamita ang mosunud nga mga kantidad nga file (timan-i nga akong gi-disable ang kadaghanan):
### 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
Ibutang ang tsart sa timon:
./helm install -f poc-helm-consul-values.yaml ./consul-helm - name skywiz-app-with-consul-client-poc
Sa diha nga kini mosulay sa pagdagan, kini magkinahanglan og mga pagtugot alang sa Consul server, mao nga atong idugang sila.
Matikdi ang "Pod address range" nga nahimutang sa cluster dashboard ug balik sa among "skywiz-consul-server-poc" nga lagda sa firewall.
Idugang ang hanay sa address alang sa pod sa lista sa mga IP address ug bukas nga mga pantalan 8301 ug 8300.
Adto sa Consul UI ug sa pipila ka minuto imong makita ang among cluster nga makita sa nodes tab.
Pag-customize sa paagi sa pagtugot pinaagi sa paghiusa sa Consul sa Kubernetes
Balik sa Consul server shell ug i-export ang token nga imong gitipigan kaniadto:
export CONSUL_HTTP_TOKEN=<SecretID>
Nagkinahanglan kami og impormasyon gikan sa among Kubernetes cluster aron ma-instantiate ang auth method:
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:
Ang token kay base64 nga naka-encode, busa decrypt kini gamit ang imong paborito nga himan [link]
kubernetes-ca-cert
kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:
Kuhaa ang "ca.crt" nga sertipiko (pagkahuman sa base64 decoding) ug ibutang kini sa "ca.crt" file.
Karon i-instantiate ang pamaagi sa pag-auth, ilisan ang mga placeholder sa mga kantidad nga bag-o lang nimo nadawat.
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>"
Sunod, kinahanglan namon nga maghimo usa ka lagda ug ilakip kini sa bag-ong papel. Alang niini nga bahin, mahimo nimong gamiton ang Consul UI, apan among gamiton ang command line.
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='custom-ns-role'
-selector='serviceaccount.namespace=="custom-ns"'
Mga pag-configure sa katapusan
Mga katungod sa pag-access
Paghimo og mga permiso. Kinahanglan nga hatagan namon ang pagtugot sa Consul sa pag-verify ug pag-ila sa pagkatawo sa token sa account sa serbisyo sa K8.
Dayon gamita ang mosunod nga built-in nga command aron makahimo og configmap [link]. Timan-i nga among gipasabot ang ngalan sa among serbisyo, usba kini kung gikinahanglan.
Paghimo og pipila pa nga mga yawe nga folder nga adunay parehas nga taas nga lebel nga yawe (ie. /sample_key) ug usa ka bili nga imong gipili. Paghimo sa angay nga mga palisiya ug mga tahas alang sa bag-ong yawe nga mga agianan. Buhaton namo ang mga binding unya.
Custom nga namespace nga pagsulay:
Maghimo ta ug kaugalingong namespace:
kubectl create namespace custom-ns
Magbuhat ta pod sa atong bag-ong namespace. Isulat ang configuration para sa pod.
Mahimo nimong i-decode ang "Value" base64 ug tan-awa nga kini mohaum sa bili sa custom-ns/test_key sa UI. Kung gigamit nimo ang parehas nga kantidad nga gihatag sa sayo pa niini nga giya, ang imong gi-encode nga kantidad mahimong IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi.
Pagsulay sa Account sa Serbisyo sa Gumagamit:
Paghimo og usa ka kostumbre nga ServiceAccount nga adunay mosunod nga sugo [link].
Gibalibaran ang pagtugot. Oh, nakalimot mi sa pagdugang ug bag-ong lagda nga nagbugkos sa angay nga mga permiso, ato na kanang buhaton karon.
Balika ang miaging mga lakang sa ibabaw:
a) Paghimo ug parehas nga Polisiya para sa prefix nga "custom-sa/".
b) Paghimo usa ka Papel, nganli kini nga "custom-sa-role"
c) Ilakip ang Polisiya sa Papel.
Paghimo og Rule-Binding (posible lang gikan sa cli/api). Matikdi ang lain-laing bili sa selector flag.
consul acl binding-rule create
-method=auth-method-skywiz-consul-poc
-bind-type=role
-bind-name='custom-sa-role'
-selector='serviceaccount.name=="custom-sa"'
Sulayi pag-usab ang pag-log in gikan sa "poc-ubuntu-custom-sa" nga sudlanan. Kalampusan!
Mahimo usab nimo nga masiguro nga kini nga timaan dili maghatag access sa kv sa "custom-ns/". Balika lang ang sugo sa ibabaw human ilisan ang "custom-sa" sa "custom-ns" prefix.
Gibalibaran ang pagtugot.
Pananglitan sa overlay:
Angay nga hinumdoman nga ang tanan nga mga posporo nga nagbugkos sa lagda idugang sa token nga adunay kini nga mga katungod.
Ang among "poc-ubuntu-custom-sa" nga sudlanan naa sa default namespace - busa gamiton nato kini alang sa lain nga paggapos sa lagda.
Balika ang miaging mga lakang:
a) Paghimo ug parehas nga Polisiya para sa "default/" key prefix.
b) Paghimo usa ka Papel, nganli kini nga "default-ns-role"
c) Ilakip ang Polisiya sa Papel.
Paghimo og Rule-Binding (posible lang gikan sa 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"'
Balik sa among "poc-ubuntu-custom-sa" nga sudlanan ug pagsulay sa pag-access sa "default/" kv nga agianan.
Gibalibaran ang pagtugot.
Mahimo nimong tan-awon ang gipiho nga mga kredensyal alang sa matag token sa UI ubos sa ACL > Token. Sama sa imong makita, adunay usa lamang ka "custom-sa-role" nga gilakip sa atong kasamtangan nga token. Ang timaan nga among gigamit karon namugna sa among pag-log in ug adunay usa ra ka lagda nga nagbugkos unya nga gipares. Kinahanglan namon nga mag-login pag-usab ug gamiton ang bag-ong token.
Siguroha nga mabasa nimo ang "custom-sa/" ug "default/" kv paths.
Kalampusan!
Kini tungod kay ang atong "poc-ubuntu-custom-sa" motakdo sa "custom-sa" ug "default-ns" nga pagbugkos sa lagda.
konklusyon
TTL token mgmt?
Sa pagsulat niini, wala'y hiniusa nga paagi aron mahibal-an ang TTL alang sa mga token nga nahimo pinaagi niini nga paagi sa pagtugot. Kini usa ka hinanduraw nga higayon aron mahatagan ang luwas nga awtorisasyon nga automation para sa Consul.
Adunay kapilian nga mano-mano ang paghimo og token nga adunay TTL: