
AWS IAM क्रेडेंशियल्स का उपयोग करके Kubernetes क्लस्टर में प्रमाणीकरण करने के लिए एक टूल
Kubernetes क्लस्टर में प्रमाणित करने के लिए AWS IAM क्रेडेंशियल्स का उपयोग करने का एक टूल। इस टूल पर प्रारंभिक कार्य Heptio द्वारा किया गया था। यह प्रोजेक्ट कई समुदाय इंजीनियरों से योगदान प्राप्त करता है और वर्तमान में Heptio और Amazon EKS OSS Engineers द्वारा अनुरक्षित है।
यदि आप AWS पर Kubernetes क्लस्टर चला रहे प्रशासक हैं, तो आपको क्लस्टर को प्रोविज़न और अपडेट करने के लिए पहले से ही AWS IAM क्रेडेंशियल्स का प्रबंधन करना होगा। Kubernetes के लिए AWS IAM Authenticator का उपयोग करके, आपको Kubernetes एक्सेस के लिए एक अलग क्रेडेंशियल का प्रबंधन करने से बचना होगा। AWS IAM कई अच्छे गुण भी प्रदान करता है, जैसे आउट ऑफ बैंड ऑडिट ट्रेल (CloudTrail के माध्यम से) और 2FA/MFA प्रवर्तन।
यदि आप AWS पर Kubernetes इंस्टॉलर बना रहे हैं, तो Kubernetes के लिए AWS IAM Authenticator आपकी बूटस्ट्रैप प्रक्रिया को सरल बना सकता है।
आपको अपने नए इंस्टॉल किए गए क्लस्टर से अपने प्रारंभिक एडमिन क्रेडेंशियल को किसी तरह सुरक्षित रूप से बाहर निकालने की आवश्यकता नहीं होगी।
इसके बजाय, आप क्लस्टर प्रोविज़निंग के समय एक समर्पित KubernetesAdmin भूमिका बना सकते हैं और क्लस्टर प्रशासक लॉगिन की अनुमति देने के लिए Authenticator सेट कर सकते हैं।
यह मानते हुए कि आपके पास AWS में एक क्लस्टर चल रहा है और आप Kubernetes समर्थन के लिए AWS IAM Authenticator जोड़ना चाहते हैं, आपको यह करना होगा:
पहले, आपको एक या अधिक IAM भूमिकाएँ बनानी होंगी जो आपके Kubernetes क्लस्टर के भीतर उपयोगकर्ताओं/समूहों से मैप की जाएँगी। ऐसा करने का सबसे आसान तरीका AWS Console में लॉग इन करना है:
यह बिना किसी अनुमति वाली एक IAM भूमिका बनाएगा जिसे आपके खाते में अधिकृत उपयोगकर्ता/भूमिकाएँ ग्रहण कर सकती हैं। अपनी भूमिका का Amazon Resource Name (ARN) नोट करें, जिसकी आपको नीचे आवश्यकता होगी।
आप AWS Console के बजाय AWS CLI का उपयोग करके इसे एक ही चरण में भी कर सकते हैं:
# get your account ID
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
# define a role trust policy that opens the role to users in your account (limited by IAM policy)
POLICY=$(echo -n '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::'; echo -n "$ACCOUNT_ID"; echo -n ':root"},"Action":"sts:AssumeRole","Condition":{}}]}')
# create a role named KubernetesAdmin (will print the new role's ARN)
aws iam create-role \
--role-name KubernetesAdmin \
--description "Kubernetes administrator role (for AWS IAM Authenticator for Kubernetes)." \
--assume-role-policy-document "$POLICY" \
--output text \
--query 'Role.Arn'
आप इस चरण को छोड़ भी सकते हैं और इसका उपयोग कर सकते हैं:
mapUsers देखें)।mapRoles देखें)।सर्वर को आपके प्रत्येक मास्टर नोड पर host networking के साथ DaemonSet के रूप में चलाने के लिए बनाया गया है ताकि यह एक localhost पोर्ट उजागर कर सके।
एक नमूना ConfigMap और DaemonSet कॉन्फ़िगरेशन के लिए, deploy/example.yaml देखें।
इसे लागू करने से पहले, अपने क्लस्टर के लिए इन मानों को अपडेट करें:
config.yaml में प्लेसहोल्डर IAM ARNs (arn:aws:iam::000000000000:...) बदलें।clusterID को अपने क्लस्टर के लिए एक अद्वितीय मान पर सेट करें।फिर इसे डिप्लॉय करें:
kubectl apply -f deploy/example.yaml
kubectl -n kube-system rollout status daemonset/aws-iam-authenticator
kubectl -n kube-system get pods -l k8s-app=aws-iam-authenticator
एक बार pod कंट्रोल-प्लेन नोड पर चलने लगे, तो aws-iam-authenticator server होस्ट पर /etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml पर webhook kubeconfig बना देगा (या --generate-kubeconfig के माध्यम से कॉन्फ़िगर किया गया पथ)।
यदि आप एक स्वचालित इंस्टॉलर बना रहे हैं, तो आप aws-iam-authenticator init का उपयोग करके प्रमाणपत्र, कुंजी और webhook kubeconfig फ़ाइलों को आसानी से पहले से जनरेट भी कर सकते हैं।
यह कमांड फ़ाइलें जनरेट करेगा और उन्हें कॉन्फ़िगर की गई आउटपुट निर्देशिकाओं में रखेगा।
आप API सर्वर शुरू करने से पहले प्रत्येक मास्टर नोड पर इसे चला सकते हैं। आप मास्टर नोड्स को प्रोविज़न करने से पहले भी इन्हें जनरेट कर सकते हैं और उन्हें उपयुक्त होस्ट पथों में इंस्टॉल कर सकते हैं।
यदि आप फ़ाइलें पहले से जनरेट नहीं करते हैं, तो aws-iam-authenticator server उन्हें मांग पर जनरेट करेगा।
यह काम करता है लेकिन इसके लिए आवश्यक है कि आप इंस्टॉलेशन के बाद अपने Kubernetes API सर्वर को पुनः आरंभ करें।
Kubernetes API token authentication webhook का उपयोग करके AWS IAM Authenticator for Kubernetes के साथ एकीकृत होता है।
जब आप aws-iam-authenticator server चलाते हैं, तो यह एक webhook कॉन्फ़िगरेशन फ़ाइल जनरेट करेगा और उसे होस्ट फ़ाइलसिस्टम पर सहेजेगा।
आपको अपने API सर्वर कॉन्फ़िगरेशन में एक अतिरिक्त फ़्लैग जोड़ना होगा:
--authentication-token-webhook-config-file=/etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml
कई क्लस्टरों पर, API सर्वर एक स्टैटिक पॉड के रूप में चलता है।
आप /etc/kubernetes/manifests/kube-apiserver.yaml में फ़्लैग जोड़ सकते हैं।
सुनिश्चित करें कि होस्ट डायरेक्टरी /etc/kubernetes/aws-iam-authenticator/ आपके API सर्वर पॉड में माउंट की गई है।
अपडेट किए गए स्टैटिक पॉड डेफ़िनिशन को पिक अप करने के लिए आपको अपने मास्टर नोड पर kubelet डेमन को पुनः आरंभ करना भी पड़ सकता है:
systemctl restart kubelet.service
सर्वर का डिफ़ॉल्ट व्यवहार यह है कि वह मैपिंग को विशेष रूप से अपनी कॉन्फ़िगरेशन फ़ाइल के
mapUsers और mapRoles फ़ील्ड से प्राप्त करता है। विवरण के लिए नीचे पूर्ण
कॉन्फ़िगरेशन प्रारूप देखें।
--backend-mode फ़्लैग का उपयोग करके, आप सर्वर को दो अतिरिक्त बैकएंड से मैपिंग प्राप्त
करने के लिए कॉन्फ़िगर कर सकते हैं: एक EKS-शैली का ConfigMap
(--backend-mode=EKSConfigMap) या IAMIdentityMapping कस्टम संसाधन
(--backend-mode=CRD)। डिफ़ॉल्ट बैकएंड, सर्वर कॉन्फ़िगरेशन फ़ाइल जिसे सर्वर पॉड द्वारा
माउंट किया जाता है, --backend-mode=MountedFile के अनुरूप है।