Hashicorp Consul's Kubernetes Authorization جو تعارف

Hashicorp Consul's Kubernetes Authorization جو تعارف

اهو صحيح آهي، آزاد ٿيڻ کان پوء Hashicorp قونصل 1.5.0 مئي 2019 جي شروعات ۾، قونصل ۾ توھان اختيار ڪري سگھو ٿا ايپليڪيشنون ۽ خدمتون جيڪي ڪبرنيٽس ۾ ھلندڙ مقامي طور تي.

ھن سبق ۾ اسين قدم بہ قدم ٺاھينداسين پو (تصور جو ثبوت، PoC) ھن نئين خصوصيت جو مظاهرو ڪندي. توھان کي ڪبرنيٽس ۽ Hashicorp جي قونصل جي بنيادي ڄاڻ ھجڻ جي اميد آھي. جڏھن ته توھان ڪنھن ڪلائوڊ پليٽ فارم يا آن پرميسس ماحول کي استعمال ڪري سگھو ٿا، ھن سبق ۾ اسين گوگل جي ڪلائوڊ پليٽ فارم کي استعمال ڪنداسين.

جو جائزو

جيڪڏهن اسان وڃون ٿا ان جي اختيار جي طريقيڪار تي قونصل دستاويز، اسان ان جي مقصد ۽ استعمال جي صورت جو هڪ تڪڙو جائزو حاصل ڪنداسين، انهي سان گڏ ڪجهه ٽيڪنيڪل تفصيلات ۽ منطق جو هڪ عام جائزو. مان ان کي اڳتي وڌڻ کان اڳ ۾ گهٽ ۾ گهٽ هڪ ڀيرو پڙهڻ جي صلاح ڏيان ٿو، جيئن مان هاڻي ان جي وضاحت ڪري رهيو آهيان ۽ ان کي چئبو آهيان.

Hashicorp Consul's Kubernetes Authorization جو تعارف

خاڪو 1: قونصل جي اجازت واري طريقي جو سرڪاري جائزو

اچو ته اندر ڏسو هڪ مخصوص Kubernetes اختيار جي طريقيڪار لاء دستاويز.

يقينا، اتي مفيد معلومات موجود آهي، پر اتي ڪا به رهنمائي ناهي ته ڪيئن اصل ۾ اهو سڀ استعمال ڪجي. تنهن ڪري، ڪنهن به سمجهدار ماڻهو وانگر، توهان هدايت لاء انٽرنيٽ کي ڇڪايو. ۽ پوءِ... تون ناڪام. ٿئي ٿو. اچو ته هن کي درست ڪريون.

ان کان اڳ جو اسان اسان جي POC ٺاھڻ تي اڳتي وڌون، اچو ته واپس وڃون ڪنسل جي اختيار ڏيڻ جي طريقن جو جائزو (ڊاگرام 1) ۽ ان کي ڪبرنيٽس جي حوالي سان سڌارو.

تعمير

هن سبق ۾، اسان هڪ الڳ مشين تي هڪ قونصل سرور ٺاهينداسين جيڪو ڪبرنيٽس ڪلستر سان رابطو ڪندو قونصل ڪلائنٽ نصب ٿيل. اسان پوءِ پوڊ ۾ اسان جي ڊمي ايپليڪيشن ٺاهينداسين ۽ اسان جي قونصل جي ڪي/ويل اسٽور تان پڙهڻ لاءِ اسان جو ترتيب ڏنل اختيار جو طريقو استعمال ڪنداسين.

هيٺ ڏنل ڊراگرام تفصيل ڏئي ٿو فن تعمير جو اسان هن سبق ۾ ٺاهي رهيا آهيون، انهي سان گڏ اجازت ڏيڻ واري طريقي جي پويان منطق، جنهن کي بعد ۾ بيان ڪيو ويندو.

Hashicorp Consul's Kubernetes Authorization جو تعارف

خاڪو 2: ڪبرنيٽس اختيار ڪرڻ واري طريقي جو جائزو

هڪ تڪڙو نوٽ: هن ڪم ڪرڻ لاءِ قونصل سرور کي ڪبرنيٽس ڪلستر کان ٻاهر رهڻ جي ضرورت ناهي. پر ها، هو اهو ڪري سگهي ٿو هن طريقي سان ۽ اهو.

تنهن ڪري، Consul overview diagram (Diagram 1) کي کڻڻ ۽ ان تي Kubernetes لاڳو ڪرڻ سان، اسان کي مٿي ڏنل ڊراگرام (ڊاگرام 2) ملي ٿو، ۽ هتي منطق هن ريت آهي:

  1. هر پوڊ وٽ هڪ سروس کاتو هوندو ان سان جڙيل هڪ 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. شروعاتي نقطي جي طور تي، اسان جو قونصل ڪلائنٽ لاگ ان جي درخواست کي اسان جي قونصل سرور ڏانھن Kubernetes اڪائونٽ ٽوڪن ۽ مخصوص مثال جي نالي سان اٿارٽيزيشن جي طريقي سان اڳتي وڌائيندو آھي جيڪو اڳ ٺاھيو ويو ھو. هي قدم اڳئين سرڪٽ جي وضاحت ۾ قدم 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 کوليو. ڪلڪ ڪريو ٺاھيو. اسان هن فائر وال کي جلد ئي تبديل ڪنداسين [لنڪ].
  • مثال ۾ فائر وال قاعدو شامل ڪريو. قونصل سرور تي 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

  • توھان کي ڏسڻ گھرجي ٻاھرين جو ھڪڙو گروپ ۽ ختم ٿيڻ گھرجي "... تازه ڪاري ACLs پاران بند ٿيل."
  • ڪنسل سرور جو خارجي IP پتو ڳولھيو ۽ پورٽ 8500 تي ھن IP پتي سان برائوزر کوليو. پڪ ڪريو ته UI کليل آھي.
  • ڪوشش ڪريو هڪ اهم/قدر جوڙو شامل ڪرڻ. ڪا غلطي ضرور ٿيندي. اهو ئي سبب آهي ته اسان هڪ ACL سان قونصل سرور لوڊ ڪيو ۽ سڀني ضابطن کي بند ڪيو.
  • قونصل سرور تي پنھنجي شيل ڏانھن واپس وڃو ۽ عمل کي پس منظر ۾ يا ڪنھن ٻئي طريقي سان شروع ڪريو ان کي هلائڻ لاءِ ۽ ھيٺ ڏنل داخل ڪريو:

consul acl bootstrap

  • "SecretID" قدر ڳولھيو ۽ UI ڏانھن واپس وڃو. ACL ٽيب ۾، ٽوڪن جي ڳجهي ID داخل ڪريو جيڪو توهان نقل ڪيو آهي. سيڪريٽ آئي ڊي کي ڪنهن ٻئي هنڌ نقل ڪريو، اسان کي بعد ۾ ان جي ضرورت پوندي.
  • ھاڻي شامل ڪريو چاٻي/قدر جوڙو. ھن POC لاءِ، ھيٺين کي شامل ڪريو: key: “custom-ns/test_key”، قدر: “مان ڪسٽم-ns فولڊر ۾ آھيان!”

اسان جي ايپليڪيشن لاءِ ڪبرنيٽس ڪلسٽر کي لانچ ڪندي قونصل ڪلائنٽ سان ڊيمونسيٽ طور

  • K8s (Kubernetes) ڪلستر ٺاهيو. اسان ان کي ساڳي زون ۾ ٺاهينداسين جيئن سرور تي تيز پهچ لاءِ، ۽ ان ڪري اسان ساڳيو سب نيٽ استعمال ڪري سگهون ٿا آساني سان اندروني IP پتي سان ڳنڍڻ لاءِ. اسان ان کي سڏينداسين "skywiz-app-with-consul-client-poc".

Hashicorp Consul's Kubernetes Authorization جو تعارف

  • هڪ طرفي نوٽ جي طور تي، هتي هڪ سٺو سبق آهي جنهن ۾ مان آيو آهيان جڏهن قونصل ڪنيڪشن سان هڪ 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

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

Hashicorp Consul's Kubernetes Authorization جو تعارف

  • قونصل UI ڏانھن وڃو ۽ ڪجھ منٽن کان پوء توھان ڏسندا ته اسان جو ڪلستر نوڊس ٽيب ۾ ظاھر ٿيندو.

Hashicorp Consul's Kubernetes Authorization جو تعارف

ڪبرنيٽس سان قونصل کي ضم ڪندي اختيار ڏيڻ جو طريقو ترتيب ڏيڻ

  • قونصل سرور شيل ڏانھن واپس وڃو ۽ ٽوڪن برآمد ڪريو جيڪو توھان اڳ ۾ محفوظ ڪيو آھي:

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 decoding کان پوءِ) ۽ ان کي ”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 ٺاھڻ لاءِ [لنڪ]. مهرباني ڪري نوٽ ڪريو ته اسان اسان جي خدمت جي نالي جو حوالو ڏئي رهيا آهيون، جيڪڏهن ضروري هجي ته ان کي تبديل ڪريو.

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

  • اچو ته اسان جي نئين نالي جي جڳهه ۾ هڪ پوڊ ٺاهيو. پوڊ لاءِ ترتيب لکو.

###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 ۾ custom-ns/test_key ۾ قدر سان ملندو آھي. جيڪڏهن توهان هن سبق ۾ مٿي ڏنل ساڳي قيمت استعمال ڪئي، توهان جي انڪوڊ ٿيل قيمت IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi هوندي.

يوزر سروس اڪائونٽ ٽيسٽ:

  • ھيٺ ڏنل حڪم استعمال ڪندي ڪسٽم سروس اڪائونٽ ٺاھيو [لنڪ].

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

  • پوڊ لاءِ نئين ترتيب واري فائل ٺاھيو. مهرباني ڪري نوٽ ڪريو ته مون مزدور کي بچائڻ لاء 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

  • اجازت رد ڪئي وئي. او، اسان مناسب اجازتن سان پابند ٿيل نوان ضابطا شامل ڪرڻ وسري ويا، اچو ته ھاڻي ڪريون.

مٿي ڏنل قدمن کي ورجايو:
الف) اڳياڙي ”ڪسٽم-سا/“ لاءِ هڪجهڙائي واري پاليسي ٺاهيو.
ب) هڪ ڪردار ٺاهيو، ان کي سڏيو "ڪسٽم-سا-رول"
ج) پاليسي کي ڪردار سان ڳنڍيو.

  • هڪ قاعدو-بائنڊنگ ٺاهيو (صرف ڪلائي / اي پي آئي کان ممڪن آهي). منتخب ڪندڙ پرچم جي مختلف معني کي نوٽ ڪريو.

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

  • توهان اهو پڻ پڪ ڪري سگهو ٿا ته هي ٽوڪن "custom-ns/" ۾ kv تائين رسائي نٿو ڏئي. صرف مٿي ڏنل حڪم کي ورجايو "custom-sa" کي اڳوڻي "custom-ns" سان تبديل ڪرڻ کان پوء.
    اجازت رد ڪئي وئي.

اوورلي مثال:

  • اها ڳالهه نوٽ ڪرڻ جي قابل آهي ته سڀئي ضابطا پابند نقشا انهن حقن سان ٽوڪن ۾ شامل ڪيا ويندا.
  • اسان جو ڪنٽينر ”poc-ubuntu-custom-sa“ ڊفالٽ نالي واري جاءِ ۾ آهي- سو اچو ته ان کي استعمال ڪريون مختلف قاعدن جي پابند ڪرڻ لاءِ.
  • پوئين قدم کي ورجايو:
    a) ”ڊفالٽ/“ ڪنجي اڳياڙي لاءِ هڪجهڙائي واري پاليسي ٺاهيو.
    ب) هڪ ڪردار ٺاهيو، ان کي نالو ڏيو "default-ns-role"
    ج) پاليسي کي ڪردار سان ڳنڍيو.
  • هڪ قاعدو-بائنڊنگ ٺاهيو (صرف ڪلائي / اي پي آئي کان ممڪن آهي)

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 > ٽوڪن جي تحت. جئين توهان ڏسي سگهو ٿا، اسان جي موجوده ٽوڪن ۾ صرف هڪ "ڪسٽم-سا-رول" ان سان ڳنڍيل آهي. ٽوڪن جيڪو اسان هن وقت استعمال ڪري رهيا آهيون پيدا ڪيو ويو جڏهن اسان لاگ ان ڪيو ۽ اتي صرف هڪ ضابطو پابند هو جيڪو ان وقت ملندو هو. اسان کي ٻيهر لاگ ان ٿيڻو پوندو ۽ نئون ٽوڪن استعمال ڪرڻو پوندو.
  • پڪ ڪريو ته توهان ٻنهي "ڪسٽم-سا/" ۽ "ڊفالٽ/" kv رستن مان پڙهي سگهو ٿا.
    ڪاميابي!
    اھو ھن ڪري آھي جو اسان جو ”poc-ubuntu-custom-sa“ ملندو آھي ”ڪسٽم-سا“ ۽ ”default-ns“ ضابطن جي پابندين سان.

ٿڪل

TTL ٽوڪن mgmt؟

هن لکڻ جي وقت تي، هن اختيار جي طريقي سان ٺاهيل ٽوڪن لاء TTL کي طئي ڪرڻ جو ڪو به مربوط طريقو ناهي. اهو هڪ بهترين موقعو هوندو ته قونصلر جي اجازت جي محفوظ آٽوميشن مهيا ڪري.

اتي ھڪڙو اختيار آھي دستي طور تي TTL سان ٽوڪن ٺاھيو:

اميد آهي ته ويجهي مستقبل ۾ اسان ڪنٽرول ڪرڻ جي قابل ٿي سگهنداسين ته ٽوڪن ڪيئن ٺاهيا ويندا آهن (في قاعدو يا اختيار ڏيڻ جو طريقو) ۽ TTL شامل ڪريو.

ان وقت تائين، اها صلاح ڏني وئي آهي ته توهان پنهنجي منطق ۾ هڪ لاگ آئوٽ آخري پوائنٽ استعمال ڪريو.

اسان جي بلاگ تي ٻيا مضمون پڻ پڙهو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو