0Pricing
Docker & DevOps Fundamentals · Lezione

ConfigMap e Secret

Gestisca in modo sicuro i dati di configurazione e le informazioni sensibili nei deployment Kubernetes utilizzando ConfigMap e Secret.

ConfigMap e Secret è una lezione Docker & DevOps Fundamentals gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Docker & DevOps Fundamentals, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Docker & DevOps Fundamentals include 4 lezioni in totale.

Introduzione a ConfigMap e Secret

Benvenuti! In questa lezione imparerete a gestire i dati di configurazione e le informazioni sensibili in Kubernetes. Esploreremo ConfigMap e Secret, due strumenti essenziali per deployment delle applicazioni flessibili e sicuri.

ConfigMap e Secret — illustrazione 1

Perché esternalizzare la configurazione?

Immaginate di inserire direttamente nell'immagine Docker dell'applicazione le credenziali del database o le chiavi API. Questo rende difficili gli aggiornamenti ed espone i dati sensibili.

  • Rigidità: le modifiche richiedono la ricostruzione dell'immagine.
  • Rischio per la sicurezza: i dati sensibili vengono incorporati nell'immagine.
  • Specificità dell'ambiente: ambienti diversi (sviluppo, produzione) richiedono impostazioni diverse.

ConfigMap: dati non sensibili

Un ConfigMap è un oggetto Kubernetes utilizzato per archiviare dati di configurazione non sensibili sotto forma di coppie chiave-valore. Pensatelo come un punto centralizzato per le impostazioni dell'applicazione, ad esempio i livelli di log o gli endpoint API.

Separa la configurazione dal codice dell'applicazione, rendendo i deployment più portabili e facili da gestire.

Definire un ConfigMap

Potete creare un ConfigMap da valori letterali, file o directory. Ecco un semplice esempio definito in un file YAML:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-config
data:
  log_level: "INFO"
  api_endpoint: "http://myapi.example.com"

ConfigMap come variabili d'ambiente

Una volta creato, un Pod può utilizzare i dati di un ConfigMap come variabili d'ambiente. È un modo comune per passare le impostazioni all'applicazione.

Ecco come un Pod utilizza il nostro my-app-config:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-env-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "echo Log Level: $LOG_LEVEL; echo API: $API_ENDPOINT"]
    env:
    - name: LOG_LEVEL
      valueFrom:
        configMapKeyRef:
          name: my-app-config
          key: log_level
    - name: API_ENDPOINT
      valueFrom:
        configMapKeyRef:
          name: my-app-config
          key: api_endpoint
  restartPolicy: Never

ConfigMap come file montati

In alternativa, i dati di un ConfigMap possono essere montati come file all'interno del container. Ogni coppia chiave-valore diventa un file, con la chiave come nome del file e il valore come contenuto.

È utile per i file di configurazione che l'applicazione deve leggere da un percorso specifico.

apiVersion: v1
kind: Pod
metadata:
  name: configmap-file-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "cat /etc/config/log_level; cat /etc/config/api_endpoint"]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: my-app-config
  restartPolicy: Never

Secret: dati sensibili

I Secret sono simili ai ConfigMap, ma sono progettati per dati sensibili come password, chiavi API o certificati TLS. Kubernetes aiuta a gestirli e distribuirli in modo sicuro.

Mentre i ConfigMap archiviano i dati in testo semplice, i Secret sono codificati in base64. Questa operazione NON è una cifratura, ma impedisce l'esposizione accidentale.

Definire un Secret

Quando create un Secret, i valori devono essere codificati in base64. Potete utilizzare echo -n 'my-password' | base64 per codificarli.

Ecco un esempio per la password di un database:

apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
data:
  username: YWRtaW4= # base64 of 'admin'
  password: c3VwZXJzZWNyZXRwYXNz # base64 of 'supersecretpass'

Utilizzare i Secret nei Pod

I Pod utilizzano i Secret in modo molto simile ai ConfigMap: come variabili d'ambiente o file montati. Kubernetes li decodifica automaticamente prima di presentarli al container.

In genere, per motivi di sicurezza, è preferibile utilizzarli come file montati, poiché le variabili d'ambiente possono essere registrate o ispezionate più facilmente.

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: my-app-container
    image: busybox
    command: ["sh", "-c", "echo DB User: $DB_USERNAME; echo DB Pass: $DB_PASSWORD"]
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: password
  restartPolicy: Never

Buone pratiche di sicurezza

Ricordate: la codifica base64 non è una cifratura. Per una vera cifratura dei dati inattivi, potrebbe essere necessario un backend per i Secret Kubernetes (come Vault) oppure utilizzare i servizi KMS del cloud provider.

  • RBAC: controllate chi può accedere ai Secret.
  • Privilegio minimo: concedete ai Pod l'accesso solo ai Secret di cui hanno bisogno.
  • File montati: preferite montare i Secret come file anziché utilizzarli come variabili d'ambiente.

Verifica rapida sulla configurazione

Dovete archiviare in Kubernetes una chiave API (sensibile) e un'impostazione per il livello di log (non sensibile) della vostra applicazione.

Quali oggetti Kubernetes dovreste utilizzare rispettivamente?

Riepilogo: ConfigMap e Secret

Ottimo lavoro! Avete imparato a gestire la configurazione delle applicazioni e i dati sensibili in Kubernetes.

  • ConfigMap: archiviano coppie chiave-valore non sensibili.
  • Secret: archiviano dati sensibili (codificati in base64).
  • Entrambi possono essere utilizzati dai Pod come variabili d'ambiente o file montati.
  • Seguite sempre le buone pratiche di sicurezza quando gestite informazioni sensibili.

Ora esplorate argomenti avanzati sulla sicurezza, come RBAC e le soluzioni esterne per la gestione dei Secret.

Domande Frequenti

La lezione «ConfigMap e Secret» è gratuita?

Sì — il testo completo di «ConfigMap e Secret» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Docker & DevOps Fundamentals, passa a CoddyKit PRO. Il corso Docker & DevOps Fundamentals include 4 lezioni in totale.

Cosa imparerò in «ConfigMap e Secret»?

Gestisca in modo sicuro i dati di configurazione e le informazioni sensibili nei deployment Kubernetes utilizzando ConfigMap e Secret. Eserciti Docker & DevOps Fundamentals con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Docker & DevOps Fundamentals?

Non è richiesta alcuna esperienza precedente. Docker & DevOps Fundamentals su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «ConfigMap e Secret»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Docker & DevOps Fundamentals?

Sì. Ogni lezione Docker & DevOps Fundamentals include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Deployment per app stateless
  2. Service per l'accesso di rete
  3. ConfigMap e Secret
  4. Ingress e routing esterno
← Torna a Docker & DevOps Fundamentals