मेरे पास एक सर्वोत्तम अभ्यास प्रश्न है:

मेरे पास एक Django एप्लिकेशन कहीं चल रहा है (गैर-k8s) जहां मेरे अंतिम उपयोगकर्ता खाते ट्रैक किए जाते हैं। अलग से, मेरे पास एक k8s क्लस्टर है जिसमें प्रत्येक उपयोगकर्ता के लिए एक सेवा है। जब कोई नया उपयोगकर्ता Django में साइन अप करता है, तो क्लस्टर में एक नई सेवा बनाई जानी चाहिए।

ऐसा करने के लिए सबसे अच्छा अभ्यास क्या है? मुझे दिखाई देने वाले दो विकल्प हैं:

  1. क्लस्टर में एक लंबे समय तक चलने वाली सेवा है, जैसे user-pod-creator, जो Django पक्ष के लिए एक एपीआई को उजागर करता है, जिससे वह एक पॉड बनाने के लिए कह सकता है।
  2. Django को सीधे क्लस्टर के API का उपयोग करने की अनुमति दें; इसे अपनी इच्छानुसार पॉड बनाएं (और हटाएं)।

सहजता से मैं पहले को पसंद करता हूं क्योंकि यह चिंताओं को अलग करता है और सुरक्षा कारणों से। लेकिन दूसरा Django ऐप को बहुत अधिक लचीलापन देगा ताकि यह न केवल पॉड्स बना सके और हटा सके, लेकिन अगर जरूरत हो तो सीधे एपीआई कॉल के साथ क्लस्टर में अधिक दृश्यता हो सकती है, बजाय इसके कि मुझे नए एपीआई एंडपॉइंट्स को उजागर करना पड़े user-pod-creator या किसी अन्य सेवा में।

0
authn_authz_person 24 मार्च 2020, 00:50

1 उत्तर

सबसे बढ़िया उत्तर

विकल्प 2 एक मान्य तरीका है और इसे सेवा से हल किया जा सकता है खाता.

अपने लिए एक ServiceAccount बनाएं Django ऐप:

kubectl create serviceaccount django

यह सर्विस अकाउंट एक सीक्रेट की ओर इशारा करता है, और इस सीक्रेट में एक टोकन होता है।

ServiceAccount से जुड़े रहस्य का पता लगाएं:

kubectl get serviceaccount django -o yaml

गुप्त में टोकन प्राप्त करें:

kubectl get secret django-token-d2tz4 -o jsonpath='{.data.token}'

अब आप क्लस्टर के बाहर अपने Django ऐप से Kubernetes API अनुरोधों में इस टोकन को HTTP बियरर टोकन के रूप में उपयोग कर सकते हैं।

अर्थात्, Kubernetes API अनुरोधों के HTTP Authorization शीर्षलेख में टोकन इस तरह शामिल करें:

Authorization: Bearer <TOKEN>

इस तरह, आपका अनुरोध एपीआई सर्वर में प्रमाणीकरण चरण से गुजरता है। हालाँकि, सेवा खाते में अभी तक कोई अनुमति नहीं है (प्राधिकरण)।

आप रोल्स और रोलबाइंडिंग के साथ अपने सेवा खाते के लिए आवश्यक अनुमतियां असाइन कर सकते हैं:

kubectl create role django --verb <...> --resource <...>
kubectl create rolebinding django --role django --serviceaccount django

सुरक्षा के संबंध में: केवल सेवा खाते के लिए आवश्यक न्यूनतम अनुमतियां (कम से कम विशेषाधिकारों का सिद्धांत) प्रदान करें, और यदि आपको लगता है कि किसी ने सेवा खाता टोकन चुरा लिया है, तो आप टोकन को अमान्य करने के लिए kubectl delete serviceaccount django के साथ सेवा खाते को हटा सकते हैं।

इसके उदाहरण के लिए यहां भी देखें। प्रस्तुत दृष्टिकोण। विशेष रूप से:

सेवा खाता वाहक टोकन क्लस्टर के बाहर उपयोग करने के लिए पूरी तरह से मान्य हैं और कुबेरनेट्स एपीआई से बात करने की इच्छा रखने वाले लंबे समय तक चलने वाली नौकरियों के लिए पहचान बनाने के लिए उपयोग किया जा सकता है।

0
weibeld 23 मार्च 2020, 22:17