Hashicorp Consul's Kubernetes Authorization جو تعارف
اهو صحيح آهي، آزاد ٿيڻ کان پوء Hashicorp قونصل 1.5.0 مئي 2019 جي شروعات ۾، قونصل ۾ توھان اختيار ڪري سگھو ٿا ايپليڪيشنون ۽ خدمتون جيڪي ڪبرنيٽس ۾ ھلندڙ مقامي طور تي.
ھن سبق ۾ اسين قدم بہ قدم ٺاھينداسين پو (تصور جو ثبوت، PoC) ھن نئين خصوصيت جو مظاهرو ڪندي. توھان کي ڪبرنيٽس ۽ Hashicorp جي قونصل جي بنيادي ڄاڻ ھجڻ جي اميد آھي. جڏھن ته توھان ڪنھن ڪلائوڊ پليٽ فارم يا آن پرميسس ماحول کي استعمال ڪري سگھو ٿا، ھن سبق ۾ اسين گوگل جي ڪلائوڊ پليٽ فارم کي استعمال ڪنداسين.
جو جائزو
جيڪڏهن اسان وڃون ٿا ان جي اختيار جي طريقيڪار تي قونصل دستاويز، اسان ان جي مقصد ۽ استعمال جي صورت جو هڪ تڪڙو جائزو حاصل ڪنداسين، انهي سان گڏ ڪجهه ٽيڪنيڪل تفصيلات ۽ منطق جو هڪ عام جائزو. مان ان کي اڳتي وڌڻ کان اڳ ۾ گهٽ ۾ گهٽ هڪ ڀيرو پڙهڻ جي صلاح ڏيان ٿو، جيئن مان هاڻي ان جي وضاحت ڪري رهيو آهيان ۽ ان کي چئبو آهيان.
يقينا، اتي مفيد معلومات موجود آهي، پر اتي ڪا به رهنمائي ناهي ته ڪيئن اصل ۾ اهو سڀ استعمال ڪجي. تنهن ڪري، ڪنهن به سمجهدار ماڻهو وانگر، توهان هدايت لاء انٽرنيٽ کي ڇڪايو. ۽ پوءِ... تون ناڪام. ٿئي ٿو. اچو ته هن کي درست ڪريون.
ان کان اڳ جو اسان اسان جي POC ٺاھڻ تي اڳتي وڌون، اچو ته واپس وڃون ڪنسل جي اختيار ڏيڻ جي طريقن جو جائزو (ڊاگرام 1) ۽ ان کي ڪبرنيٽس جي حوالي سان سڌارو.
تعمير
هن سبق ۾، اسان هڪ الڳ مشين تي هڪ قونصل سرور ٺاهينداسين جيڪو ڪبرنيٽس ڪلستر سان رابطو ڪندو قونصل ڪلائنٽ نصب ٿيل. اسان پوءِ پوڊ ۾ اسان جي ڊمي ايپليڪيشن ٺاهينداسين ۽ اسان جي قونصل جي ڪي/ويل اسٽور تان پڙهڻ لاءِ اسان جو ترتيب ڏنل اختيار جو طريقو استعمال ڪنداسين.
هيٺ ڏنل ڊراگرام تفصيل ڏئي ٿو فن تعمير جو اسان هن سبق ۾ ٺاهي رهيا آهيون، انهي سان گڏ اجازت ڏيڻ واري طريقي جي پويان منطق، جنهن کي بعد ۾ بيان ڪيو ويندو.
خاڪو 2: ڪبرنيٽس اختيار ڪرڻ واري طريقي جو جائزو
هڪ تڪڙو نوٽ: هن ڪم ڪرڻ لاءِ قونصل سرور کي ڪبرنيٽس ڪلستر کان ٻاهر رهڻ جي ضرورت ناهي. پر ها، هو اهو ڪري سگهي ٿو هن طريقي سان ۽ اهو.
تنهن ڪري، Consul overview diagram (Diagram 1) کي کڻڻ ۽ ان تي Kubernetes لاڳو ڪرڻ سان، اسان کي مٿي ڏنل ڊراگرام (ڊاگرام 2) ملي ٿو، ۽ هتي منطق هن ريت آهي:
هر پوڊ وٽ هڪ سروس کاتو هوندو ان سان جڙيل هڪ JWT ٽوڪن تي مشتمل آهي ٺاهيل ۽ ڪبرنيٽس پاران سڃاتل. هي ٽوڪن پڻ ڊفالٽ طور پوڊ ۾ داخل ڪيو ويو آهي.
پوڊ اندر اسان جي ايپليڪيشن يا خدمت اسان جي قونصل ڪلائنٽ کي لاگ ان ڪمانڊ شروع ڪري ٿي. لاگ ان درخواست ۾ اسان جو ٽوڪن ۽ نالو پڻ شامل هوندو خاص طور تي ٺهيل اختيار ڪرڻ جو طريقو (Kubernetes قسم). هي قدم #2 قونصل ڊاگرام (اسڪيم 1) جي قدم 1 سان مطابقت رکي ٿو.
اسان جو قونصل ڪلائنٽ پوءِ ھن درخواست کي اسان جي قونصل سرور ڏانھن موڪليندو.
جادو! اهو آهي جتي قونصل سرور درخواست جي صداقت جي تصديق ڪري ٿو، درخواست جي سڃاڻپ بابت معلومات گڏ ڪري ٿو ۽ ان کي ڪنهن به لاڳاپيل اڳواٽ مقرر ڪيل ضابطن سان موازنہ ڪري ٿو. ان جي وضاحت لاءِ هيٺ هڪ ٻيو خاڪو آهي. هي قدم ڪنسل جي اوورويو ڊراگرام (ڊاگرام 3) جي مرحلا 4، 5 ۽ 1 سان ملندڙ جلندڙ آهي.
اسان جو قونصل سرور درخواست ڪندڙ جي سڃاڻپ جي حوالي سان اسان جي مخصوص اختياري طريقي جي ضابطن (جيڪو اسان بيان ڪيو آھي) جي مطابق اجازتن سان قونصل ٽوڪن ٺاھي ٿو. پوءِ اھو ٽوڪن واپس موڪليندو. هي ڪنسل ڊراگرام جي قدم 6 سان ملندو آهي (ڊاگرام 1).
اسان جو قونصل ڪلائنٽ ٽوڪن کي درخواست ڪندڙ ايپليڪيشن يا خدمت ڏانهن موڪلي ٿو.
اسان جي درخواست يا خدمت ھاڻي ھي قونصل ٽوڪن استعمال ڪري سگھي ٿي اسان جي قونصل جي ڊيٽا سان ڳالھ ٻولھ لاءِ، جيئن ٽوڪن جي استحقاق موجب طئي ٿيل آھي.
جادو نازل ٿيو آهي!
توهان مان انهن لاءِ جيڪي صرف ٽوپي مان هڪ خرگوش سان خوش نه آهن ۽ ڄاڻڻ چاهين ٿا ته اهو ڪيئن ڪم ڪري ٿو... اچو ته ”توهان کي ڏيکاريان ته ڪيترو گہرا خرگوش جو سوراخ».
جيئن اڳ ذڪر ڪيو ويو آهي، اسان جو "جادو" قدم (شڪل 2: قدم 4) اهو آهي جتي قونصل سرور درخواست جي تصديق ڪري ٿو، درخواست بابت معلومات گڏ ڪري ٿو، ۽ ان کي ڪنهن به لاڳاپيل اڳواٽ مقرر ڪيل قاعدن سان موازنہ ڪري ٿو. هي قدم ڪنسل جي اوورويو ڊراگرام (ڊاگرام 3) جي مرحلا 4، 5 ۽ 1 سان ملندڙ جلندڙ آهي. هيٺ هڪ آريگرام (ڊاگرام 3) آهي، جنهن جو مقصد واضح طور تي ظاهر ڪرڻ آهي ته اصل ۾ ڇا ٿي رهيو آهي ڇپر جي هيٺ مخصوص Kubernetes اختيار ڪرڻ جو طريقو.
خاڪو 3: جادو نازل ٿيو آهي!
شروعاتي نقطي جي طور تي، اسان جو قونصل ڪلائنٽ لاگ ان جي درخواست کي اسان جي قونصل سرور ڏانھن Kubernetes اڪائونٽ ٽوڪن ۽ مخصوص مثال جي نالي سان اٿارٽيزيشن جي طريقي سان اڳتي وڌائيندو آھي جيڪو اڳ ٺاھيو ويو ھو. هي قدم اڳئين سرڪٽ جي وضاحت ۾ قدم 3 سان ملندو آهي.
ھاڻي قونصل سرور (يا ليڊر) کي وصول ٿيل ٽوڪن جي صداقت جي تصديق ڪرڻ جي ضرورت آھي. تنهن ڪري، اهو Kubernetes ڪلستر سان صلاح ڪندو (ڪنسل ڪلائنٽ ذريعي) ۽، مناسب اجازتن سان، اسان اهو معلوم ڪنداسين ته ڇا ٽوڪن حقيقي آهي ۽ اهو ڪنهن سان تعلق رکي ٿو.
تصديق ٿيل درخواست وري قونصل ليڊر ڏانھن موٽائي ويندي آھي، ۽ قونصل سرور اجازت ڏيڻ واري طريقي کي ڳولي ٿو مثال طور لاگ ان درخواست (۽ ڪبرنيٽس قسم) مان مخصوص نالي سان.
قونصل ليڊر مخصوص اختيار ڪرڻ واري طريقي جي مثال جي سڃاڻپ ڪري ٿو (جيڪڏهن مليل هجي) ۽ پابند قاعدن جي سيٽ کي پڙهي ٿو جيڪي ان سان ڳنڍيل آهن. اهو وري انهن ضابطن کي پڙهي ٿو ۽ انهن کي تصديق ٿيل سڃاڻپ جي خاصيتن سان موازنہ ڪري ٿو.
TA-Dah! اچو ته اڳئين سرڪٽ جي وضاحت ۾ قدم 5 تي وڃو.
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".
هڪ طرفي نوٽ جي طور تي، هتي هڪ سٺو سبق آهي جنهن ۾ مان آيو آهيان جڏهن قونصل ڪنيڪشن سان هڪ POC قونصل ڪلستر قائم ڪرڻ دوران.
اسان پڻ استعمال ڪنداسين 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
جڏھن اھو ھلڻ جي ڪوشش ڪندو، ان کي ڪنسل سرور لاءِ اجازتن جي ضرورت پوندي، تنھنڪري اچو انھن کي شامل ڪريون.
نوٽ ڪريو ”پڊ ايڊريس رينج“ ڪلسٽر ڊيش بورڊ تي واقع آهي ۽ اسان جي ”skywiz-consul-server-poc“ فائر وال قاعدي ڏانهن واپس وڃو.
پوڊ لاءِ ايڊريس جي حد شامل ڪريو IP پتي جي لسٽ ۾ ۽ کليل بندرگاهن 8301 ۽ 8300.
اسان کي معلومات جي ضرورت پوندي اسان جي ڪبرنيٽس ڪلستر مان هڪ مثال ٺاهڻ لاءِ تصنيف جو طريقو:
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، پر اسان ڪمان لائن استعمال ڪنداسين.
توهان اهو پڻ پڪ ڪري سگهو ٿا ته هي ٽوڪن "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 > ٽوڪن جي تحت. جئين توهان ڏسي سگهو ٿا، اسان جي موجوده ٽوڪن ۾ صرف هڪ "ڪسٽم-سا-رول" ان سان ڳنڍيل آهي. ٽوڪن جيڪو اسان هن وقت استعمال ڪري رهيا آهيون پيدا ڪيو ويو جڏهن اسان لاگ ان ڪيو ۽ اتي صرف هڪ ضابطو پابند هو جيڪو ان وقت ملندو هو. اسان کي ٻيهر لاگ ان ٿيڻو پوندو ۽ نئون ٽوڪن استعمال ڪرڻو پوندو.
هن لکڻ جي وقت تي، هن اختيار جي طريقي سان ٺاهيل ٽوڪن لاء TTL کي طئي ڪرڻ جو ڪو به مربوط طريقو ناهي. اهو هڪ بهترين موقعو هوندو ته قونصلر جي اجازت جي محفوظ آٽوميشن مهيا ڪري.
اتي ھڪڙو اختيار آھي دستي طور تي TTL سان ٽوڪن ٺاھيو: