హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

అది నిజం, విడుదల తర్వాత హాషికార్ప్ కాన్సుల్ 1.5.0 మే 2019 ప్రారంభంలో, కాన్సుల్‌లో మీరు స్థానికంగా కుబెర్నెట్స్‌లో నడుస్తున్న అప్లికేషన్‌లు మరియు సేవలను ప్రామాణీకరించవచ్చు.

ఈ ట్యుటోరియల్‌లో మేము దశలవారీగా సృష్టిస్తాము POC (కాన్సెప్ట్ యొక్క రుజువు, PoC) ఈ కొత్త ఫీచర్‌ను ప్రదర్శిస్తుంది. మీకు కుబెర్నెట్స్ మరియు హాషికార్ప్ కాన్సుల్ గురించి ప్రాథమిక జ్ఞానం ఉండాలని భావిస్తున్నారు. మీరు ఏదైనా క్లౌడ్ ప్లాట్‌ఫారమ్ లేదా ఆన్-ప్రాంగణ వాతావరణాన్ని ఉపయోగించవచ్చు, ఈ ట్యుటోరియల్‌లో మేము Google క్లౌడ్ ప్లాట్‌ఫారమ్‌ని ఉపయోగిస్తాము.

పర్యావలోకనం

మనం వెళితే దాని అధికార పద్ధతిపై కన్సల్ డాక్యుమెంటేషన్, మేము దాని ప్రయోజనం మరియు వినియోగ సందర్భం యొక్క శీఘ్ర అవలోకనాన్ని, అలాగే కొన్ని సాంకేతిక వివరాలు మరియు తర్కం యొక్క సాధారణ అవలోకనాన్ని పొందుతాము. కొనసాగించే ముందు కనీసం ఒక్కసారైనా చదవమని నేను సిఫార్సు చేస్తున్నాను, ఎందుకంటే నేను ఇప్పుడు అన్నింటినీ వివరిస్తాను మరియు నమలడం చేస్తాను.

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

రేఖాచిత్రం 1: కాన్సుల్ అధికార పద్ధతి యొక్క అధికారిక అవలోకనం

లోపలికి చూద్దాం నిర్దిష్ట Kubernetes అధికార పద్ధతి కోసం డాక్యుమెంటేషన్.

ఖచ్చితంగా, అక్కడ ఉపయోగకరమైన సమాచారం ఉంది, కానీ వాటన్నింటినీ ఎలా ఉపయోగించాలో గైడ్ లేదు. కాబట్టి, ఏ తెలివిగల వ్యక్తిలాగే, మీరు మార్గదర్శకత్వం కోసం ఇంటర్నెట్‌ను వెతుకుతారు. ఆపై... మీరు ఫీలవుతారు. అది జరుగుతుంది. దీన్ని సరిచేద్దాం.

మేము మా POCని రూపొందించడానికి ముందు, కాన్సుల్ యొక్క అధికార పద్ధతుల (రేఖాచిత్రం 1) యొక్క అవలోకనానికి తిరిగి వెళ్లి, కుబెర్నెటెస్ సందర్భంలో దాన్ని మెరుగుపరచండి.

నిర్మాణం

ఈ ట్యుటోరియల్‌లో, ఇన్‌స్టాల్ చేయబడిన కాన్సుల్ క్లయింట్‌తో కుబెర్నెట్స్ క్లస్టర్‌తో కమ్యూనికేట్ చేసే ప్రత్యేక మెషీన్‌లో మేము కాన్సుల్ సర్వర్‌ను సృష్టిస్తాము. మేము అప్పుడు మా డమ్మీ అప్లికేషన్‌ను పాడ్‌లో సృష్టిస్తాము మరియు మా కాన్సుల్ కీ/విలువ స్టోర్ నుండి చదవడానికి మా కాన్ఫిగర్ చేయబడిన అధికార పద్ధతిని ఉపయోగిస్తాము.

దిగువన ఉన్న రేఖాచిత్రం ఈ ట్యుటోరియల్‌లో మేము రూపొందిస్తున్న ఆర్కిటెక్చర్‌ను, అలాగే ఆథరైజేషన్ పద్ధతి వెనుక ఉన్న లాజిక్‌ను వివరిస్తుంది, ఇది తరువాత వివరించబడుతుంది.

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

రేఖాచిత్రం 2: కుబెర్నెట్స్ ఆథరైజేషన్ మెథడ్ ఓవర్‌వ్యూ

శీఘ్ర గమనిక: ఇది పని చేయడానికి కాన్సుల్ సర్వర్ కుబెర్నెట్స్ క్లస్టర్ వెలుపల నివసించాల్సిన అవసరం లేదు. కానీ అవును, అతను దీన్ని ఈ విధంగా మరియు అలా చేయగలడు.

కాబట్టి, కాన్సుల్ అవలోకనం రేఖాచిత్రం (రేఖాచిత్రం 1) తీసుకొని దానికి కుబెర్నెట్‌లను వర్తింపజేస్తే, పైన ఉన్న రేఖాచిత్రం (రేఖాచిత్రం 2) మనకు లభిస్తుంది మరియు ఇక్కడ తర్కం క్రింది విధంగా ఉంది:

  1. ప్రతి పాడ్‌కు కుబెర్నెట్స్ రూపొందించిన మరియు తెలిసిన JWT టోకెన్‌ను కలిగి ఉండే సేవా ఖాతా జోడించబడి ఉంటుంది. ఈ టోకెన్ డిఫాల్ట్‌గా పాడ్‌లోకి కూడా చేర్చబడుతుంది.
  2. పాడ్ లోపల మా అప్లికేషన్ లేదా సేవ మా కాన్సుల్ క్లయింట్‌కు లాగిన్ ఆదేశాన్ని ప్రారంభిస్తుంది. లాగిన్ అభ్యర్థనలో మా టోకెన్ మరియు పేరు కూడా ఉంటాయి ప్రత్యేకంగా సృష్టించబడింది అధికార పద్ధతి (కుబెర్నెట్స్ రకం). ఈ దశ #2 కాన్సుల్ రేఖాచిత్రం (స్కీమ్ 1) యొక్క 1వ దశకు అనుగుణంగా ఉంటుంది.
  3. మా కాన్సుల్ క్లయింట్ ఈ అభ్యర్థనను మా కాన్సుల్ సర్వర్‌కు ఫార్వార్డ్ చేస్తారు.
  4. మేజిక్! ఇక్కడే కాన్సుల్ సర్వర్ అభ్యర్థన యొక్క ప్రామాణికతను ధృవీకరిస్తుంది, అభ్యర్థన యొక్క గుర్తింపు గురించి సమాచారాన్ని సేకరిస్తుంది మరియు ఏదైనా అనుబంధిత ముందే నిర్వచించిన నియమాలతో సరిపోల్చుతుంది. దీన్ని వివరించడానికి మరొక రేఖాచిత్రం క్రింద ఉంది. ఈ దశ కాన్సుల్ ఓవర్‌వ్యూ రేఖాచిత్రం (రేఖాచిత్రం 3) యొక్క 4, 5 మరియు 1 దశలకు అనుగుణంగా ఉంటుంది.
  5. అభ్యర్థించిన వ్యక్తి యొక్క గుర్తింపుకు సంబంధించి మా కాన్సుల్ సర్వర్ మా పేర్కొన్న అధికార పద్ధతి నియమాల ప్రకారం (మేము నిర్వచించినది) అనుమతులతో కూడిన కాన్సుల్ టోకెన్‌ను రూపొందిస్తుంది. అది ఆ టోకెన్‌ని వెనక్కి పంపుతుంది. ఇది కాన్సుల్ రేఖాచిత్రం (రేఖాచిత్రం 6) యొక్క 1వ దశకు అనుగుణంగా ఉంటుంది.
  6. మా కాన్సుల్ క్లయింట్ టోకెన్‌ను అభ్యర్థిస్తున్న అప్లికేషన్ లేదా సేవకు ఫార్వార్డ్ చేస్తారు.

మా అప్లికేషన్ లేదా సర్వీస్ ఇప్పుడు ఈ కాన్సుల్ టోకెన్‌ను ఉపయోగించి మా కాన్సుల్ డేటాతో కమ్యూనికేట్ చేయగలదు, టోకెన్ అధికారాల ద్వారా నిర్ణయించబడుతుంది.

మాయాజాలం బయటపడింది!

మీలో కేవలం టోపీ నుండి కుందేలుతో సంతృప్తి చెందని మరియు అది ఎలా పనిచేస్తుందో తెలుసుకోవాలనుకునే వారి కోసం... "ఎంత లోతుగా ఉందో నేను మీకు చూపుతాను కుందేలు రంధ్రం".

ముందుగా చెప్పినట్లుగా, మా "మేజిక్" దశ (మూర్తి 2: దశ 4) అంటే కాన్సుల్ సర్వర్ అభ్యర్థనను ప్రామాణీకరించడం, అభ్యర్థన సమాచారాన్ని సేకరిస్తుంది మరియు ఏదైనా అనుబంధిత ముందే నిర్వచించిన నియమాలతో పోల్చడం. ఈ దశ కాన్సుల్ ఓవర్‌వ్యూ రేఖాచిత్రం (రేఖాచిత్రం 3) యొక్క 4, 5 మరియు 1 దశలకు అనుగుణంగా ఉంటుంది. క్రింద ఒక రేఖాచిత్రం (రేఖాచిత్రం 3), వాస్తవానికి ఏమి జరుగుతుందో స్పష్టంగా చూపడం దీని ఉద్దేశ్యం హుడ్ కింద నిర్దిష్ట Kubernetes అధికార పద్ధతి.

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

రేఖాచిత్రం 3: మేజిక్ వెల్లడైంది!

  1. ప్రారంభ బిందువుగా, మా కాన్సుల్ క్లయింట్ ముందుగా సృష్టించిన అధికార పద్ధతి యొక్క కుబెర్నెట్స్ ఖాతా టోకెన్ మరియు నిర్దిష్ట ఉదాహరణ పేరుతో మా కాన్సుల్ సర్వర్‌కు లాగిన్ అభ్యర్థనను ఫార్వార్డ్ చేస్తారు. ఈ దశ మునుపటి సర్క్యూట్ వివరణలో దశ 3కి అనుగుణంగా ఉంటుంది.
  2. ఇప్పుడు కాన్సుల్ సర్వర్ (లేదా నాయకుడు) అందుకున్న టోకెన్ యొక్క ప్రామాణికతను ధృవీకరించాలి. అందువల్ల, ఇది కుబెర్నెటెస్ క్లస్టర్‌ను (కాన్సుల్ క్లయింట్ ద్వారా) సంప్రదిస్తుంది మరియు తగిన అనుమతులతో, టోకెన్ నిజమైనదా మరియు అది ఎవరికి చెందినదో మేము కనుగొంటాము.
  3. ధృవీకరించబడిన అభ్యర్థన కాన్సుల్ లీడర్‌కు తిరిగి ఇవ్వబడుతుంది మరియు లాగిన్ అభ్యర్థన (మరియు కుబెర్నెటెస్ రకం) నుండి పేర్కొన్న పేరుతో కాన్సుల్ సర్వర్ అధికార పద్ధతి ఉదాహరణను చూస్తుంది.
  4. కాన్సుల్ లీడర్ పేర్కొన్న అధికార పద్ధతి ఉదాహరణను (దొరికితే) నిర్ణయిస్తారు మరియు దానికి జోడించిన బైండింగ్ నియమాల సెట్‌ను చదువుతారు. ఇది ఈ నియమాలను చదివి, వాటిని ధృవీకరించబడిన గుర్తింపు లక్షణాలతో పోలుస్తుంది.
  5. TA-dah! మునుపటి సర్క్యూట్ వివరణలో 5వ దశకు వెళ్దాం.

సాధారణ వర్చువల్ మెషీన్‌లో కన్సల్-సర్వర్‌ని అమలు చేయండి

ఇప్పటి నుండి, పూర్తి వాక్య వివరణలు లేకుండా, తరచుగా బుల్లెట్ పాయింట్‌లలో ఈ POCని ఎలా సృష్టించాలో నేను ఎక్కువగా సూచనలను ఇస్తాను. అలాగే, ఇంతకు ముందు గుర్తించినట్లుగా, నేను అన్ని మౌలిక సదుపాయాలను సృష్టించడానికి GCPని ఉపయోగిస్తాను, కానీ మీరు ఎక్కడైనా అదే మౌలిక సదుపాయాలను సృష్టించవచ్చు.

  • వర్చువల్ మిషన్‌ను ప్రారంభించండి (ఉదాహరణ/సర్వర్).

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

  • ఫైర్‌వాల్ కోసం ఒక నియమాన్ని సృష్టించండి (AWSలో భద్రతా సమూహం):
  • నేను నియమం మరియు నెట్‌వర్క్ ట్యాగ్ రెండింటికీ ఒకే మెషీన్ పేరును కేటాయించాలనుకుంటున్నాను, ఈ సందర్భంలో "skywiz-consul-server-poc".
  • మీ స్థానిక కంప్యూటర్ యొక్క IP చిరునామాను కనుగొని, దానిని సోర్స్ IP చిరునామాల జాబితాకు జోడించండి, తద్వారా మేము వినియోగదారు ఇంటర్‌ఫేస్ (UI)ని యాక్సెస్ చేయగలము.
  • UI కోసం పోర్ట్ 8500ని తెరవండి. సృష్టించు క్లిక్ చేయండి. మేము త్వరలో ఈ ఫైర్‌వాల్‌ను మళ్లీ మారుస్తాము [ссылка].
  • ఉదాహరణకి ఫైర్‌వాల్ నియమాన్ని జోడించండి. కాన్సుల్ సర్వర్‌లోని VM డాష్‌బోర్డ్‌కి తిరిగి వెళ్లి, నెట్‌వర్క్ ట్యాగ్‌ల ఫీల్డ్‌కు “skywiz-consul-server-poc”ని జోడించండి. సేవ్ క్లిక్ చేయండి.

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

  • వర్చువల్ మెషీన్‌లో కన్సల్‌ను ఇన్‌స్టాల్ చేయండి, ఇక్కడ తనిఖీ చేయండి. మీకు కాన్సుల్ వెర్షన్ ≥ 1.5 అవసరమని గుర్తుంచుకోండి [లింక్]
  • ఒకే నోడ్ కాన్సుల్‌ని క్రియేట్ చేద్దాం - కాన్ఫిగరేషన్ క్రింది విధంగా ఉంది.

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 ఫైల్‌ను సృష్టించండి [ссылка]:

### /etc/consul.d/agent.json
{
 "acl" : {
 "enabled": true,
 "default_policy": "deny",
 "enable_token_persistence": true
 }
}

  • మా కాన్సుల్ సర్వర్‌ని ప్రారంభించండి:

consul agent 
-server 
-ui 
-client 0.0.0.0 
-data-dir=/var/lib/consul 
-bootstrap-expect=1 
-config-dir=/etc/consul.d

  • మీరు అవుట్‌పుట్ సమూహాన్ని చూడాలి మరియు “... ACLలచే నిరోధించబడిన నవీకరణ”తో ముగుస్తుంది.
  • కాన్సుల్ సర్వర్ యొక్క బాహ్య IP చిరునామాను కనుగొని, పోర్ట్ 8500లో ఈ IP చిరునామాతో బ్రౌజర్‌ను తెరవండి. UI తెరవబడిందని నిర్ధారించుకోండి.
  • కీ/విలువ జతని జోడించడానికి ప్రయత్నించండి. తప్పక తప్పదు. ఎందుకంటే మేము కాన్సుల్ సర్వర్‌ను ACLతో లోడ్ చేసాము మరియు అన్ని నియమాలను నిలిపివేసాము.
  • కాన్సుల్ సర్వర్‌లోని మీ షెల్‌కి తిరిగి వెళ్లి, ప్రాసెస్‌ను బ్యాక్‌గ్రౌండ్‌లో లేదా దాన్ని అమలు చేయడానికి వేరే మార్గంలో ప్రారంభించండి మరియు కింది వాటిని నమోదు చేయండి:

consul acl bootstrap

  • "SecretID" విలువను కనుగొని UIకి తిరిగి వెళ్లండి. ACL ట్యాబ్‌లో, మీరు ఇప్పుడే కాపీ చేసిన టోకెన్ రహస్య IDని నమోదు చేయండి. సీక్రెట్‌ఐడిని ఎక్కడైనా కాపీ చేయండి, మాకు ఇది తర్వాత అవసరం అవుతుంది.
  • ఇప్పుడు కీ/విలువ జతని జోడించండి. ఈ POC కోసం, కింది వాటిని జోడించండి: కీ: “custom-ns/test_key”, విలువ: “నేను కస్టమ్-ns ఫోల్డర్‌లో ఉన్నాను!”

డెమోన్‌సెట్‌గా కాన్సుల్ క్లయింట్‌తో మా అప్లికేషన్ కోసం కుబెర్నెటెస్ క్లస్టర్‌ను ప్రారంభించడం

  • K8s (కుబెర్నెట్స్) క్లస్టర్‌ను సృష్టించండి. వేగవంతమైన ప్రాప్యత కోసం మేము సర్వర్ వలె అదే జోన్‌లో దీన్ని సృష్టిస్తాము మరియు అంతర్గత IP చిరునామాలతో సులభంగా కనెక్ట్ చేయడానికి మేము అదే సబ్‌నెట్‌ను ఉపయోగించవచ్చు. మేము దీనిని "skywiz-app-with-consul-client-poc" అని పిలుస్తాము.

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

  • సైడ్ నోట్‌గా, కాన్సుల్ కనెక్ట్‌తో POC కాన్సుల్ క్లస్టర్‌ను సెటప్ చేస్తున్నప్పుడు నేను చూసిన మంచి ట్యుటోరియల్ ఇక్కడ ఉంది.
  • మేము విస్తరించిన విలువల ఫైల్‌తో Hashicorp హెల్మ్ చార్ట్‌ని కూడా ఉపయోగిస్తాము.
  • హెల్మ్‌ను ఇన్‌స్టాల్ చేసి కాన్ఫిగర్ చేయండి. కాన్ఫిగరేషన్ దశలు:

kubectl create serviceaccount tiller --namespace kube-system
kubectl create clusterrolebinding tiller-admin-binding 
   --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
./helm init --service-account=tiller
./helm update

  • హెల్మ్ చార్ట్: https://www.consul.io/docs/platform/k8s/helm.html
  • కింది విలువ ఫైల్‌ని ఉపయోగించండి (నేను చాలా వరకు డిసేబుల్ చేశానని గమనించండి):

### 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

  • ఇది అమలు చేయడానికి ప్రయత్నించినప్పుడు, దానికి కాన్సుల్ సర్వర్ కోసం అనుమతులు అవసరం, కాబట్టి వాటిని జోడించుదాం.
  • క్లస్టర్ డాష్‌బోర్డ్‌లో ఉన్న “పాడ్ అడ్రస్ రేంజ్”ని గమనించండి మరియు మా “skywiz-consul-server-poc” ఫైర్‌వాల్ నియమాన్ని తిరిగి చూడండి.
  • IP చిరునామాల జాబితాకు పాడ్ కోసం చిరునామా పరిధిని జోడించండి మరియు 8301 మరియు 8300 పోర్ట్‌లను తెరవండి.

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

  • కాన్సుల్ UIకి వెళ్లి కొన్ని నిమిషాల తర్వాత నోడ్స్ ట్యాబ్‌లో మా క్లస్టర్ కనిపించడాన్ని మీరు చూస్తారు.

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

కుబెర్నెట్స్‌తో కాన్సుల్‌ను ఏకీకృతం చేయడం ద్వారా ఆథరైజేషన్ పద్ధతిని కాన్ఫిగర్ చేయడం

  • కాన్సుల్ సర్వర్ షెల్‌కి తిరిగి వెళ్లి మీరు ఇంతకు ముందు సేవ్ చేసిన టోకెన్‌ను ఎగుమతి చేయండి:

export CONSUL_HTTP_TOKEN=<SecretID>

  • ప్రమాణీకరణ పద్ధతి యొక్క ఉదాహరణను సృష్టించడానికి మా కుబెర్నెట్స్ క్లస్టర్ నుండి మాకు సమాచారం అవసరం:
  • 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:

  • టోకెన్ బేస్64 ఎన్‌కోడ్ చేయబడింది, కాబట్టి మీకు ఇష్టమైన సాధనాన్ని ఉపయోగించి డీక్రిప్ట్ చేయండి [ссылка]
  • kubernetes-ca-cert

kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:

  • "ca.crt" సర్టిఫికేట్ (base64 డీకోడింగ్ తర్వాత) తీసుకొని దానిని "ca.crt" ఫైల్‌లో వ్రాయండి.
  • ఇప్పుడు మీరు స్వీకరించిన విలువలతో ప్లేస్‌హోల్డర్‌లను భర్తీ చేస్తూ, ప్రామాణీకరణ పద్ధతిని ఇన్‌స్టాంటియేట్ చేయండి.

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>"

  • తరువాత మనం ఒక నియమాన్ని సృష్టించి, దానిని కొత్త పాత్రకు జోడించాలి. ఈ భాగం కోసం మీరు కాన్సుల్ UIని ఉపయోగించవచ్చు, కానీ మేము కమాండ్ లైన్‌ని ఉపయోగిస్తాము.
  • ఒక నియమాన్ని వ్రాయండి

### kv-custom-ns-policy.hcl
key_prefix "custom-ns/" {
 policy = "write"
}

  • నియమాన్ని వర్తింపజేయండి

consul acl policy create 
-name kv-custom-ns-policy 
-description "This is an example policy for kv at custom-ns/" 
-rules @kv-custom-ns-policy.hcl

  • అవుట్‌పుట్ నుండి మీరు ఇప్పుడే సృష్టించిన నియమం యొక్క IDని కనుగొనండి.
  • కొత్త నియమంతో పాత్రను సృష్టించండి.

consul acl role create 
-name "custom-ns-role" 
-description "This is an example role for custom-ns namespace" 
-policy-id <policy_id>

  • ఇప్పుడు మేము మా కొత్త పాత్రను auth పద్ధతి ఉదాహరణతో అనుబంధిస్తాము. మా లాగిన్ అభ్యర్థన ఈ పాత్రను స్వీకరిస్తారో లేదో "సెలెక్టర్" ఫ్లాగ్ నిర్ణయిస్తుందని గమనించండి. ఇతర ఎంపిక సాధనాల కోసం ఇక్కడ తనిఖీ చేయండి: https://www.consul.io/docs/acl/auth-methods/kubernetes.html#trusted-identity-attributes

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='custom-ns-role' 
-selector='serviceaccount.namespace=="custom-ns"'

చివరిగా కాన్ఫిగరేషన్లు

ప్రాప్యత హక్కులు

  • యాక్సెస్ హక్కులను సృష్టించండి. K8s సర్వీస్ ఖాతా టోకెన్ యొక్క గుర్తింపును ధృవీకరించడానికి మరియు గుర్తించడానికి మేము కాన్సుల్‌కు అనుమతి ఇవ్వాలి.
  • కింది వాటిని ఫైల్‌కి వ్రాయండి [లింక్]:

###skywiz-poc-consul-server_rbac.yaml
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: review-tokens
 namespace: default
subjects:
- kind: ServiceAccount
 name: skywiz-app-with-consul-client-poc-consul-client
 namespace: default
roleRef:
 kind: ClusterRole
 name: system:auth-delegator
 apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: service-account-getter
 namespace: default
rules:
- apiGroups: [""]
 resources: ["serviceaccounts"]
 verbs: ["get"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: get-service-accounts
 namespace: default
subjects:
- kind: ServiceAccount
 name: skywiz-app-with-consul-client-poc-consul-client
 namespace: default
roleRef:
 kind: ClusterRole
 name: service-account-getter
 apiGroup: rbac.authorization.k8s.io

  • యాక్సెస్ హక్కులను సృష్టిద్దాం

kubectl create -f skywiz-poc-consul-server_rbac.yaml

కన్సల్ క్లయింట్‌కి కనెక్ట్ అవుతోంది

  • గుర్తించినట్లు ఇక్కడడెమోన్‌సెట్‌కి కనెక్ట్ చేయడానికి అనేక ఎంపికలు ఉన్నాయి, అయితే మేము ఈ క్రింది సాధారణ పరిష్కారానికి వెళ్తాము:
  • కింది ఫైల్‌ను వర్తింపజేయి [ссылка].

### poc-consul-client-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
 name: consul-ds-client
spec:
 selector:
   app: consul
   chart: consul-helm
   component: client
   hasDNS: "true"
   release: skywiz-app-with-consul-client-poc
 ports:
 - protocol: TCP
   port: 80
   targetPort: 8500

  • కాన్ఫిగ్‌మ్యాప్‌ను సృష్టించడానికి కింది బిల్ట్‌ఇన్ ఆదేశాన్ని ఉపయోగించండి [ссылка]. దయచేసి మేము మా సేవ పేరును సూచిస్తున్నామని గమనించండి, అవసరమైతే దాన్ని భర్తీ చేయండి.

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
 labels:
   addonmanager.kubernetes.io/mode: EnsureExists
 name: kube-dns
 namespace: kube-system
data:
 stubDomains: |
   {"consul": ["$(kubectl get svc consul-ds-client -o jsonpath='{.spec.clusterIP}')"]}
EOF

ప్రమాణీకరణ పద్ధతిని పరీక్షిస్తోంది

ఇప్పుడు ఆ మ్యాజిక్‌ని చూద్దాం!

  • అదే ఉన్నత-స్థాయి కీతో (అంటే /sample_key) మరియు మీ ఎంపిక విలువ. కొత్త కీలక మార్గాల కోసం తగిన విధానాలు మరియు పాత్రలను సృష్టించండి. మేము బైండింగ్‌లను తర్వాత చేస్తాము.

హాషికార్ప్ కాన్సుల్ యొక్క కుబెర్నెట్స్ ఆథరైజేషన్ పరిచయం

అనుకూల నేమ్‌స్పేస్ పరీక్ష:

  • మన స్వంత నేమ్‌స్పేస్‌ని క్రియేట్ చేద్దాం:

kubectl create namespace custom-ns

  • మన కొత్త నేమ్‌స్పేస్‌లో పాడ్‌ని క్రియేట్ చేద్దాం. పాడ్ కోసం కాన్ఫిగరేషన్‌ను వ్రాయండి.

###poc-ubuntu-custom-ns.yaml
apiVersion: v1
kind: Pod
metadata:
 name: poc-ubuntu-custom-ns
 namespace: custom-ns
spec:
 containers:
 - name: poc-ubuntu-custom-ns
   image: ubuntu
   command: ["/bin/bash", "-ec", "sleep infinity"]
 restartPolicy: Never

  • కింద సృష్టించండి:

kubectl create -f poc-ubuntu-custom-ns.yaml

  • కంటైనర్ నడుస్తున్న తర్వాత, అక్కడికి వెళ్లి కర్ల్‌ను ఇన్‌స్టాల్ చేయండి.

kubectl exec poc-ubuntu-custom-ns -n custom-ns -it /bin/bash
apt-get update && apt-get install curl -y

  • ఇప్పుడు మేము ముందుగా సృష్టించిన అధికార పద్ధతిని ఉపయోగించి కాన్సుల్‌కి లాగిన్ అభ్యర్థనను పంపుతాము [ссылка].
  • మీ సేవా ఖాతా నుండి నమోదు చేసిన టోకెన్‌ను వీక్షించడానికి:

cat /run/secrets/kubernetes.io/serviceaccount/token

  • కంటైనర్‌లోని ఫైల్‌కు కింది వాటిని వ్రాయండి:

### payload.json
{
 "AuthMethod": "auth-method-test",
 "BearerToken": "<jwt_token>"
}

  • ప్రవేశించండి!

curl 
--request POST 
--data @payload.json 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • పై దశలను ఒక లైన్‌లో పూర్తి చేయడానికి (మేము బహుళ పరీక్షలను అమలు చేస్తాము కాబట్టి), మీరు ఈ క్రింది వాటిని చేయవచ్చు:

echo "{ 
"AuthMethod": "auth-method-skywiz-consul-poc", 
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)" 
}" 
| curl 
--request POST 
--data @- 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • పనిచేస్తుంది! కనీసం అది ఉండాలి. ఇప్పుడు SecretIDని తీసుకుని, మనం యాక్సెస్ చేయాల్సిన కీ/విలువను యాక్సెస్ చేయడానికి ప్రయత్నించండి.

curl 
consul-ds-client.default.svc.cluster.local/v1/kv/custom-ns/test_key --header “X-Consul-Token: <SecretID_from_prev_response>”

  • మీరు "విలువ"ని బేస్64 డీకోడ్ చేయవచ్చు మరియు ఇది UIలోని కస్టమ్-ns/test_keyలోని విలువతో సరిపోలుతుందని చూడవచ్చు. మీరు ఈ ట్యుటోరియల్‌లో పైన ఉన్న అదే విలువను ఉపయోగించినట్లయితే, మీ ఎన్‌కోడ్ చేసిన విలువ IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi అవుతుంది.

వినియోగదారు సేవా ఖాతా పరీక్ష:

  • కింది ఆదేశాన్ని ఉపయోగించి అనుకూల సేవా ఖాతాను సృష్టించండి [ссылка].

kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
 name: custom-sa
EOF

  • పాడ్ కోసం కొత్త కాన్ఫిగరేషన్ ఫైల్‌ను సృష్టించండి. శ్రమను ఆదా చేయడానికి నేను కర్ల్ ఇన్‌స్టాలేషన్‌ని చేర్చానని దయచేసి గమనించండి :)

###poc-ubuntu-custom-sa.yaml
apiVersion: v1
kind: Pod
metadata:
 name: poc-ubuntu-custom-sa
 namespace: default
spec:
 serviceAccountName: custom-sa
 containers:
 - name: poc-ubuntu-custom-sa
   image: ubuntu
   command: ["/bin/bash","-ec"]
   args: ["apt-get update && apt-get install curl -y; sleep infinity"]
 restartPolicy: Never

  • ఆ తరువాత, కంటైనర్ లోపల ఒక షెల్ను అమలు చేయండి.

kubectl exec -it poc-ubuntu-custom-sa /bin/bash

  • ప్రవేశించండి!

echo "{ 
"AuthMethod": "auth-method-skywiz-consul-poc", 
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)" 
}" 
| curl 
--request POST 
--data @- 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • అనుమతి నిరాకరించబడింది. ఓహ్, సముచితమైన అనుమతులతో కట్టుబడి ఉండే కొత్త నిబంధనలను జోడించడం మేము మర్చిపోయాము, ఇప్పుడు దానిని చేద్దాం.

పైన పేర్కొన్న మునుపటి దశలను పునరావృతం చేయండి:
ఎ) “కస్టమ్-సా/” ఉపసర్గ కోసం ఒకే విధమైన విధానాన్ని సృష్టించండి.
బి) ఒక పాత్రను సృష్టించండి, దానిని "కస్టమ్-సా-రోల్" అని పిలవండి
సి) పాత్రకు పాలసీని అటాచ్ చేయండి.

  • రూల్-బైండింగ్‌ను సృష్టించండి (cli/api నుండి మాత్రమే సాధ్యమవుతుంది). సెలెక్టర్ ఫ్లాగ్ యొక్క విభిన్న అర్థాన్ని గమనించండి.

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='custom-sa-role' 
-selector='serviceaccount.name=="custom-sa"'

  • "poc-ubuntu-custom-sa" కంటైనర్ నుండి మళ్లీ లాగిన్ చేయండి. విజయం!
  • కస్టమ్-సా/కీ పాత్‌కు మా యాక్సెస్‌ని తనిఖీ చేయండి.

curl 
consul-ds-client.default.svc.cluster.local/v1/kv/custom-sa/test_key --header “X-Consul-Token: <SecretID>”

  • ఈ టోకెన్ "కస్టమ్-ఎన్ఎస్/"లో kvకి యాక్సెస్ ఇవ్వదని కూడా మీరు నిర్ధారించుకోవచ్చు. "కస్టమ్-సా"ని "కస్టమ్-ఎన్ఎస్" ఉపసర్గతో భర్తీ చేసిన తర్వాత పై ఆదేశాన్ని పునరావృతం చేయండి.
    అనుమతి నిరాకరించబడింది.

అతివ్యాప్తి ఉదాహరణ:

  • ఈ హక్కులతో కూడిన టోకెన్‌కు అన్ని నియమ-బంధన మ్యాపింగ్‌లు జోడించబడతాయని గమనించాలి.
  • మా కంటైనర్ "poc-ubuntu-custom-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"'

  • మా "poc-ubuntu-custom-sa" కంటైనర్‌కి తిరిగి వెళ్లి, "default/" kv మార్గాన్ని యాక్సెస్ చేయడానికి ప్రయత్నించండి.
  • అనుమతి నిరాకరించబడింది.
    మీరు ACL > టోకెన్‌ల క్రింద UIలో ప్రతి టోకెన్‌కు పేర్కొన్న ఆధారాలను వీక్షించవచ్చు. మీరు చూడగలిగినట్లుగా, మా ప్రస్తుత టోకెన్‌కు ఒక “కస్టమ్-సా-రోల్” మాత్రమే జోడించబడింది. మేము ప్రస్తుతం ఉపయోగిస్తున్న టోకెన్ మేము లాగిన్ చేసినప్పుడు రూపొందించబడింది మరియు అప్పటికి సరిపోలిన ఒకే ఒక నియమం-బైండింగ్ ఉంది. మనం మళ్లీ లాగిన్ చేసి కొత్త టోకెన్‌ని ఉపయోగించాలి.
  • మీరు "కస్టమ్-సా/" మరియు "డిఫాల్ట్/" కెవి పాత్‌ల నుండి చదవగలరని నిర్ధారించుకోండి.
    విజయం!
    ఎందుకంటే మా "poc-ubuntu-custom-sa" "కస్టమ్-sa" మరియు "default-ns" రూల్ బైండింగ్‌లతో సరిపోలుతుంది.

తీర్మానం

TTL టోకెన్ mgmt?

ఈ వ్రాత సమయంలో, ఈ అధికార పద్ధతి ద్వారా రూపొందించబడిన టోకెన్‌ల కోసం TTLని నిర్ణయించడానికి సమగ్ర మార్గం లేదు. కాన్సుల్ ఆథరైజేషన్ యొక్క సురక్షితమైన ఆటోమేషన్‌ను అందించడానికి ఇది ఒక అద్భుతమైన అవకాశం.

TTLతో మాన్యువల్‌గా టోకెన్‌ని సృష్టించడానికి ఒక ఎంపిక ఉంది:

ఆశాజనక సమీప భవిష్యత్తులో మేము టోకెన్‌లు ఎలా ఉత్పత్తి చేయబడతాయో నియంత్రించగలము (నియమం లేదా అధికార పద్ధతి ప్రకారం) మరియు TTLని జోడించగలము.

అప్పటి వరకు, మీరు మీ లాజిక్‌లో లాగ్‌అవుట్ ఎండ్‌పాయింట్‌ని ఉపయోగించాలని సూచించారు.

మా బ్లాగ్‌లోని ఇతర కథనాలను కూడా చదవండి:

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి