कमांड-लाइन कुंजी-मान युग्मों से एक ConfigMap या जेनेरिक Secret बनाएँ।
→`kubectl create configmap <name> --from-literal=<key>=<value>` या `kubectl create secret generic <name> --from-literal=<key>=<value>` का उपयोग करें।
क्यों: `--from-literal` सीधे कुंजी-मान इनपुट के लिए है। कई कुंजियों के लिए इस फ़्लैग का कई बार उपयोग करें। यह सरल मामलों के लिए YAML फ़ाइल बनाने से तेज़ है।
संदर्भ↗
एक ConfigMap या Secret से सभी कुंजी-मान युग्मों को एक कंटेनर में पर्यावरण चर के रूप में इंजेक्ट करें।
→कंटेनर स्पेसिफिकेशन में, `envFrom` का उपयोग `configMapRef` या `secretRef` के साथ करें। उदाहरण: `envFrom: [{configMapRef: {name: my-config}}]`।
क्यों: `envFrom` एक थोक ऑपरेशन है जो स्रोत से सभी कुंजियों को पर्यावरण चर में मैप करता है। यह प्रत्येक कुंजी को मैन्युअल रूप से सूचीबद्ध करने से बचाता है।
संदर्भ↗
एक ConfigMap या Secret से एक एकल, विशिष्ट मान को पर्यावरण चर के रूप में इंजेक्ट करें।
→`env.valueFrom` का उपयोग करें। उदाहरण: `env: [{name: LOG_LEVEL, valueFrom: {configMapKeyRef: {name: my-config, key: log_level}}}]`।
क्यों: `valueFrom` चयनात्मक इंजेक्शन प्रदान करता है और स्रोत कुंजी को एक अलग पर्यावरण चर नाम पर मैप करने की अनुमति देता है।
एक ConfigMap या Secret को Pod में फ़ाइलों के रूप में माउंट करें, जिससे लाइव अपडेट्स की अनुमति मिलती है।
→`configMap` या `secret` प्रकार का एक `volume` परिभाषित करें। इसे `volumeMounts` का उपयोग करके कंटेनर में माउंट करें। फ़ाइलें कुंजियों के नाम पर होंगी।
क्यों: ConfigMaps/Secrets से माउंट की गई फ़ाइलें स्रोत बदलने पर स्वचालित रूप से अपडेट हो जाती हैं। पर्यावरण चर नहीं होते, जिसके लिए Pod को पुनरारंभ करना पड़ता है।
संदर्भ↗
सुरक्षा सर्वोत्तम प्रथाओं को लागू करें: रूट के रूप में चलने से रोकें, रूट फ़ाइलसिस्टम को केवल-पढ़ने योग्य बनाएं, या एक उपयोगकर्ता ID निर्दिष्ट करें।
→Pod या कंटेनर स्तर पर `securityContext` का उपयोग करें। `runAsNonRoot: true`, `readOnlyRootFilesystem: true`, और/या `runAsUser: <UID>` सेट करें।
क्यों: SecurityContext कंटेनर विशेषाधिकारों पर सूक्ष्म, घोषणात्मक नियंत्रण प्रदान करता है, जो अनुप्रयोगों को मजबूत करने और सुरक्षा नीतियों को पूरा करने के लिए आवश्यक है।
संदर्भ↗
एक Pod को Kubernetes API तक पहुँचने के लिए न्यूनतम अनुमतियाँ प्रदान करें।
→1. एक कस्टम `ServiceAccount` बनाएँ। 2. केवल आवश्यक API अनुमतियों (जैसे, पॉड्स सूचीबद्ध करें) के साथ एक `Role` बनाएँ। 3. ServiceAccount और Role को लिंक करने के लिए एक `RoleBinding` बनाएँ। 4. `spec.serviceAccountName` के माध्यम से ServiceAccount को Pod को असाइन करें।
क्यों: न्यूनतम विशेषाधिकार के सिद्धांत का पालन करता है, यदि Pod से समझौता किया जाता है तो हमले की सतह को कम करता है।
एक ServiceAccount टोकन को ऐसे Pod में स्वचालित रूप से माउंट होने से रोकें जिसे API पहुँच की आवश्यकता नहीं है।
→Pod स्पेसिफिकेशन में या ServiceAccount पर `automountServiceAccountToken: false` सेट करें।
क्यों: उन कंटेनरों को API क्रेडेंशियल प्रदान न करके हमले की सतह को कम करता है जिन्हें उनकी आवश्यकता नहीं होती है।
एक Ingress या अन्य सुरक्षित सेवा के लिए TLS समाप्ति में उपयोग के लिए एक Secret बनाएँ।
→`kubectl create secret tls <secret-name> --cert=<path/to/cert.pem> --key=<path/to/key.pem>` का उपयोग करें।
क्यों: यह सही प्रकार `kubernetes.io/tls` का एक Secret बनाता है जिसमें मानक `tls.crt` और `tls.key` डेटा कुंजियाँ होती हैं जिनकी Ingress नियंत्रकों द्वारा अपेक्षा की जाती है।
Pod मेटाडेटा (जैसे नाम, नेमस्पेस, लेबल, या नोड IP) को एक कंटेनर में उजागर करें।
→मेटाडेटा को पर्यावरण चर या `downwardAPI` वॉल्यूम में फ़ाइलों के रूप में प्रोजेक्ट करने के लिए Downward API का उपयोग करें। उदाहरण: `valueFrom: {fieldRef: {fieldPath: metadata.name}}`।
क्यों: कंटेनरों को Kubernetes API से क्वेरी करने की आवश्यकता के बिना आत्म-जागरूक होने की अनुमति देता है, जिससे कॉन्फ़िगरेशन सरल होता है और RBAC आवश्यकताओं को कम करता है।
संदर्भ↗
एक नेमस्पेस में सभी Pods के लिए डिफ़ॉल्ट CPU/मेमोरी अनुरोध और सीमाएँ सेट करें।
→नेमस्पेस में एक `LimitRange` ऑब्जेक्ट बनाएँ। संसाधनों के लिए `default` और `defaultRequest` मान परिभाषित करें।
क्यों: सुनिश्चित करता है कि सभी Pods में संसाधन बाधाएँ हों, शेड्यूलिंग और स्थिरता में सुधार हो, भले ही डेवलपर्स उन्हें निर्दिष्ट करना भूल जाएँ। ResourceQuota के साथ मिलकर काम करता है।
एक नेमस्पेस में खपत किए जा सकने वाले संसाधनों (CPU, मेमोरी, ऑब्जेक्ट काउंट) की कुल मात्रा को सीमित करें।
→एक `ResourceQuota` ऑब्जेक्ट बनाएँ। `spec.hard` में कठोर सीमाएँ परिभाषित करें, उदाहरण के लिए, `requests.cpu: "4"`, `pods: "10"`।
क्यों: एक नेमस्पेस या टीम को सभी क्लस्टर संसाधनों का उपभोग करने से रोकता है, जिससे उचित संसाधन आवंटन सुनिश्चित होता है।