Passa al contenuto principale

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​

  1. Genera una coppia di chiavi SSH (se non ne hai già una):

    ssh-keygen -t ed25519 -C "tuo.nome@cngei.it"
  2. Condividi la chiave pubblica (~/.ssh/id_ed25519.pub) con un amministratore

  3. 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:

  1. Si connette al bastion
  2. Dal bastion salta su akela
  3. Legge il file di configurazione admin.conf
  4. Usa quella configurazione come kubeconfig locale

Metodo 2: Configurazione permanente​

Per usare kubectl in modo più comodo, configura il tuo ~/.kube/config:

  1. Copia il kubeconfig dal control plane:
ssh -o ProxyJump=bastion.cngei.it akela.cngei.it 'sudo cat /etc/kubernetes/admin.conf' > ~/.kube/config
  1. Modifica il file ~/.kube/config e aggiungi proxyCommand al cluster:
clusters:
- cluster:
server: https://akela.cngei.it:6443
proxy-command: ssh -W %h:%p bastion.cngei.it
name: cngei-cluster
  1. 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