Aggiungi o rimuovi le funzionalità Linux in Kubernetes SecurityContext

Aggiungi O Rimuovi Le Funzionalita Linux In Kubernetes Securitycontext



Potrebbe essere difficile gestire il grado di privilegi forniti a ciascun pod e container in un container Kubernetes. Possiamo utilizzare le funzionalità Kubernetes SecurityContext per aggiungere o eliminare le funzionalità Linux dal pod e dal contenitore per aumentare la sicurezza del contenitore. Questo articolo è incentrato sull'uso di securityContext per implementare un semplice esempio di aggiunta ed eliminazione di funzionalità. La configurazione di un file yaml per eliminare tutte le funzionalità e aggiungere solo una funzionalità a un contenitore è fornita nell'esempio di esempio. In questo articolo, i comandi proc e capsh vengono utilizzati per visualizzare le funzionalità del contenitore.

Passaggio 1: avviare il server Minikube







Innanzitutto, avvia il server minikube in modo da poter eseguire la tua applicazione e utilizzare le istruzioni kubectl. Puoi distribuire i tuoi nodi, pod e persino cluster utilizzando il server minikube nell'ambiente Kubernetes. Il seguente comando deve essere utilizzato per mantenere il minikube in modalità attiva:



> avviare minikube



Così facendo, il server minikube viene acceso e l'ambiente Kubernetes è pronto per l'uso.





Passo 2: Crea un file YAML Kubernetes



Nella seconda fase, crea un file YAML per distribuire un pod.

Segui i passaggi per creare un file yaml usando nano:

  • Andare al percorso della directory in cui si desidera creare il file o modificare un file esistente.
  • Digita il nano comando seguito dal nome del file.

Eseguire il seguente comando nano. Crea un file di configurazione YAML denominato 'nano podsample.yaml'.

> nano podsample.yaml

Passiamo al passaggio successivo che ti aiuterà a sapere come configurare un file podsample.yaml.

Passaggio 3: Configura il file YAML

Aggiungiamo lo strumento capsh nel passaggio precedente in modo da poter vedere le capacità del nostro contenitore.

Tieni presente che nessuno di questi parametri è configurato per una sezione securityContext per questo contenitore. Pertanto, sono tutti impostati sui valori predefiniti del sistema. Considera il fatto che questo contenitore funziona come utente predefinito che viene fornito nel Dockerfile da cui è costruito se non è definito alcun utente per esso in Kubernetes. Per molti contenitori, questo utente predefinito è root.

Passaggio 4: Crea un contenitore

In questo passaggio, creiamo podsample.yaml con il seguente comando allegato:

> kubectl si applica -f podsample.yaml

Passaggio 5: Controlla le capacità

Nel passaggio precedente, viene creato e in esecuzione un pod.

Ora che abbiamo una shell al suo interno, possiamo usare capsh per verificarne le capacità usando il seguente comando:

> $ kubectl esec - -stdin - -tty berretti - - cenere

Usando il comando capsh, è possibile vedere le capacità predefinite del contenitore che sono elencate come segue:

Possiamo osservare dall'output fornito che il contenitore ha molte funzionalità predefinite che vengono assegnate al contenitore in fase di esecuzione.

Passaggio 6: Lascia cadere il Separare Capacità Y in Kubernetes SecurityContext

In questo passaggio, eliminiamo la singola capacità del contenitore.

Configuriamo il file yaml usando il seguente comando:

> nano dropod.yaml

Successivamente, spostati per configurare il file droppod.yaml utilizzando il seguente comando:

> kubectl si applica -f droppod.yaml

Fare un passo 7 : Configura per aggiungere la funzionalità singola nel file YAML

In questo passaggio, apri il file yaml (dropped.yaml) che è stato creato nel passaggio 6. Quindi, imposta il contenitore in modo che non abbia più accesso alla funzionalità CAP_MKNOD, che rimuove la possibilità di creare i nuovi nodi del file system.

Il file configurato è come mostrato:

Fare un passo 8 : Controlla le capacità

Il file yaml è configurato per eliminare la funzionalità CAP_MKNOD.

In questo passaggio, esegui ed esegui il file dropcaps.yaml per verificare le funzionalità del contenitore utilizzando il seguente comando:

> $ kubectl esec - -stdin - -tty capolettera - - cenere

Le capacità possono essere verificate eseguendo il file capolettera:

> # capsh - -stampa

Possiamo osservare che questo pod ha abbandonato la funzionalità CAP_MKNOD rispetto al primo pod.

Fare un passo 9 : Elimina tutte le funzionalità in Kubernetes SecurityContext

Poiché Kubernetes può eliminare una singola funzionalità, può anche eliminare tutte le funzionalità tramite securityContext. In questo passaggio, elimina tutte le funzionalità del contenitore implicando il comando dato:

> nano samplenocap.yaml

Successivamente, configura il file samplenocap.yaml utilizzando il seguente comando:

> kubectl crea -f samplenocap.yaml

Ora, passiamo al passaggio successivo per eliminare tutte le capacità nelle nostre impostazioni di securityContext.

Passaggio 10: configura tutte le funzionalità nel file YAML

In questo passaggio, apri il file yaml che è stato creato nel passaggio 9. Quindi, configura all'interno di container.securityContext  ed elimina tutte le funzionalità del contenitore.

Il file configurato è come mostrato:

Fare un passo undici : Controlla le capacità

Esegui i nocaps in capsh per vedere le informazioni sulle capacità. In questo passaggio, utilizza il seguente comando e visualizza tutte le funzionalità del contenitore:

> kubectl esec - -stdin - -tty senza tappi - - cenere

Le capacità possono essere controllate nella seguente illustrazione eseguendo il file yaml samplenocaps in capsh:

> # capsh - -stampa

L'output precedente mostra che current='' e bounding set='' ora sono vuoti. Le funzionalità vengono eliminate correttamente.

Passo 1 2 : Installa Bash

In questo passaggio, installa Bash tramite apk poiché alcune funzioni di sistema non funzioneranno se non disponiamo di alcuna funzionalità. Anche se il nostro contenitore funziona come root, l'installazione del pacchetto Bash fallisce.

> # apk aggiungi bash

Passo 1 3 : Controlla le informazioni sulle capacità

Esistono diversi modi per visualizzare le funzionalità del nostro contenitore, ad esempio utilizzando i comandi capsh e proc. In questo passaggio, visualizziamo le capacità del contenitore usando il comando proc e proc visualizza le capacità come bitmap. Sebbene non sia così leggibile come il risultato di capsh, ogni bit qui definito rappresenta una certa capacità.

> # cd /proc/1/

Qui possiamo vedere che questo particolare contenitore non ha capacità abilitate; tutti questi valori sono zero.

Passo 1 4 : Aggiunta di una singola funzionalità in Kubernetes SecurityContext

Nei passaggi precedenti, abbiamo eliminato una singola funzionalità che è CAP_MKNOD e tutte le funzionalità. Ma, in questo passaggio, possiamo aggiungere nuovamente le funzionalità.

Esegui il seguente comando per creare il file yAML:

> nano sampleadd.yaml

Successivamente, configura il file sampleadd.yaml.

> kubectl crea -f sampleadd.yaml

Ora proviamo il file sampleadd.yaml e aggiungiamo una singola capacità nelle nostre impostazioni securityContext.

Passo 1 5 : Configura la capacità singola nel file YAML

Ora, configuriamo il file aggiungendo la capacità in spec.container.securityContext in capacità.add ['MKNOD'].

La funzionalità viene visualizzata nel file YAML.

Fare un passo 16 : Controlla le capacità

In questo passaggio, esegui addcaps per verificare le funzionalità utilizzando il seguente comando:

> kubectl esec - -stdin - -tty addcaps - - come

La capacità aggiunta può essere vista nel seguente output dato:

corrente = cap_mknod+ep

Insieme di delimitazione = cap_mknod

> # capsh - -stampa

Conclusione

Per prima cosa hai imparato dall'esempio implementato sulle funzionalità predefinite del contenitore che vengono assegnate in fase di esecuzione che viene visualizzato con il comando capsh. Successivamente, hai imparato a eliminare una singola funzionalità in un contenitore denominato CAP_MKNOD. Quindi, hai anche imparato come eliminare tutte le funzionalità del contenitore utilizzando la configurazione //drop: –all. Quindi, abbiamo utilizzato due modi per visualizzare le funzionalità dei contenitori: utilizzando i comandi capsh e proc.