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.