Ingress in Kubernetes

Ingress in Kubernetes

Kubernetes, una delle piattaforme di orchestrazione di container più popolari al mondo, è progettato per gestire il deployment, il ridimensionamento e la gestione di applicazioni containerizzate. In questo ecosistema, i concetti di rete e routing sono cruciali per permettere alle applicazioni di comunicare tra di loro e con il mondo esterno. Uno degli strumenti fondamentali per gestire il traffico in ingresso verso i servizi all'interno di un cluster Kubernetes è Ingress.

Ingress è una risorsa Kubernetes che fornisce un accesso esterno ai servizi all'interno di un cluster. Permette di definire regole di routing per il traffico HTTP e HTTPS, rendendo possibile esporre più servizi attraverso un singolo endpoint o indirizzo IP, spesso tramite un Load Balancer o un Reverse Proxy.

La risorsa Ingress è utilizzata principalmente per:

  • Esporre servizi web all'esterno del cluster.
  • Definire regole di instradamento per diversi URL o host.
  • Gestire certificati SSL per crittografare il traffico.
  • Implementare il bilanciamento del carico tra i pod del cluster.

In pratica, Ingress funge da interfaccia tra il mondo esterno e il cluster Kubernetes, orchestrando come il traffico esterno raggiunge i vari servizi interni.

Kubernetes utilizza i Service per esporre i pod a livello di rete. Tuttavia, per i servizi che devono essere accessibili dall'esterno del cluster, l'utilizzo di un Service di tipo LoadBalancer potrebbe essere insufficiente o troppo costoso, specialmente su piattaforme cloud. Qui entra in gioco Ingress, che permette un controllo più granulare sul traffico in ingresso.

Un tipico flusso di lavoro per l'uso di Ingress è il seguente:

  1. Creazione di un Ingress Controller: Kubernetes non include un Ingress Controller di default. È necessario installarne uno, come NGINX, Traefik o HAProxy, che si occuperà di tradurre le regole definite nelle risorse Ingress in configurazioni effettive di routing.

  2. Definizione di una risorsa Ingress: Dopo aver installato l'Ingress Controller, si crea una risorsa Ingress, che specifica le regole di instradamento. Questa risorsa contiene i seguenti campi principali:

    • Host: Il nome del dominio o il sottodominio per cui è valido il routing.
    • Path: Il percorso dell'URL da instradare a un servizio specifico.
    • Backend: Il servizio Kubernetes che riceverà il traffico in base all'host e al path.

Ecco un esempio di risorsa Ingress:


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

Questo file YAML crea una regola Ingress che mappa il traffico per example.com verso il servizio my-service sulla porta 80.

Vantaggi dell'uso di Ingress

  1. Flessibilità nel Routing: Con Ingress, puoi definire regole complesse per l'instradamento del traffico HTTP/HTTPS. Puoi specificare percorsi e host diversi per vari servizi, permettendo a più applicazioni di condividere un singolo indirizzo IP.

  2. Riduzione dei Costi: Utilizzando Ingress, puoi evitare di dover creare un Load Balancer separato per ogni servizio. Ciò è particolarmente vantaggioso nelle piattaforme cloud dove i Load Balancer hanno costi aggiuntivi.

  3. Supporto per SSL/TLS: Ingress consente di terminare le connessioni SSL e gestire i certificati direttamente a livello del controller, semplificando la configurazione della sicurezza per i servizi esposti.

  4. Bilanciamento del Carico: Il traffico può essere distribuito in modo equilibrato tra diversi pod dello stesso servizio, migliorando l'efficienza e la scalabilità delle applicazioni.

  5. Risparmio di Risorse: Ingress semplifica l'infrastruttura del networking in Kubernetes, riducendo il numero di risorse di rete che devono essere create e gestite, come Load Balancer o Service NodePort.

Tipologie di Ingress Controller

Esistono diversi tipi di Ingress Controller che possono essere utilizzati in Kubernetes, ognuno con le proprie peculiarità e casi d'uso:

  • NGINX Ingress Controller: Uno dei più popolari, grazie alla flessibilità e alle alte prestazioni. Supporta una vasta gamma di configurazioni, inclusa la terminazione SSL, il bilanciamento del carico e il reindirizzamento di URL.
  • Traefik: Un Ingress Controller leggero, facile da configurare, che include funzionalità di bilanciamento del carico e gestione SSL automatica tramite Let's Encrypt.
  • HAProxy Ingress Controller: Un'ottima scelta per chi ha bisogno di performance elevate e configurazioni avanzate di bilanciamento del carico.

Limiti e Considerazioni sull'Utilizzo di Ingress

Sebbene Ingress sia un potente strumento per la gestione del traffico, ci sono alcune considerazioni da tenere a mente:

  • Complessità: Configurare correttamente Ingress e l’Ingress Controller può risultare complesso, specialmente in ambienti altamente personalizzati.
  • Dipendenza dall'Ingress Controller: La funzionalità di Ingress dipende fortemente dall'Ingress Controller scelto. Differenti controller possono supportare funzionalità differenti, quindi è importante selezionare il controller più adatto ai requisiti dell'applicazione.
  • Scalabilità: Sebbene Ingress sia utile per la maggior parte dei casi d'uso, per sistemi estremamente grandi e complessi potrebbe essere necessario un approccio più specializzato al bilanciamento del carico.

Conclusione

Ingress rappresenta una parte cruciale dell’architettura di rete in Kubernetes, fornendo un modo efficiente e flessibile per gestire il traffico in ingresso verso i servizi interni. Sfruttando le capacità di routing avanzate, l'integrazione con SSL e il bilanciamento del carico, Ingress consente agli sviluppatori di esporre le proprie applicazioni con un controllo preciso, riducendo al contempo i costi e la complessità dell'infrastruttura.

L’adozione di Ingress dipende dal tipo di applicazione e dall’ambiente di produzione, ma per la maggior parte dei progetti Kubernetes, rappresenta un'ottima soluzione per la gestione del traffico HTTP/HTTPS.

Torna su