Prima dell'arrivo di contenitori, i problemi di compatibilità di distribuzione sono stati affrontati dagli sviluppatori di software. Ciò potrebbe accadere quando il software funziona come previsto durante la fase di sviluppo, ma malfunzionamenti nell'ambiente Productioen a causa dei problemi di dipendenza. Tuttavia, tutti i requisiti del software utilizzati per lo sviluppo possono ora essere consegnati e utilizzati nell'ambiente di produzione a causa di contenitori. Dopo aver costruito l'immagine del contenitore e averne un istanza, potrebbe essere necessario una connessione al contenitore per scopi di debug o per applicare un hotfix, entrambi i quali richiedono l'accesso all'ambiente del contenitore. È necessario inserire la shell di qualsiasi contenitore in esecuzione per interagire con esso in alcun modo. Imparerai in questo articolo come accedere a un contenitore docker in esecuzione o pod Kubernetes tramite SSH.
Cos'è ssh?
Il protocollo Shell Secure Shell (comunemente noto come SSH) fornisce un modo per accedere a distanza da un computer a un altro in modo sicuro. La crittografia forte viene utilizzata per salvaguardare la sicurezza e l'integrità delle comunicazioni e offre diverse alternative aggiuntive per una forte autenticazione. È un sostituto sicuro per protocolli di trasferimento di file non sicuri e protocolli di accesso non garantiti (come Telnet e Rlogin) (come FTP). Inoltre, funziona bene con Kubernetes.
Comandi ed esempi di shell utili per Kubectl Exec
Con Kubectl Exec, è possibile avviare una sessione di shell su contenitori che operano nel cluster Kubernetes. È funzionalità simile a SSH per Kubernetes. Le informazioni di cui hai bisogno, insieme agli scenari in cui ha più senso, sono fornite di seguito in modo da poter utilizzare questo comando come parte dei processi di gestione dei cluster.
Un orchestratore contenitore chiamato Kubernetes abilita distribuzioni automatizzate su numerosi computer fisici. Secure Shell su un server fisico è diverso dall'avvio di una sessione di shell a un contenitore in un cluster Kubernetes. Anche se i contenitori dovrebbero essere apolidi e in grado di operare senza supervisione, occasionalmente è possibile aver bisogno di una shell per risolvere i problemi o recuperare i dati.
È possibile connetterti ai contenitori all'interno del cluster utilizzando Kubectl Exec. È un componente dello strumento CLI Kubectl per comunicare con le installazioni di Kubernetes. Simile a SSH o Docker Exec, il comando EXEC alimenta una sessione di shell nel tuo terminale.
L'invocazione più semplice per accedere al pod "demo-pod" è la seguente:
Kubectl si connetterà al cluster, lancio /bin /sh nel primo contenitore del pod demo e passerà i flussi di input e output dal tuo terminale al processo del contenitore. Questo post esaminerà le situazioni in cui è utile Kubectl Exec, ciò che ogni parte del comando realizza e come può essere personalizzata la connessione Shell.
Quando utilizzare Kubectl Exec?
Sono necessarie diverse tecniche per gestire carichi di lavoro containerizzati in un cluster Kubernetes che per la gestione delle applicazioni su un server a metallo nudo convenzionale. È necessario scavare dall'host cluster alle istanze del contenitore che distribuiscono il sistema, aggiungendo un altro livello tra te e il tuo programma.
La capacità di Kubernetes di distribuire repliche attraverso i computer fisici è uno dei suoi punti di forza (nodi). Anche se potessi amministrare su SSH, dovresti comunque tenere traccia di quale nodo ha supervisionato ogni contenitore. Senza preoccuparsi del nodo Kubernetes, il contenitore è acceso. È possibile specificare il contenitore da connettersi all'utilizzo di Kubectl.
L'uso più frequente di avviare un guscio all'interno di un contenitore è quando la risoluzione dei problemi di un problema. Puoi essere lasciato altra scelta che esaminare il contenitore dall'interno dopo aver esaurito tutte le altre opzioni, come guardare i registri del contenitore.
È possibile visualizzare il file system completo del contenitore e confermare che l'ambiente è come previsto eseguendo i comandi della shell. Inoltre, può aiutarti a trovare istanze di variabili di ambiente definite in modo errato e determinare se un file cruciale è bloccato o mancante.
Sostituti di Kubectl Exec
Il metodo più efficace per la connessione a una shell di un contenitore Kubernetes è Kubectl Exec. È fatto per questo uso e risolve tutti i problemi di scelta del nodo fisico giusto a cui connettersi.
Prendi in considerazione l'esecuzione di un demone SSH all'interno del tuo contenitore se hai veramente bisogno di un'opzione diversa perché è necessario connettersi da un sistema senza kubectl. Sii consapevole del fatto che ciò aumenta la vulnerabilità alle minacce alla sicurezza e contraddice la premessa che ciascun contenitore dovrebbe servire a un unico scopo.
Come accedere al mio nodo lavoratore tramite SSH?
Utilizzare un set di daemon Kubernetes o attività per azioni una tantum da eseguire su ciascun nodo lavoratore.
Rivedere le seguenti opzioni per ottenere l'accesso dell'host ai nodi del lavoratore ai fini del debug e della risoluzione dei problemi.
Utilizzo del debug Kubectl per il debug
Utilizzare il comando Kubectl Debug Node per distribuire un pod con un contesto di sicurezza privilegiato a un nodo lavoratore che si desidera debug. Per fornire l'accesso al nodo del lavoratore non appena si forma il pod di debug, viene distribuita una shell interattiva.
Debug utilizzando Kubectl Exec
È possibile creare un pod alpino con un contesto di sicurezza privilegiato e utilizzare il comando Kubectl Exec per eseguire i comandi di debug dalla shell interattiva del pod se non si è in grado di eseguire il comando Kubectl Debug Node.
Costruire un pod con accesso alla radice per il debug
Se non si è in grado di utilizzare il nodo debug Kubectl o i comandi EXEC KubeCTL, ad esempio se la connessione VPN tra il cluster master e i nodi lavoratori è inattiva. È possibile creare un POD che consente l'accesso SSH root e copia una chiave SSH pubblica per il nodo del lavoratore per l'accesso SSH.
Pulizia dopo il debug
Dopo aver finito il debug, ripulire le risorse per disabilitare l'accesso SSH.
Quali sono i vantaggi dell'accesso SSH?
I vantaggi sono elencati di seguito:
Conclusione
Utilizzando il comando KuBectl Exec, è possibile avviare una sessione di shell all'interno di qualsiasi contenitore attualmente attivo nel cluster Kubernetes. Quando i registri da soli sono insufficienti, è possibile utilizzare questo comando per esplorare il file system del contenitore, valutare l'ambiente ed eseguire sofisticati strumenti di debug. Come ultima opzione, dovresti gestire manualmente i tuoi contenitori utilizzando comandi shell.