צור ConfigMap או Secret גנרי מצמדי מפתח-ערך של שורת הפקודה.
→השתמש ב-`kubectl create configmap <name> --from-literal=<key>=<value>` או ב-`kubectl create secret generic <name> --from-literal=<key>=<value>`.
למה: `--from-literal` מיועד לקלט ישיר של מפתח-ערך. השתמש בדגל מספר פעמים עבור מפתחות מרובים. זה מהיר יותר מאשר יצירת קובץ YAML למקרים פשוטים.
מקור↗
הזרק את כל צמדי המפתח-ערך מ-ConfigMap או Secret כמשתני סביבה לתוך container.
→במפרט ה-container, השתמש ב-`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, המאפשר עדכונים חיים.
→הגדר `volume` מסוג `configMap` או `secret`. הרכב אותו ל-container באמצעות `volumeMounts`. הקבצים ייקראו על שם המפתחות.
למה: קבצים מורכבים מ-ConfigMaps/Secrets מתעדכנים אוטומטית כאשר המקור משתנה. משתני סביבה אינם מתעדכנים, ודורשים הפעלה מחדש של ה-Pod.
מקור↗
אכוף שיטות אבטחה מומלצות: מנע הרצה כ-root, הפוך את מערכת הקבצים הראשית ל-read-only, או ציין user ID.
→השתמש ב-`securityContext` ברמת ה-Pod או ה-container. הגדר `runAsNonRoot: true`, `readOnlyRootFilesystem: true`, ו/או `runAsUser: <UID>`.
למה: SecurityContext מספק שליטה דקדקנית והצהרתית על הרשאות ה-container, חיונית לחיזוק יישומים ועמידה במדיניות אבטחה.
מקור↗
הענק ל-Pod הרשאות מינימליות לגישה ל-Kubernetes API.
→1. צור `ServiceAccount` מותאם אישית. 2. צור `Role` עם הרשאות API הנחוצות בלבד (לדוגמה, list pods). 3. צור `RoleBinding` כדי לקשר את ה-ServiceAccount וה-Role. 4. הקצה את ה-ServiceAccount ל-Pod באמצעות `spec.serviceAccountName`.
למה: עוקב אחר עקרון ההרשאות המינימליות, וממזער את שטח התקיפה אם Pod נפגע.
מנע את ההרכבה האוטומטית של ServiceAccount token לתוך Pod שאינו זקוק לגישה ל-API.
→הגדר `automountServiceAccountToken: false` במפרט ה-Pod או ב-ServiceAccount עצמו.
למה: מפחית את שטח התקיפה בכך שאינו מספק אישורי API ל-containers שאינם דורשים אותם.
צור Secret לשימוש ב-TLS termination עבור Ingress או שירות מאובטח אחר.
→השתמש ב-`kubectl create secret tls <secret-name> --cert=<path/to/cert.pem> --key=<path/to/key.pem>`.
למה: זה יוצר Secret מהסוג הנכון `kubernetes.io/tls` עם מפתחות הנתונים הסטנדרטיים `tls.crt` ו-`tls.key` הצפויים על ידי Ingress controllers.
חשוף מטא נתונים של Pod (כמו שם, namespace, labels, או node IP) ל-container.
→השתמש ב-Downward API כדי להקרין מטא נתונים כמשתני סביבה או קבצים ב-`downwardAPI` volume. דוגמה: `valueFrom: {fieldRef: {fieldPath: metadata.name}}`.
למה: מאפשר ל-containers להיות מודעים לעצמם מבלי צורך לשלוף מידע מ-Kubernetes API, מפשט תצורה ומפחית דרישות RBAC.
מקור↗
הגדר בקשות CPU/זיכרון וlimits ברירת מחדל לכל ה-Pods ב-namespace.
→צור אובייקט `LimitRange` ב-namespace. הגדר ערכי `default` ו-`defaultRequest` למשאבים.
למה: מבטיח שלכל ה-Pods יהיו מגבלות משאבים, משפר תזמון ויציבות, גם אם מפתחים שוכחים לציין אותם. עובד בשיתוף פעולה עם ResourceQuota.
הגבל את הכמות הכוללת של משאבים (CPU, זיכרון, ספירת אובייקטים) שניתן לצרוך ב-namespace.
→צור אובייקט `ResourceQuota`. הגדר מגבלות קשיחות ב-`spec.hard`, לדוגמה: `requests.cpu: "4"`, `pods: "10"`.
למה: מונע מ-namespace או צוות אחד לצרוך את כל משאבי ה-cluster, ומבטיח הקצאת משאבים הוגנת.