Ci sono diversi modi per concedere agli utenti finali l’accesso ai servizi in un cluster Kubernetes, di fronte alle varie opzioni a disposizione come è meglio scegliere la strada da intraprendere?
In Kubernetes, i tipi di servizio stabiliscono le modalità con cui gli utenti o il traffico esterno possono ottenere i Services che definiscono un gruppo di Pod e come accedervi.
Le principali tipologie sono tre:
- LoadBalancer
- ClusterIP
- NodePort
Esiste anche un quarto modo per controllare il traffico verso i servizi, in realtà, ed è quello di utilizzare Kubernetes Ingress, ecco quindi una panoramica delle differenze tra Kubernetes Ingress e gli altri tipi di servizi.
Kubernetes Ingress
Kubernetes Ingress gestisce anche l’accesso esterno ai servizi, non è quindi un servizio vero e proprio, come gli altri, ma piuttosto un oggetto API che opera diversamente, creando una risorsa Ingress che instrada il traffico sulla base di un insieme di regole. Per fare questo, imposta un bilanciatore di carico esterno che si connette a Ingress, e poi incanala il traffico al servizio, seguendo le regole impostate. Con questo, è possibile instradare più servizi back-end attraverso un indirizzo IP.
Load balancer
Un bilanciatore di carico distribuisce i carichi di lavoro in modo uniforme sui server o, in questo caso, sui cluster Kubernetes. Oltre a collegare gli utenti con un servizio, fornisce il failover, ciò significa che se un server subisce un malfunzionamento, il carico di lavoro viene diretto ad un server di backup, riducendo così l’effetto sugli utenti.
I load balancer si trovano tra i server e Internet e dirigono le richieste degli utenti verso i server disponibili: se la domanda è elevata, possono aggiungere server, se è bassa, possono eliminarne. È però strettamente necessario che ogni servizio abbia il proprio bilanciatore di carico che non può essere condiviso, questo comporta il fatto che, se si hanno molti servizi, diventa necessario avere altrettanti load balancer.
NodePort vs. ClusterIP
Un’altra opzione di rete di Kubernetes è quella di impostare il tipo di servizio come NodePort rendendo possibile sia impostare i propri load balancer per configurare gli ambienti che Kubernetes non supporta completamente, sia anche esporre l’indirizzo IP di uno o più nodi. Questo apre una via al traffico esterno per raggiungere i nodi.
NodePort differisce dal tipo di servizio predefinito di Kubernetes, ClusterIP, che limita l’accesso al servizio solo dall’interno del cluster utilizzando un IP interno al cluster e permette ai pod di comunicare tra loro solo all’interno di un cluster e mai al di fuori di esso.