Accesso remoto
L'accesso ai server del cluster avviene tramite un bastion host, un server dedicato che funge da punto di ingresso unico e sicuro.
Architettura di accesso
Tuo computer
│
│ SSH (chiave privata)
▼
┌─────────────────────────────────┐
│ bastion.cngei.it │
│ Bastion Host │
└──────────┬──────────────────────┘
│ SSH (chiave interna)
▼
┌─────────────────────────────────┐
│ Cluster Kubernetes │
│ (akela, hathi, baloo, │
│ baghera, tha) │
└─────────────────────────────────┘
Bastion Host
Il bastion host (bastion.cngei.it) è l'unico punto di accesso dall'esterno verso l'infrastruttura interna. Ha queste caratteristiche:
- Solo chiavi SSH: non è possibile accedere con password. Devi avere una chiave SSH autorizzata.
- Accesso limitato: solo gli amministratori autorizzati hanno una chiave configurata.
- Ponte verso il cluster: dal bastion puoi raggiungere tutti i nodi del cluster tramite la rete interna.
Come connettersi
Configurare la chiave SSH
-
Genera una coppia di chiavi SSH (se non ne hai già una):
ssh-keygen -t ed25519 -C "tuo.nome@cngei.it" -
Condividi la chiave pubblica (
~/.ssh/id_ed25519.pub) con un amministratore -
L'amministratore aggiungerà la tua chiave al bastion host
Connettersi al bastion
ssh bastion.cngei.it
Connettersi a un nodo del cluster
Dal bastion host, puoi connetterti a qualsiasi nodo:
ssh akela.cngei.it
ssh hathi.cngei.it
ssh baloo.cngei.it
ssh baghera.cngei.it
ssh tha.cngei.it
Configurazione SSH locale
Puoi semplificare la connessione configurando il tuo file ~/.ssh/config:
Host bastion
HostName bastion.cngei.it
User tuonome
Host akela hathi baloo baghera tha
ProxyJump bastion
User tuonome
Con questa configurazione, puoi connetterti direttamente ai nodi:
ssh akela
ssh hathi
Il collegamento passerà automaticamente attraverso il bastion.
Connettersi con kubectl
Per gestire il cluster Kubernetes con kubectl dal tuo computer, puoi usare SSH per fare tunneling verso il control plane.
Metodo 1: Proxy SSH diretto
Puoi usare kubectl con un proxy SSH verso il nodo control plane:
kubectl --kubeconfig <(ssh -o ProxyJump=bastion.cngei.it akela.cngei.it 'sudo cat /etc/kubernetes/admin.conf') get nodes
Questo comando:
- Si connette al bastion
- Dal bastion salta su
akela - Legge il file di configurazione
admin.conf - Usa quella configurazione come kubeconfig locale
Metodo 2: Configurazione permanente
Per usare kubectl in modo più comodo, configura il tuo ~/.kube/config:
- Copia il kubeconfig dal control plane:
ssh -o ProxyJump=bastion.cngei.it akela.cngei.it 'sudo cat /etc/kubernetes/admin.conf' > ~/.kube/config
- Modifica il file
~/.kube/confige aggiungiproxyCommandal cluster:
clusters:
- cluster:
server: https://akela.cngei.it:6443
proxy-command: ssh -W %h:%p bastion.cngei.it
name: cngei-cluster
- Ora puoi usare kubectl normalmente:
kubectl get nodes
kubectl get pods -A
kubectl get services
Metodo 3: Alias bash/zsh
Aggiungi al tuo ~/.bashrc o ~/.zshrc:
alias k='kubectl --kubeconfig <(ssh -o ProxyJump=bastion.cngei.it akela.cngei.it "sudo cat /etc/kubernetes/admin.conf" 2>/dev/null)'
Poi usa k come alias di kubectl:
k get pods -A
k logs -f pod/nome-pod
Comandi kubectl utili
# Vedere tutti i nodi del cluster
kubectl get nodes
# Vedere tutti i pod in tutti i namespace
kubectl get pods -A
# Vedere i log di un pod
kubectl logs -n <namespace> <nome-pod>
# Eseguire un comando dentro un pod
kubectl exec -n <namespace> -it <nome-pod> -- /bin/sh
# Vedere lo stato dei servizi
kubectl get services -A
# Vedere lo stato degli ingress
kubectl get ingressroutes -A
Sicurezza
- Nessuna password: solo autenticazione tramite chiave SSH
- Accesso tracciato: tutte le connessioni SSH vengono registrate
- Chiavi revocabili: se un amministratore lascia il gruppo, la sua chiave viene rimossa
- Rete isolata: i nodi del cluster non sono raggiungibili direttamente da internet