Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

ඒක හරි, නිදහස් වුණාට පස්සේ Hashicorp කොන්සල් 1.5.0 2019 මැයි මස මුලදී, කොන්සල් හි ඔබට ස්වදේශිකව Kubernetes හි ක්‍රියාත්මක වන යෙදුම් සහ සේවාවන්ට අවසර දිය හැකිය.

මෙම නිබන්ධනයේදී අපි පියවරෙන් පියවර නිර්මාණය කරමු POC (සංකල්පයේ සාධනය, PoC) මෙම නව විශේෂාංගය විදහා දක්වයි. ඔබට Kubernetes සහ Hashicorp හි කොන්සල් පිළිබඳ මූලික දැනුමක් ලබා ගැනීමට අපේක්ෂා කෙරේ. ඔබට ඕනෑම cloud platform එකක් හෝ පරිශ්‍රයේ පරිසරයක් භාවිතා කළ හැකි අතර, මෙම නිබන්ධනයේදී අපි Google හි Cloud Platform භාවිතා කරන්නෙමු.

දළ විශ්ලේෂණය

අපි ගියොත් එහි බලය පැවරීමේ ක්‍රමය පිළිබඳ කොන්සල් ලියකියවිලි, අපි එහි අරමුණ සහ භාවිත අවස්ථාව පිළිබඳ ඉක්මන් දළ විශ්ලේෂණයක් මෙන්ම සමහර තාක්ෂණික විස්තර සහ තර්කනය පිළිබඳ සාමාන්‍ය දළ විශ්ලේෂණයක් ලබා ගනිමු. ඉදිරියට යාමට පෙර අවම වශයෙන් එක් වරක්වත් එය කියවීමට මම තරයේ නිර්දේශ කරමි, මන්ද මම දැන් ඒ සියල්ල පැහැදිලි කර හපන්නෙමි.

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

රූප සටහන 1: කොන්සල් බලය පැවරීමේ ක්‍රමය පිළිබඳ නිල දළ විශ්ලේෂණය

අපි ඇතුලට බලමු නිශ්චිත Kubernetes අවසර ක්‍රමයක් සඳහා ලියකියවිලි.

නිසැකවම, එහි ප්‍රයෝජනවත් තොරතුරු ඇත, නමුත් ඒ සියල්ල ඇත්ත වශයෙන්ම භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ මාර්ගෝපදේශයක් නොමැත. එබැවින්, ඕනෑම සිහිබුද්ධිය ඇති පුද්ගලයෙකු මෙන්, ඔබ මග පෙන්වීම සඳහා අන්තර්ජාලය පිරික්සයි. එතකොට... ඔයා ෆේල්. එය සිදු වේ. අපි මේක හදමු.

අපි අපගේ POC නිර්මාණය කිරීමට පෙර, අපි කොන්සල්ගේ අවසර ක්‍රම (රූප සටහන 1) පිළිබඳ දළ විශ්ලේෂණය වෙත ආපසු ගොස් කුබර්නෙටේස් සන්දර්භය තුළ එය ශෝධනය කරමු.

ගෘහ නිර්මාණ ශිල්පය

මෙම නිබන්ධනයේදී, අපි කොන්සල් සේවාදායකයා ස්ථාපනය කර ඇති Kubernetes පොකුරක් සමඟ සන්නිවේදනය කරන වෙනම යන්ත්‍රයක කොන්සල් සේවාදායකයක් සාදන්නෙමු. ඉන්පසුව අපි අපගේ ව්‍යාජ යෙදුම පොඩ් එක තුළ නිර්මාණය කර අපගේ කොන්සල් යතුර/අගය ගබඩාවෙන් කියවීමට අපගේ වින්‍යාසගත අවසර ක්‍රමය භාවිතා කරන්නෙමු.

පහත රූප සටහන මෙම නිබන්ධනය තුළ අප නිර්මාණය කරන ගෘහ නිර්මාණ ශිල්පය මෙන්ම අවසර ක්‍රමය පිටුපස ඇති තර්කනය විස්තර කරයි, එය පසුව පැහැදිලි කෙරේ.

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

රූප සටහන 2: Kubernetes අවසර ක්‍රමය දළ විශ්ලේෂණය

ඉක්මන් සටහනක්: මෙය ක්‍රියා කිරීම සඳහා කොන්සල් සේවාදායකයට Kubernetes පොකුරෙන් පිටත ජීවත් වීමට අවශ්‍ය නොවේ. නමුත් ඔව්, ඔහුට එය මේ ආකාරයෙන් කළ හැකිය.

එබැවින්, කොන්සල් දළ විශ්ලේෂණයේ රූප සටහන (රූප සටහන 1) ගෙන එයට Kubernetes යෙදීමෙන්, අපට ඉහත රූප සටහන (රූප සටහන 2) ලැබේ, මෙහි තර්කනය පහත පරිදි වේ:

  1. සෑම පොඩ් එකක්ම එයට Kubernetes විසින් ජනනය කරන ලද සහ දන්නා JWT ටෝකනයක් අඩංගු සේවා ගිණුමක් අමුණා ඇත. මෙම ටෝකනය ද පෙරනිමියෙන් පොඩ් එකට ඇතුල් කරනු ලැබේ.
  2. පොඩ් එක තුළ ඇති අපගේ යෙදුම හෝ සේවාව අපගේ කොන්සල් සේවාදායකයා වෙත පිවිසුම් විධානයක් ආරම්භ කරයි. පිවිසුම් ඉල්ලීමට අපගේ ටෝකනය සහ නමද ඇතුළත් වේ විශේෂයෙන් නිර්මාණය කර ඇත අවසර ක්රමය (Kubernetes වර්ගය). මෙම පියවර #2 කොන්සල් රූප සටහනේ 1 වන පියවරට අනුරූප වේ (යෝජනා ක්‍රමය 1).
  3. අපගේ කොන්සල් සේවාදායකයා මෙම ඉල්ලීම අපගේ කොන්සල් සේවාදායකය වෙත යොමු කරනු ඇත.
  4. මැජික්! කොන්සල් සේවාදායකයා ඉල්ලීමේ සත්‍යතාව තහවුරු කරයි, ඉල්ලීමෙහි අනන්‍යතාවය පිළිබඳ තොරතුරු රැස් කරයි සහ එය සම්බන්ධිත පූර්ව නිශ්චිත රීති සමඟ සංසන්දනය කරයි. මෙය පැහැදිලි කිරීම සඳහා තවත් රූප සටහනක් පහත දැක්වේ. මෙම පියවර කොන්සල් දළ විශ්ලේෂණයේ (රූප සටහන 3) පියවර 4, 5 සහ 1 ට අනුරූප වේ.
  5. අපගේ කොන්සල් සේවාදායකය ඉල්ලුම්කරුගේ අනන්‍යතාවය සම්බන්ධයෙන් අපගේ නිශ්චිත අවසර ක්‍රම රීති (අපි අර්ථ දක්වා ඇති) අනුව අවසර සහිත කොන්සල් ටෝකනයක් ජනනය කරයි. එවිට එය එම ටෝකනය ආපසු එවනු ඇත. මෙය කොන්සල් රූප සටහනේ (රූප සටහන 6) පියවර 1 ට අනුරූප වේ.
  6. අපගේ කොන්සල් සේවාදායකයා ටෝකනය ඉල්ලා සිටින යෙදුමට හෝ සේවාවට යොමු කරයි.

අපගේ යෙදුමට හෝ සේවාවට දැන් මෙම කොන්සල් ටෝකනය භාවිතා කර අපගේ කොන්සල් දත්ත සමඟ සන්නිවේදනය කිරීමට, ටෝකනයේ වරප්‍රසාද අනුව තීරණය කළ හැක.

මායාව හෙළිවේ!

තොප්පියක් එළියට ගත් හාවෙකු ගැන සතුටු නොවන සහ එය ක්‍රියාත්මක වන ආකාරය දැන ගැනීමට කැමති ඔබ සඳහා ... මම ඔබට පෙන්වන්නම් "කොතරම් ගැඹුරුද කියා හාවා කුහරය".

කලින් සඳහන් කළ පරිදි, අපගේ "මැජික්" පියවර (රූපය 2: පියවර 4) යනු කොන්සල් සේවාදායකයා ඉල්ලීම සත්‍යාපනය කරයි, ඉල්ලීම පිළිබඳ තොරතුරු රැස් කරයි, සහ එය සම්බන්ධ පූර්ව නිශ්චිත රීති සමඟ සංසන්දනය කරයි. මෙම පියවර කොන්සල් දළ විශ්ලේෂණයේ (රූප සටහන 3) පියවර 4, 5 සහ 1 ට අනුරූප වේ. පහත දැක්වෙන්නේ රූප සටහනකි (රූප සටහන 3), එහි අරමුණ ඇත්ත වශයෙන්ම සිදුවන්නේ කුමක්ද යන්න පැහැදිලිව පෙන්වීමයි. කබාය යට නිශ්චිත Kubernetes අවසර ක්රමය.

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

රූප සටහන 3: මායාව හෙළි වේ!

  1. ආරම්භක ලක්ෂ්‍යයක් ලෙස, අපගේ කොන්සල් සේවාදායකයා විසින් කුබර්නෙට්ස් ගිණුම් ටෝකනය සහ කලින් නිර්මාණය කරන ලද බලය පැවරීමේ ක්‍රමයේ නිශ්චිත උදාහරණ නාමය සමඟ අපගේ කොන්සල් සේවාදායකය වෙත පිවිසුම් ඉල්ලීම ඉදිරිපත් කරයි. මෙම පියවර පෙර පරිපථ පැහැදිලි කිරීමේ පියවර 3 ට අනුරූප වේ.
  2. දැන් කොන්සල් සේවාදායකයා (හෝ නායකයා) ලැබුණු ටෝකනයේ සත්‍යතාව තහවුරු කළ යුතුය. එබැවින්, එය Kubernetes පොකුර (කොන්සල් සේවාලාභියා හරහා) උපදෙස් ලබා ගන්නා අතර, සුදුසු අවසරයන් ඇතිව, ටෝකනය අව්‍යාජද සහ එය අයිති කාටද යන්න අපි සොයා බලමු.
  3. පසුව වලංගු කරන ලද ඉල්ලීම කොන්සල් නායකයා වෙත ආපසු ලබා දෙන අතර, කොන්සල් සේවාදායකයා පිවිසුම් ඉල්ලීමෙන් (සහ කුබර්නෙටේස් වර්ගය) නිශ්චිත නම සහිත අවසර ක්‍රම අවස්ථාව සොයා බලයි.
  4. කොන්සල් නායකයා නිශ්චිත අවසර ක්‍රම අවස්ථාව (සොයාගතහොත්) හඳුනාගෙන එයට අමුණා ඇති බන්ධන රීති මාලාව කියවයි. එය පසුව මෙම නීති කියවා ඒවා සත්‍යාපිත අනන්‍යතා ගුණාංග සමඟ සංසන්දනය කරයි.
  5. TA-dah! අපි කලින් පරිපථ පැහැදිලි කිරීමේ 5 වන පියවර වෙත යමු.

සාමාන්‍ය අතථ්‍ය යන්ත්‍රයක කොන්සල්-සේවාදායකය ක්‍රියාත්මක කරන්න

මෙතැන් සිට, මම බොහෝ විට මෙම POC නිර්මාණය කරන්නේ කෙසේද යන්න පිළිබඳ උපදෙස් ලබා දෙන්නෙමි, බොහෝ විට බුලට් පොයින්ට් වලින්, සම්පූර්ණ වාක්‍ය පැහැදිලි කිරීම් නොමැතිව. එසේම, කලින් සඳහන් කළ පරිදි, මම සියලු යටිතල පහසුකම් නිර්මාණය කිරීමට GCP භාවිතා කරමි, නමුත් ඔබට වෙනත් ඕනෑම තැනක එකම යටිතල පහසුකම් නිර්මාණය කළ හැකිය.

  • අතථ්‍ය යන්ත්‍රය අරඹන්න (උදාහරණ/සේවාදායකය).

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

  • ෆයර්වෝල් සඳහා රීතියක් සාදන්න (AWS හි ආරක්ෂක කණ්ඩායම):
  • රීතිය සහ ජාල ටැගය යන දෙකටම එකම යන්ත්‍ර නාමය පැවරීමට මම කැමතියි, මෙම අවස්ථාවේදී "skywiz-consul-server-poc".
  • ඔබගේ දේශීය පරිගණකයේ IP ලිපිනය සොයාගෙන එය මූලාශ්‍ර IP ලිපින ලැයිස්තුවට එක් කරන්න එවිට අපට පරිශීලක අතුරුමුහුණත (UI) වෙත ප්‍රවේශ විය හැක.
  • UI සඳහා වරාය 8500 විවෘත කරන්න. Create ක්ලික් කරන්න. අපි ඉක්මනින්ම මෙම ෆයර්වෝලය නැවත වෙනස් කරන්නෙමු [සබැඳිය].
  • උදාහරණයට ෆයර්වෝල් රීතියක් එක් කරන්න. කොන්සල් සේවාදායකයේ VM උපකරණ පුවරුව වෙත ආපසු ගොස් ජාල ටැග් ක්ෂේත්‍රයට “skywiz-consul-server-poc” එක් කරන්න. සුරකින්න ක්ලික් කරන්න.

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

  • අතථ්‍ය යන්ත්‍රයක කොන්සල් ස්ථාපනය කරන්න, මෙතැනින් පරීක්ෂා කරන්න. ඔබට කොන්සල් අනුවාදය ≥ 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 ටැබය තුළ, ඔබ දැන් පිටපත් කළ ටෝකනයේ රහස් හැඳුනුම්පත ඇතුළත් කරන්න. SecretID වෙනත් තැනක පිටපත් කරන්න, අපට එය පසුව අවශ්‍ය වනු ඇත.
  • දැන් යතුර/අගය යුගලයක් එක් කරන්න. මෙම POC සඳහා, පහත සඳහන් යතුර එක් කරන්න: "custom-ns/test_key", අගය: "මම අභිරුචි-ns ෆෝල්ඩරයේ සිටිමි!"

Deemonset ලෙස කොන්සල් සේවාදායකයා සමඟ අපගේ යෙදුම සඳහා Kubernetes පොකුරක් දියත් කිරීම

  • K8s (Kubernetes) පොකුරක් සාදන්න. වේගවත් ප්‍රවේශය සඳහා අපි එය සේවාදායකයේ ඇති කලාපයේම නිර්මාණය කරන්නෙමු, එබැවින් අභ්‍යන්තර IP ලිපින සමඟ පහසුවෙන් සම්බන්ධ වීමට අපට එම උපජාලය භාවිතා කළ හැකිය. අපි එය "skywiz-app-with-consul-client-poc" ලෙස හඳුන්වමු.

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

  • අතුරු සටහනක් ලෙස, කොන්සල් කනෙක්ට් සමඟ POC කොන්සල් පොකුරක් සැකසීමේදී මට හමු වූ හොඳ නිබන්ධනයක් මෙන්න.
  • අපි දිගු අගයන් ගොනුවක් සමඟ Hashicorp හෙල්ම් ප්‍රස්ථාරය ද භාවිතා කරන්නෙමු.
  • Helm ස්ථාපනය කර වින්‍යාස කරන්න. සැකසුම් පියවර:

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

  • එය ක්‍රියාත්මක වීමට උත්සාහ කරන විට, එයට කොන්සල් සේවාදායකය සඳහා අවසර අවශ්‍ය වනු ඇත, එබැවින් අපි ඒවා එකතු කරමු.
  • පොකුරු උපකරණ පුවරුවේ පිහිටා ඇති "Pod ලිපින පරාසය" සටහන් කර අපගේ "skywiz-consul-server-poc" ෆයර්වෝල් රීතිය වෙත ආපසු යොමු වන්න.
  • IP ලිපින ලැයිස්තුවට පොඩ් සඳහා ලිපින පරාසය එකතු කර 8301 සහ 8300 වරායන් විවෘත කරන්න.

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

  • කොන්සල් UI වෙත යන්න, මිනිත්තු කිහිපයකට පසු අපගේ පොකුර නෝඩ් ටැබය තුළ දිස්වනු ඇත.

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

Kubernetes සමඟ කොන්සල් අනුකලනය කිරීමෙන් අවසර ලබා දීමේ ක්‍රමයක් වින්‍යාස කිරීම

  • කොන්සල් සේවාදායක කවචයට ආපසු ගොස් ඔබ කලින් සුරකින ලද ටෝකනය අපනයනය කරන්න:

export CONSUL_HTTP_TOKEN=<SecretID>

  • සත්‍යාපන ක්‍රමයේ උදාහරණයක් සෑදීමට අපට අපගේ Kubernetes පොකුරෙන් තොරතුරු අවශ්‍ය වනු ඇත:
  • 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:

  • ටෝකනය Base64 කේතනය කර ඇත, එබැවින් ඔබේ ප්‍රියතම මෙවලම භාවිතයෙන් එය විකේතනය කරන්න [සබැඳිය]
  • 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>

  • දැන් අපි අපගේ නව භූමිකාව සත්‍යාපන ක්‍රමය නිදසුන සමඟ සම්බන්ධ කරමු. අපගේ පිවිසුම් ඉල්ලීමට මෙම භූමිකාව ලැබෙන්නේද යන්න "තේරීම්" ධජය තීරණය කරන බව සලකන්න. වෙනත් තේරීම් විකල්ප සඳහා මෙහි පරීක්ෂා කරන්න: 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

කොන්සල් සේවාලාභියා වෙත සම්බන්ධ වෙමින්

  • සඳහන් කළ පරිදි මෙහිDaemonset වෙත සම්බන්ධ වීමට විකල්ප කිහිපයක් ඇත, නමුත් අපි පහත සරල විසඳුම වෙත යන්නෙමු:
  • පහත ගොනුව යොදන්න [සබැඳිය].

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

  • ඉන්පසු configmap එකක් සෑදීමට පහත buildin විධානය භාවිතා කරන්න.සබැඳිය]. අපි අපගේ සේවාවේ නම සඳහන් කරන බව කරුණාවෙන් සලකන්න, අවශ්ය නම් එය ප්රතිස්ථාපනය කරන්න.

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) සහ ඔබ කැමති අගයක්. නව ප්‍රධාන මාර්ග සඳහා සුදුසු ප්‍රතිපත්ති සහ භූමිකාවන් සාදන්න. අපි පසුව බැඳීම් කරන්නෙමු.

Hashicorp Consul's Kubernetes Authorization හැඳින්වීම

අභිරුචි නාම අවකාශ පරීක්ෂණය:

  • අපි අපේම නාම අවකාශයක් සාදා ගනිමු:

kubectl create namespace custom-ns

  • අපි අපේ අලුත් namespace එකේ Pod එකක් හදමු. පොඩ් එක සඳහා වින්‍යාසය ලියන්න.

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

  • කන්ටේනරය ක්‍රියාත්මක වූ පසු, එහි ගොස් curl ස්ථාපනය කරන්න.

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 හි custom-ns/test_key හි අගයට ගැළපෙන බව බලන්න. ඔබ මෙම නිබන්ධනයෙහි ඉහත අගයම භාවිතා කළේ නම්, ඔබේ කේතනය කළ අගය IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi වනු ඇත.

පරිශීලක සේවා ගිණුම් පරීක්ෂණය:

  • පහත විධානය භාවිතා කර අභිරුචි සේවා ගිණුමක් සාදන්න [සබැඳිය].

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

  • Pod සඳහා නව වින්‍යාස ගොනුවක් සාදන්න. ශ්‍රමය ඉතිරි කර ගැනීම සඳහා මම curl ස්ථාපනය ඇතුළත් කළ බව කරුණාවෙන් සලකන්න :)

###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" කන්ටේනරයෙන් නැවත පිවිසෙන්න. සාර්ථකත්වය!
  • අභිරුචි-sa/ යතුරු මාර්ගය වෙත අපගේ ප්‍රවේශය පරීක්ෂා කරන්න.

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

  • මෙම ටෝකනය "අභිරුචි-ns/" තුළ kv වෙත ප්‍රවේශය ලබා නොදෙන බව ඔබට සහතික කළ හැක. "custom-sa" "custom-ns" උපසර්ගය සමඟ ප්‍රතිස්ථාපනය කිරීමෙන් පසු ඉහත විධානය නැවත කරන්න.
    අවසරය ප්රතික්ෂේප කෙරිණි.

උඩැතිරි උදාහරණය:

  • මෙම අයිතීන් සහිත ටෝකනයට සියලුම රීති-බන්ධන සිතියම්ගත කිරීම් එක් කරන බව සඳහන් කිරීම වටී.
  • අපගේ කන්ටේනරය "poc-ubuntu-custom-sa" පෙරනිමි නාම අවකාශයේ ඇත - එබැවින් අපි එය වෙනස් රීති-බන්ධනයක් සඳහා භාවිතා කරමු.
  • පෙර පියවර නැවත කරන්න:
    අ) “පෙරනිමි/” යතුරු උපසර්ගය සඳහා සමාන ප්‍රතිපත්තියක් සාදන්න.
    ආ) භූමිකාවක් සාදන්න, එය "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 මාර්ගය වෙත ප්‍රවේශ වීමට උත්සාහ කරන්න.
  • අවසරය ප්රතික්ෂේප කෙරිණි.
    ඔබට ACL > ටෝකන යටතේ UI හි එක් එක් ටෝකනය සඳහා නිශ්චිත අක්තපත්‍ර බැලිය හැක. ඔබට පෙනෙන පරිදි, අපගේ වත්මන් ටෝකනයට අමුණා ඇත්තේ එක් "අභිරුචි-කාර්යයක්" පමණි. අපි දැනට භාවිතා කරන ටෝකනය අපි ලොග් වූ විට උත්පාදනය කරන ලද අතර එදා ගැළපුණේ එකම රීතියක් පමණි. අපි නැවත ලොග් වී නව ටෝකනය භාවිතා කළ යුතුයි.
  • ඔබට "අභිරුචි-සා/" සහ "පෙරනිමි/" kv මාර්ග දෙකෙන්ම කියවිය හැකි බවට වග බලා ගන්න.
    සාර්ථකත්වය!
    මෙයට හේතුව අපගේ “poc-ubuntu-custom-sa” “custom-sa” සහ “default-ns” රීති බන්ධනවලට ගැළපෙන බැවිනි.

නිගමනය

TTL ටෝකනය mgmt?

මෙම ලිපිය ලියන අවස්ථාවේදී, මෙම අවසර ක්‍රමය මගින් ජනනය කරන ලද ටෝකන සඳහා TTL තීරණය කිරීමට ඒකාබද්ධ ක්‍රමයක් නොමැත. කොන්සල් අවසරයේ ආරක්ෂිත ස්වයංක්‍රීයකරණය සැපයීමට එය කදිම අවස්ථාවක් වනු ඇත.

TTL සමඟ ටෝකනයක් අතින් නිර්මාණය කිරීමට විකල්පයක් ඇත:

නුදුරු අනාගතයේ දී අපට ටෝකන උත්පාදනය කරන ආකාරය පාලනය කිරීමට හැකි වනු ඇතැයි බලාපොරොත්තු වෙමු (නීතියට හෝ අවසර ක්‍රමයකට) සහ TTL එක් කරන්න.

එතෙක්, ඔබගේ තර්කනයේ logout endpoint එකක් භාවිතා කරන ලෙස යෝජනා කෙරේ.

අපගේ බ්ලොග් අඩවියේ වෙනත් ලිපිද කියවන්න:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න