Créer une ConfigMap ou un Secret générique à partir de paires clé-valeur en ligne de commande.
Utilisez `kubectl create configmap <name> --from-literal=<key>=<value>` ou `kubectl create secret generic <name> --from-literal=<key>=<value>`.
Pourquoi: `--from-literal` est pour l'entrée directe de paires clé-valeur. Utilisez le drapeau plusieurs fois pour plusieurs clés. C'est plus rapide que de créer un fichier YAML pour les cas simples.
Référence
Injecter toutes les paires clé-valeur d'une ConfigMap ou d'un Secret en tant que variables d'environnement dans un conteneur.
Dans la spécification du conteneur, utilisez `envFrom` avec `configMapRef` ou `secretRef`. Exemple : `envFrom: [{configMapRef: {name: my-config}}]`.
Pourquoi: `envFrom` est une opération en bloc qui mappe toutes les clés de la source aux variables d'environnement. Cela évite de lister manuellement chaque clé.
Référence
Injecter une valeur unique et spécifique d'une ConfigMap ou d'un Secret en tant que variable d'environnement.
Utilisez `env.valueFrom`. Exemple : `env: [{name: LOG_LEVEL, valueFrom: {configMapKeyRef: {name: my-config, key: log_level}}}]`.
Pourquoi: `valueFrom` fournit une injection sélective et permet de mapper la clé source à un nom de variable d'environnement différent.
Monter une ConfigMap ou un Secret sous forme de fichiers dans un Pod, permettant des mises Ă jour en direct.
Définissez un `volume` de type `configMap` ou `secret`. Montez-le dans le conteneur en utilisant `volumeMounts`. Les fichiers seront nommés d'aprÚs les clés.
Pourquoi: Les fichiers montés à partir de ConfigMaps/Secrets sont mis à jour automatiquement lorsque la source change. Les variables d'environnement ne le sont pas, nécessitant un redémarrage du Pod.
Référence
Appliquer les meilleures pratiques de sĂ©curitĂ© : empĂȘcher l'exĂ©cution en tant que root, rendre le systĂšme de fichiers root en lecture seule, ou spĂ©cifier un ID utilisateur.
Utilisez `securityContext` au niveau du Pod ou du conteneur. Définissez `runAsNonRoot: true`, `readOnlyRootFilesystem: true` et/ou `runAsUser: <UID>`.
Pourquoi: SecurityContext offre un contrÎle déclaratif et granulaire sur les privilÚges des conteneurs, essentiel pour renforcer les applications et respecter les politiques de sécurité.
Référence
Accorder à un Pod des permissions minimales pour accéder à l'API Kubernetes.
1. Créez un `ServiceAccount` personnalisé. 2. Créez un `Role` avec uniquement les permissions API nécessaires (par exemple, lister les pods). 3. Créez un `RoleBinding` pour lier le ServiceAccount et le Role. 4. Assignez le ServiceAccount au Pod via `spec.serviceAccountName`.
Pourquoi: Suit le principe du moindre privilĂšge, minimisant la surface d'attaque si un Pod est compromis.
EmpĂȘcher le montage automatique d'un jeton ServiceAccount dans un Pod qui n'a pas besoin d'accĂšs API.
DĂ©finissez `automountServiceAccountToken: false` dans la spĂ©cification du Pod ou sur le ServiceAccount lui-mĂȘme.
Pourquoi: Réduit la surface d'attaque en ne fournissant pas de identifiants API aux conteneurs qui n'en ont pas besoin.
Créer un Secret pour l'utilisation dans la terminaison TLS pour un Ingress ou un autre service sécurisé.
Utilisez `kubectl create secret tls <secret-name> --cert=<path/to/cert.pem> --key=<path/to/key.pem>`.
Pourquoi: Ceci crée un Secret du type correct `kubernetes.io/tls` avec les clés de données standard `tls.crt` et `tls.key` attendues par les contrÎleurs Ingress.
Exposer les mĂ©tadonnĂ©es de Pod (comme le nom, l'espace de noms, les Ă©tiquettes ou l'IP du nĆud) Ă un conteneur.
Utilisez l'API Downward pour projeter les métadonnées en tant que variables d'environnement ou fichiers dans un volume `downwardAPI`. Exemple : `valueFrom: {fieldRef: {fieldPath: metadata.name}}`.
Pourquoi: Permet aux conteneurs d'ĂȘtre auto-conscients sans avoir besoin d'interroger l'API Kubernetes, simplifiant la configuration et rĂ©duisant les exigences RBAC.
Référence
DĂ©finir les requĂȘtes et limites par dĂ©faut de CPU/mĂ©moire pour tous les Pods dans un espace de noms.
Créez un objet `LimitRange` dans l'espace de noms. Définissez les valeurs `default` et `defaultRequest` pour les ressources.
Pourquoi: Garantit que tous les Pods ont des contraintes de ressources, amĂ©liorant l'ordonnancement et la stabilitĂ©, mĂȘme si les dĂ©veloppeurs oublient de les spĂ©cifier. Fonctionne de concert avec ResourceQuota.
Limiter la quantitĂ© totale de ressources (CPU, mĂ©moire, nombre d'objets) pouvant ĂȘtre consommĂ©es dans un espace de noms.
Créez un objet `ResourceQuota`. Définissez des limites strictes dans `spec.hard`, par exemple, `requests.cpu: "4"`, `pods: "10"`.
Pourquoi: EmpĂȘche un espace de noms ou une Ă©quipe de consommer toutes les ressources du cluster, garantissant une allocation Ă©quitable des ressources.