Ճիշտ է, ազատվելուց հետո Hashicorp հյուպատոս 1.5.0 2019 թվականի մայիսի սկզբին հյուպատոսում կարող եք թույլատրել հավելվածներն ու ծառայությունները, որոնք աշխատում են Կուբերնետեսում բնիկորեն:
Այս ձեռնարկում մենք քայլ առ քայլ կստեղծենք poc (Հայեցակարգի ապացույց, PoC), որը ցույց է տալիս այս նոր հնարավորությունը: Ակնկալվում է, որ դուք կունենաք հիմնական գիտելիքներ Kubernetes-ի և Hashicorp-ի հյուպատոսի մասին: Մինչև դուք կարող եք օգտագործել ցանկացած ամպային հարթակ կամ ներքին միջավայր, այս ձեռնարկում մենք կօգտագործենք Google-ի Cloud Platform-ը:
Վերանայել
Եթե գնանք դեպի Հյուպատոսական փաստաթղթեր դրա թույլտվության մեթոդի վերաբերյալ, մենք կստանանք դրա նպատակի և օգտագործման դեպքի արագ ակնարկ, ինչպես նաև որոշ տեխնիկական մանրամասներ և տրամաբանության ընդհանուր ակնարկ: Խստորեն խորհուրդ եմ տալիս կարդալ այն գոնե մեկ անգամ՝ շարունակելուց առաջ, քանի որ ես հիմա կբացատրեմ և կծամեմ այդ ամենը:
Դիագրամ 1. Հյուպատոսի թույլտվության մեթոդի պաշտոնական ակնարկ
Իհարկե, այնտեղ օգտակար տեղեկատվություն կա, բայց չկա ուղեցույց, թե ինչպես կարելի է իրականում օգտագործել այդ ամենը: Այսպիսով, ինչպես ցանկացած խելամիտ մարդ, դուք փնտրում եք ինտերնետը՝ առաջնորդություն ստանալու համար: Եվ հետո... Դու ձախողվում ես: Պատահում է. Եկեք սա շտկենք:
Նախքան մեր POC-ի ստեղծմանը անցնելը, եկեք վերադառնանք հյուպատոսի թույլտվության մեթոդների ակնարկին (Դիագրամ 1) և ճշգրտենք այն Kubernetes-ի համատեքստում:
ճարտարապետություն
Այս ձեռնարկում մենք կստեղծենք Consul սերվեր առանձին մեքենայի վրա, որը կհաղորդակցի Kubernetes կլաստերի հետ՝ տեղադրված Consul հաճախորդի հետ: Այնուհետև մենք կստեղծենք մեր կեղծ հավելվածը պատիճում և կօգտագործենք մեր կազմաձևված թույլտվության մեթոդը՝ մեր հյուպատոսական բանալին/արժեքի խանութից կարդալու համար:
Ստորև բերված դիագրամը մանրամասնում է ճարտարապետությունը, որը մենք ստեղծում ենք այս ձեռնարկում, ինչպես նաև թույլտվության մեթոդի տրամաբանությունը, որը կբացատրվի ավելի ուշ:
Արագ նշում. Consul սերվերը կարիք չունի ապրել Kubernetes կլաստերից դուրս, որպեսզի դա աշխատի: Բայց այո, նա կարող է դա անել այս ու այն կողմ։
Այսպիսով, վերցնելով հյուպատոսի ընդհանուր գծապատկերը (Դիագրամ 1) և կիրառելով Kubernetes-ը դրա վրա, մենք ստանում ենք վերևի դիագրամը (Դիագրամ 2), և այստեղ տրամաբանությունը հետևյալն է.
Յուրաքանչյուր pod կունենա իրեն կցված ծառայության հաշիվ, որը պարունակում է JWT նշան, որը ստեղծվել և հայտնի է Kubernetes-ի կողմից: Այս նշանը նաև լռելյայն տեղադրվում է պատիճում:
Մեր հավելվածը կամ ծառայությունը պատի ներսում սկսում է մուտքի հրաման մեր հյուպատոս հաճախորդին: Մուտքի հարցումը կներառի նաև մեր նշանն ու անունը հատուկ ստեղծված թույլտվության մեթոդ (Kubernetes տեսակ): Այս քայլը #2 համապատասխանում է հյուպատոսական դիագրամի 1-ին քայլին (սխեմա 1):
Մեր հյուպատոս հաճախորդն այնուհետև այս հարցումը կուղարկի մեր հյուպատոսի սերվերին:
Կախարդական! Սա այն վայրն է, որտեղ հյուպատոսի սերվերը ստուգում է հարցումի իսկությունը, հավաքում է հարցումի ինքնության մասին տեղեկատվություն և այն համեմատում նախապես սահմանված կանոնների հետ: Ստորև բերված է մեկ այլ դիագրամ, որը ցույց է տալիս դա: Այս քայլը համապատասխանում է հյուպատոսի ընդհանուր գծապատկերի 3-րդ, 4-րդ և 5-րդ քայլերին (Դիագրամ 1):
Մեր հյուպատոսի սերվերը ստեղծում է Consul token թույլտվություններով՝ համաձայն մեր սահմանված թույլտվության մեթոդի կանոնների (որ մենք սահմանել ենք)՝ կապված հայցողի ինքնության հետ: Այնուհետև այն հետ կուղարկի այդ նշանը: Սա համապատասխանում է հյուպատոսական դիագրամի 6-րդ քայլին (Դիագրամ 1):
Մեր հյուպատոս հաճախորդը փոխանցում է նշանը հայցող դիմումին կամ ծառայությանը:
Մեր դիմումը կամ ծառայությունն այժմ կարող է օգտագործել այս հյուպատոսի նշանը մեր հյուպատոսի տվյալների հետ հաղորդակցվելու համար, ինչպես որոշվում է նշանի արտոնություններով:
Կախարդությունը բացահայտված է:
Ձեզանից նրանց համար, ովքեր գոհ չեն միայն գլխարկից դուրս գտնվող նապաստակով և ցանկանում են իմանալ, թե ինչպես է այն աշխատում... թույլ տվեք «ցույց տալ ձեզ, թե որքան խորն է նապաստակի փոս.
Ինչպես նշվեց ավելի վաղ, մեր «կախարդական» քայլը (Նկար 2. Քայլ 4) այն է, որտեղ հյուպատոսի սերվերը վավերացնում է հարցումը, հավաքում է հարցումի մասին տեղեկատվություն և այն համեմատում է ցանկացած առնչվող նախապես սահմանված կանոնների հետ: Այս քայլը համապատասխանում է հյուպատոսի ընդհանուր գծապատկերի 3-րդ, 4-րդ և 5-րդ քայլերին (Դիագրամ 1): Ստորև ներկայացված է գծապատկեր (Դիագրամ 3), որի նպատակն է հստակ ցույց տալ, թե ինչ է իրականում տեղի ունենում. կափարիչի տակ հատուկ Kubernetes թույլտվության մեթոդ:
Դիագրամ 3. Կախարդությունը բացահայտված է:
Որպես ելակետ՝ մեր հյուպատոս հաճախորդը մուտքի հարցումն ուղարկում է մեր հյուպատոսի սերվերին՝ Kubernetes հաշվի նշանով և ավելի վաղ ստեղծված թույլտվության մեթոդի հատուկ օրինակի անունով: Այս քայլը համապատասխանում է նախորդ սխեմայի բացատրության 3-րդ քայլին:
Այժմ հյուպատոս սերվերը (կամ ղեկավարը) պետք է ստուգի ստացված նշանի իսկությունը: Հետևաբար, նա կխորհրդակցի Kubernetes կլաստերի հետ (Հյուպատոս հաճախորդի միջոցով) և համապատասխան թույլտվություններով մենք կպարզենք, թե արդյոք նշանն իսկական է և ում է պատկանում:
Վավերացված հարցումն այնուհետև վերադարձվում է հյուպատոսի ղեկավարին, և հյուպատոսի սերվերը մուտքի հարցումից (և Kubernetes տեսակի) որոնում է թույլտվության մեթոդի օրինակը նշված անունով:
Հյուպատոսի ղեկավարը նույնականացնում է նշված թույլտվության մեթոդի օրինակը (եթե գտնվել է) և կարդում է պարտադիր կանոնների փաթեթը, որոնք կցված են դրան: Այնուհետև այն կարդում է այս կանոնները և համեմատում դրանք հաստատված ինքնության հատկանիշների հետ:
TA-dah! Եկեք անցնենք 5-րդ քայլին նախորդ սխեմայի բացատրության մեջ:
Գործարկեք Consul-server-ը սովորական վիրտուալ մեքենայի վրա
Այսուհետ, ես հիմնականում հրահանգներ կտամ, թե ինչպես ստեղծել այս POC-ը, հաճախ կետերով, առանց նախադասության ամբողջական բացատրությունների: Նաև, ինչպես նշվեց ավելի վաղ, ես կօգտագործեմ GCP-ն ամբողջ ենթակառուցվածքը ստեղծելու համար, բայց դուք կարող եք ստեղծել նույն ենթակառուցվածքը ցանկացած այլ վայրում:
Գործարկեք վիրտուալ մեքենան (օրինակ/սերվեր):
Ստեղծեք կանոն firewall-ի համար (անվտանգության խումբ AWS-ում).
Ես սիրում եմ վերագրել նույն մեքենայի անունը և՛ կանոնին, և՛ ցանցային պիտակին, այս դեպքում՝ «skywiz-consul-server-poc»:
Գտեք ձեր տեղական համակարգչի IP հասցեն և ավելացրեք այն աղբյուրի IP հասցեների ցանկում, որպեսզի կարողանանք մուտք գործել օգտատիրոջ միջերես (UI):
Բացեք 8500 պորտը UI-ի համար: Սեղմեք Ստեղծել: Մենք շուտով նորից կփոխենք այս firewall-ը [ՈՒղեցույց].
Օրինակին ավելացրեք firewall կանոն: Վերադարձեք Consul Server-ի VM վահանակ և ավելացրեք «skywiz-consul-server-poc» ցանցի պիտակների դաշտում: Սեղմեք Պահպանել:
Տեղադրեք Consul-ը վիրտուալ մեքենայի վրա, ստուգեք այստեղ: Հիշեք, որ ձեզ անհրաժեշտ է Consul տարբերակը ≥ 1.5 [հղում]
Եկեք ստեղծենք մեկ հանգույց Consul - կոնֆիգուրացիան հետևյալն է.
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
Հյուպատոսը տեղադրելու և 3 հանգույցներից բաղկացած կլաստերի ստեղծման վերաբերյալ ավելի մանրամասն ուղեցույցի համար տե՛ս այստեղ.
Ստեղծեք ֆայլ /etc/consul.d/agent.json հետևյալ կերպ [ՈՒղեցույց]:
consul agent
-server
-ui
-client 0.0.0.0
-data-dir=/var/lib/consul
-bootstrap-expect=1
-config-dir=/etc/consul.d
Դուք պետք է տեսնեք ելքերի մի փունջ և ավարտեք «... թարմացումն արգելափակված է ACL-ների կողմից»:
Գտեք Consul սերվերի արտաքին IP հասցեն և բացեք զննարկիչ այս IP հասցեով 8500 նավահանգստում: Համոզվեք, որ UI-ը բացվում է:
Փորձեք ավելացնել բանալի/արժեք զույգ: Պետք է սխալմունք լինի։ Դա պայմանավորված է նրանով, որ մենք բեռնել ենք Consul սերվերը ACL-ով և անջատել ենք բոլոր կանոնները:
Վերադարձեք ձեր կեղևը Consul սերվերի վրա և սկսեք գործընթացը հետին պլանում կամ այն գործարկելու այլ եղանակով և մուտքագրեք հետևյալը.
consul acl bootstrap
Գտեք «SecretID» արժեքը և վերադարձեք UI: ACL ներդիրում մուտքագրեք ձեր նոր պատճենած նշանի գաղտնի ID-ն: Պատճենեք SecretID-ը մեկ այլ տեղ, այն մեզ ավելի ուշ պետք կգա:
Այժմ ավելացրեք բանալի/արժեք զույգ: Այս POC-ի համար ավելացրեք հետևյալը. բանալին՝ «custom-ns/test_key», արժեքը՝ «Ես custom-ns թղթապանակում եմ»:
Գործարկելով Kubernetes կլաստերը մեր հավելվածի համար Consul հաճախորդի հետ որպես Daemonset
Ստեղծեք K8s (Kubernetes) կլաստեր: Մենք այն կստեղծենք նույն գոտում, ինչ սերվերը՝ ավելի արագ մուտք գործելու համար, և այնպես որ մենք կարող ենք օգտագործել նույն ենթացանցը՝ ներքին IP հասցեների հետ հեշտությամբ միանալու համար: Մենք այն կանվանենք «skywiz-app-with-consul-client-poc»:
Որպես կողմնակի նշում, ահա մի լավ ձեռնարկ, որը ես հանդիպեցի Consul Connect-ի հետ POC Consul կլաստերը ստեղծելիս:
Մենք նաև կօգտագործենք Hashicorp ղեկային աղյուսակը ընդլայնված արժեքների ֆայլով:
Օգտագործեք հետևյալ արժեքային ֆայլը (նշեք, որ ես ամենից շատ անջատել եմ).
### 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
Կիրառել ղեկի աղյուսակը.
./helm install -f poc-helm-consul-values.yaml ./consul-helm - name skywiz-app-with-consul-client-poc
Երբ այն փորձի գործարկել, այն թույլտվությունների կարիք կունենա Consul սերվերի համար, ուստի եկեք դրանք ավելացնենք:
Նկատի ունեցեք «Pod Address Range»-ը, որը գտնվում է կլաստերի վահանակի վրա և վերադառնաք մեր «skywiz-consul-server-poc» firewall կանոնին:
IP հասցեների ցանկին ավելացրեք պատի հասցեների տիրույթը և բացեք 8301 և 8300 նավահանգիստները:
Գնացեք Consul UI և մի քանի րոպե անց կտեսնեք, որ մեր կլաստերը հայտնվում է հանգույցների ներդիրում:
Լիազորման մեթոդի կարգավորում՝ ինտեգրելով հյուպատոսը Kubernetes-ի հետ
Վերադարձեք Consul server shell-ին և արտահանեք ավելի վաղ պահպանված նշանը.
export CONSUL_HTTP_TOKEN=<SecretID>
Մեզ անհրաժեշտ կլինի տեղեկատվություն մեր Kubernetes կլաստերից՝ auth մեթոդի օրինակ ստեղծելու համար.
kubernetes-հյուրընկալող
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:
Նշանը base64 կոդավորված է, այնպես որ այն ապակոդավորեք՝ օգտագործելով ձեր սիրած գործիքը [ՈՒղեցույց]
kubernetes-ca-cert
kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:
Վերցրեք «ca.crt» վկայագիրը (base64 ապակոդավորումից հետո) և գրեք այն «ca.crt» ֆայլում:
Այժմ օրինականացրեք auth մեթոդը՝ փոխարինելով տեղապահները ձեր նոր ստացած արժեքներով:
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>"
Հաջորդը մենք պետք է ստեղծենք կանոն և կցենք այն նոր դերին: Այս մասի համար կարող եք օգտագործել Consul UI, բայց մենք կօգտագործենք հրամանի տողը:
Այնուհետև օգտագործեք հետևյալ ներկառուցված հրամանը՝ կազմաձևման քարտեզ ստեղծելու համար [ՈՒղեցույց]. Խնդրում ենք նկատի ունենալ, որ մենք ակնարկում ենք մեր ծառայության անվանումը, անհրաժեշտության դեպքում փոխարինեք այն:
Ստեղծեք ևս մի քանի բանալի պանակներ նույն վերին մակարդակի ստեղնով (այսինքն. /sample_key) և ձեր ընտրած արժեքը: Ստեղծեք համապատասխան քաղաքականություններ և դերեր նոր առանցքային ուղիների համար: Մենք ավելի ուշ կանենք կապերը:
Պատվերով անվանատարածքի թեստ.
Եկեք ստեղծենք մեր սեփական անվանատարածքը.
kubectl create namespace custom-ns
Եկեք ստեղծենք պատիճ մեր նոր անվանատարածքում: Գրեք պատի կոնֆիգուրացիան:
Դուք կարող եք base64 ապակոդավորել «Արժեքը» և տեսնել, որ այն համապատասխանում է UI-ի custom-ns/test_key արժեքին: Եթե դուք օգտագործել եք վերը նշված նույն արժեքը այս ձեռնարկում, ձեր կոդավորված արժեքը կլինի IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi:
Օգտագործողի ծառայության հաշվի փորձարկում.
Ստեղծեք հատուկ ծառայության հաշիվ՝ օգտագործելով հետևյալ հրամանը [ՈՒղեցույց].
Կարող եք նաև համոզվել, որ այս նշանը «custom-ns/»-ում kv-ին հասանելիություն չի տալիս: Պարզապես կրկնեք վերը նշված հրամանը «custom-sa»-ն «custom-ns» նախածանցով փոխարինելուց հետո:
Թույլտվությունը մերժվել է:
Ծածկույթի օրինակ.
Հարկ է նշել, որ բոլոր կանոնները պարտադիր քարտեզագրումները կավելացվեն այս իրավունքներով նշանին:
Մեր «poc-ubuntu-custom-sa» կոնտեյները գտնվում է լռելյայն անվանատարածքում, ուստի եկեք այն օգտագործենք այլ կանոնների պարտադիր կապի համար:
Կրկնել նախորդ քայլերը.
ա) Ստեղծեք նույնական քաղաքականություն «default/» ստեղնի նախածանցի համար:
բ) Ստեղծեք դեր, անվանեք այն «default-ns-role»
գ) Քաղաքականությունը կցել դերին:
Ստեղծեք կանոն-պարտադիր (հնարավոր է միայն 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"'
Վերադարձեք մեր «poc-ubuntu-custom-sa» կոնտեյներ և փորձեք մուտք գործել «default/» kv ուղին:
Թույլտվությունը մերժվել է:
Դուք կարող եք դիտել նշված հավատարմագրերը յուրաքանչյուր նշանի համար UI-ում ACL > Tokens-ում: Ինչպես տեսնում եք, մեր ներկայիս նշանը դրան կցված է միայն մեկ «custom-sa-role»: Թոքենը, որը մենք ներկայումս օգտագործում ենք, ստեղծվել է այն ժամանակ, երբ մենք մուտք գործեցինք, և կար միայն մեկ կանոն պարտադիր, որը համընկավ այն ժամանակ: Մենք պետք է նորից մուտք գործենք և օգտագործենք նոր նշանը:
Համոզվեք, որ կարող եք կարդալ ինչպես «custom-sa/» և «default/» kv ուղիներից:
Հաջողություն!
Դա պայմանավորված է նրանով, որ մեր «poc-ubuntu-custom-sa»-ն համընկնում է «custom-sa» և «default-ns» կանոնների հետ:
Ամփոփում
TTL նշան mgmt?
Այս գրելու պահին չկա TTL-ը որոշելու այս թույլտվության մեթոդով գեներացված նշանների ինտեգրված միջոց: Դա ֆանտաստիկ հնարավորություն կլինի ապահովելու հյուպատոսի թույլտվության ապահով ավտոմատացում: