{"id":31173,"date":"2019-10-31T21:39:53","date_gmt":"2019-10-31T18:39:53","guid":{"rendered":"https:\/\/prohoster.info\/blog\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes\/"},"modified":"2019-10-31T21:39:53","modified_gmt":"2019-10-31T18:39:53","slug":"obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes","title":{"rendered":"Panoramica e confronto dei controller Ingress per Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Panoramica e confronto dei controller Ingress per Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/3e6d3882a8f5a96a257fab4daaa230f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuando si avvia un cluster Kubernetes per un'applicazione specifica, \u00e8 importante comprendere quali sono i requisiti che questa risorsa impone all'applicazione stessa, al business e agli sviluppatori. Con queste informazioni, \u00e8 possibile procedere a una decisione architettonica e, in particolare, alla scelta di un controller Ingress specifico, di cui oggi ci sono gi\u00e0 molte opzioni. Per fornire una panoramica di base delle opzioni disponibili senza dover esaminare numerosi articoli\/documentazione, abbiamo preparato questa panoramica, includendo i principali controller Ingress (pronti per la produzione).<\/p>\n<p>Ci auguriamo che possa aiutare i colleghi nella scelta della soluzione architettonica - almeno sar\u00e0 un punto di partenza per ottenere informazioni pi\u00f9 dettagliate ed esperimenti pratici. Inizialmente, abbiamo esaminato altri materiali simili online e, stranamente, non abbiamo trovato alcuna panoramica completa e, soprattutto, strutturata. Quindi riempiamo questo vuoto!<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Criteri<\/h2>\n<p>\nPer poter fare un confronto e ottenere risultati utili, \u00e8 necessario comprendere non solo il contesto, ma anche avere un elenco specifico di criteri che definir\u00e0 la direzione della ricerca. Senza pretendere di analizzare tutti i possibili casi d'uso di Ingress\/Kubernetes, abbiamo cercato di evidenziare i requisiti pi\u00f9 generali per i controller - preparatevi, perch\u00e9 ogni specificit\u00e0 e dettaglio dovr\u00e0 comunque essere studiato separatamente.<\/p>\n<p>Ma cominciamo con le caratteristiche che sono diventate cos\u00ec familiari da essere implementate in tutte le soluzioni e non vengono esaminate:<\/p>\n<ul>\n<li> rilevamento dinamico dei servizi (service discovery);<\/li>\n<li> terminazione SSL;<\/li>\n<li> lavorare con i websocket.<\/li>\n<\/ul>\n<p>\nOra passiamo ai punti di confronto:<\/p>\n<h3>Protocollo supportati<\/h3>\n<p>\nUno dei criteri fondamentali per la scelta. Il tuo software potrebbe non funzionare secondo il protocollo HTTP standard o potrebbero essere necessari pi\u00f9 protocolli contemporaneamente. Se il tuo caso \u00e8 non standard, assicurati di considerare questo fattore, in modo da non dover riconfigurare il cluster in seguito. Per tutti i controller, l'elenco dei protocolli supportati varia.<\/p>\n<h3>Software di base<\/h3>\n<p>\nCi sono diverse applicazioni su cui si basa il controller. Le pi\u00f9 popolari sono nginx, traefik, haproxy, envoy. In generale, ci\u00f2 potrebbe non influenzare troppo il modo in cui viene ricevuto e trasmesso il traffico, ma \u00e8 sempre utile conoscere i potenziali dettagli e le peculiarit\u00e0 di ci\u00f2 che c'\u00e8 'sotto il cofano'.<\/p>\n<h3>Routing del traffico<\/h3>\n<p>\nSu cosa si basa la decisione di indirizzare il traffico verso un particolare servizio? Di solito si tratta di host e path, ma ci possono essere anche opzioni aggiuntive.<\/p>\n<h3>Namespace all'interno del cluster<\/h3>\n<p>\nLo spazio dei nomi (namespace) \u00e8 la possibilit\u00e0 di suddividere logicamente le risorse in Kubernetes (ad esempio, in stage, production, ecc.). Ci sono ingress controller che devono essere installati separatamente in ogni namespace (e allora possono indirizzare il traffico <i>solo<\/i> nei pod di questo spazio). Ce ne sono alcuni (e sono la maggior parte) che operano a livello globale su tutto il cluster: il traffico viene diretto a qualsiasi pod del cluster, indipendentemente dallo spazio dei nomi.<\/p>\n<h3>Campioni per gli upstream<\/h3>\n<p>\nIn che modo viene garantito l'instradamento del traffico verso istanze sane dell'applicazione, servizi? Ci sono opzioni con controlli attivi e passivi, tentativi di ripetizione (retries), circuit breaker <i>(per maggiori dettagli vedere, ad esempio, nel <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/438426\/\">articolo su Istio<\/a><\/noindex>)<\/i>, implementazioni personalizzate dei controlli di stato (custom health checks) ecc. \u00c8 un parametro molto importante se hai elevate richieste di disponibilit\u00e0 e un'uscita tempestiva dalla bilanciatura dei servizi falliti.<\/p>\n<h3>Algoritmi di bilanciamento<\/h3>\n<p>\nCi sono molte opzioni: dai tradizionali <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Round-robin_DNS\">round-robin<\/a><\/noindex> fino a esotiche come <noindex><a rel=\"nofollow\" href=\"http:\/\/www.loadbalancer.org\/blog\/load-balancing-windows-terminal-server-haproxy-and-rdp-cookies\/\">rdp-cookie<\/a><\/noindex>, oltre a possibilit\u00e0 specifiche come <noindex><a rel=\"nofollow\" href=\"https:\/\/access.redhat.com\/solutions\/900933\">sticky sessions<\/a><\/noindex>.<\/p>\n<h3>Autenticazione<\/h3>\n<p>\nQuali schemi di autorizzazione supporta il controller? Basic, digest, oauth, external-auth \u2014 penso che queste opzioni ti siano familiari. \u00c8 un criterio importante se vengono utilizzati molti ambienti per sviluppatori (e\/o semplicemente chiusi), l'accesso ai quali avviene tramite Ingress. <\/p>\n<h3>Distribuzione del traffico<\/h3>\n<p>\nIl controller supporta meccanismi comunemente utilizzati per la distribuzione del traffico, come i rilasci canary, A\/B testing e il mirroring del traffico (mirroring\/shadowing)? Questo \u00e8 davvero un tema delicato per le applicazioni che richiedono una gestione attenta e precisa del traffico per testare in produzione, risolvere problemi di prodotto non in contesto reale (o con perdite minime), analizzare il traffico, ecc.<\/p>\n<h3>Abbonamento a pagamento<\/h3>\n<p>\nEsiste una versione a pagamento del controller con funzionalit\u00e0 avanzate e\/o supporto tecnico?<\/p>\n<h3>Interfaccia grafica (Web UI)<\/h3>\n<p>\nEsiste un'interfaccia grafica per la gestione della configurazione del controller? Principalmente per la \"comodit\u00e0\" e\/o per coloro che devono apportare modifiche alla configurazione di Ingress, ma lavorare con template \"grezzi\" \u00e8 scomodo. Potrebbe essere utile nel caso in cui gli sviluppatori vogliano condurre esperimenti sul traffico in volo.<\/p>\n<h3>Validazione JWT<\/h3>\n<p>\nVerifica integrata dei token web JSON per l'autenticazione e la validazione dell'utente presso l'applicazione finale.<\/p>\n<h3>Opzioni di personalizzazione del config<\/h3>\n<p>\nEstendibilit\u00e0 dei template in termini di meccanismi che consentono di aggiungere direttive, flag, ecc. agli standard template di configurazione.<\/p>\n<h3>Meccanismi di base per la protezione da attacchi DDoS<\/h3>\n<p>\nAlgoritmi semplici di rate limit o varianti pi\u00f9 complesse di filtraggio del traffico basate su indirizzi, liste bianche, paesi, ecc.<\/p>\n<h3>Tracciamento delle richieste<\/h3>\n<p>\nCapacit\u00e0 di monitorare, tracciare e debugare le richieste dagli Ingress a servizi\/pod specifici e, idealmente, anche tra i servizi\/pod.<\/p>\n<h3>WAF<\/h3>\n<p>\nSupporto <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Web_application_firewall\">firewall applicativo<\/a><\/noindex>.<\/p>\n<h2>Controller Ingress<\/h2>\n<p>\nL'elenco dei controller \u00e8 stato compilato sulla base <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/ingress-controllers\/#additional-controllers\">della documentazione ufficiale di Kubernetes<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.google.com\/spreadsheets\/d\/16bxRgpO1H_Bn-5xVZ1WrR_I-0A-GOI6egmhvqqLMOmg\/edit\">di questa tabella<\/a><\/noindex>. Alcuni di essi sono stati esclusi dalla revisione a causa della loro specificit\u00e0 o bassa diffusione (stadio di sviluppo precoce). Gli altri sono trattati di seguito. Iniziamo con una descrizione generale delle soluzioni e proseguiamo con una tabella riepilogativa.<\/p>\n<h3>Ingress di Kubernetes<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/ingress-nginx\">github.com\/kubernetes\/ingress-nginx<\/a><\/noindex><\/i><br \/>\n<i>Licenza: Apache 2.0<\/i><\/p>\n<p>Questo \u00e8 un controller ufficiale per Kubernetes sviluppato dalla comunit\u00e0. Come suggerisce il nome, \u00e8 basato su nginx ed \u00e8 arricchito con vari plugin Lua utilizzati per implementare funzionalit\u00e0 aggiuntive. Grazie alla popolarit\u00e0 di nginx e alle modifiche minime applicate ad esso quando utilizzato come controller, questa opzione pu\u00f2 risultare la pi\u00f9 semplice e comprensibile da configurare per un ingegnere medio (con esperienza nel web).<\/p>\n<h3>Ingress di NGINX Inc<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/kubernetes-ingress\">github.com\/nginxinc\/kubernetes-ingress<\/a><\/noindex><\/i><br \/>\n<i>Licenza: Apache 2.0<\/i><\/p>\n<p>Prodotto ufficiale degli sviluppatori di nginx. Ha una versione a pagamento, basata su <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/products\/nginx\/\">NGINX Plus<\/a><\/noindex>. L'idea principale \u00e8 un alto livello di stabilit\u00e0, compatibilit\u00e0 retroattiva costante, assenza di moduli estranei e una velocit\u00e0 dichiaratamente aumentata (rispetto al controller ufficiale), raggiunta grazie all'abbandono di Lua. <\/p>\n<p>La versione gratuita \u00e8 sostanzialmente ridotta, anche rispetto al controller ufficiale (a causa dell'assenza dei suddetti moduli Lua). La versione a pagamento ha un funzionalit\u00e0 aggiuntiva abbastanza ampia: metriche in tempo reale, validazione JWT, controlli attivi e altro ancora. Un'importante vantaggio rispetto a NGINX Ingress \u00e8 il supporto completo per il traffico TCP\/UDP (anche nella versione community!). Contro \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/kubernetes-ingress\/issues\/464\">assenza<\/a><\/noindex> di funzionalit\u00e0 per la distribuzione del traffico, che, tuttavia, \"ha la massima priorit\u00e0 per gli sviluppatori\", ma richiede tempo per l'implementazione.<\/p>\n<h3>Kong Ingress<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Kong\/kubernetes-ingress-controller\">github.com\/Kong\/kubernetes-ingress-controller<\/a><\/noindex><\/i><br \/>\n<i>Licenza: Apache 2.0<\/i><\/p>\n<p>Prodotto sviluppato da Kong Inc. in due varianti: commerciale e gratuita. Basato su nginx, le cui possibilit\u00e0 sono ampliate da un gran numero di moduli Lua.<\/p>\n<p>Inizialmente era orientato alla gestione e al routing delle richieste API, ossia come API Gateway, ma attualmente \u00e8 diventato un vero e proprio controller Ingress. I principali vantaggi: numerosi moduli aggiuntivi (inclusi quelli di sviluppatori di terze parti) che sono facili da installare e configurare e attraverso i quali si realizzano un ampio spettro di funzionalit\u00e0 aggiuntive. Tuttavia, le funzioni integrate gi\u00e0 offrono molte possibilit\u00e0. La configurazione del funzionamento avviene tramite risorse CRD.<\/p>\n<p>Una caratteristica importante del prodotto \u00e8 che il funzionamento all'interno di un singolo contesto (invece di cross-namespaced) \u00e8 un tema controverso: per alcuni sembra un difetto (bisogna creare entit\u00e0 per ogni contesto), mentre per altri \u00e8 una funzionalit\u00e0 (maggiore livello di isolamento, poich\u00e9 se un controller si rompe, il problema \u00e8 limitato a un solo contesto).<i>un<\/i>i\u00f9 alto livello di isolamento, poich\u00e9 se un controller si guasta, il problema \u00e8 limitato a un solo contesto).<\/p>\n<h3>Traefik<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containous\/traefik\">github.com\/containous\/traefik<\/a><\/noindex><\/i><br \/>\n<i>Licenza: MIT<\/i><\/p>\n<p>Un proxy originariamente progettato per gestire il routing delle richieste per microservizi e il loro ambiente dinamico. Da qui molte funzionalit\u00e0 utili: aggiornamento della configurazione senza riavvii, supporto per un gran numero di metodi di bilanciamento, interfaccia web, passaggio di metriche, supporto per vari protocolli, REST API, rilasci canary e molto altro. Un aspetto piacevole \u00e8 anche il supporto per i certificati Let's Encrypt out of the box. Lo svantaggio \u00e8 che, per garantire l'alta disponibilit\u00e0 (HA), il controller richiede l'installazione e la connessione di un proprio storage KV.<\/p>\n<h3>HAProxy<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jcmoraisjr\/haproxy-ingress\">github.com\/jcmoraisjr\/haproxy-ingress<\/a><\/noindex><\/i><br \/>\n<i>Licenza: Apache 2.0<\/i><\/p>\n<p>HAProxy \u00e8 noto da tempo come proxy e bilanciatore di traffico. All'interno di un cluster Kubernetes, offre un 'soft' aggiornamento della configurazione (senza perdita di traffico), discovery dei servizi basata su DNS, configurazione dinamica tramite API. Pu\u00f2 risultare interessante la completa personalizzazione del template delle configurazioni tramite la sostituzione di CM, cos\u00ec come l'utilizzo delle funzioni della libreria Sprig. In generale, la principale attenzione della soluzione \u00e8 rivolta all'alta velocit\u00e0, alla sua ottimizzazione e all'efficienza delle risorse consumate. Il vantaggio del controller \u00e8 il supporto per un numero record di diversi metodi di bilanciamento.<\/p>\n<h3>Voyager<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appscode\/voyager\">github.com\/appscode\/voyager<\/a><\/noindex><\/i><br \/>\n<i>Licenza: Apache 2.0<\/i><\/p>\n<p>Un controller basato su HAproxy, che si posiziona come una soluzione universale, supportando ampie funzionalit\u00e0 su un gran numero di fornitori. Offre la possibilit\u00e0 di bilanciare il traffico su L7 e L4, e il bilanciamento del traffico TCP L4 pu\u00f2 essere considerato una delle caratteristiche chiave della soluzione.<\/p>\n<h3>Contour<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/heptio\/contour\">github.com\/heptio\/contour<\/a><\/noindex><\/i><br \/>\n<i>Licenza: Apache 2.0<\/i><\/p>\n<p>Alla base di questa soluzione non \u00e8 solo Envoy: \u00e8 stato sviluppato <i>congiuntamente<\/i> con gli autori di questo popolare proxy. Una caratteristica importante \u00e8 la possibilit\u00e0 di separare la gestione delle risorse Ingress tramite risorse CRD IngressRoute. Per le organizzazioni con molti team di sviluppo che utilizzano un unico cluster, questo aiuta a massimizzare la sicurezza nella gestione del traffico nei contorni adiacenti e a proteggerli dagli errori durante la modifica delle risorse Ingress.<\/p>\n<p>\u00c8 inoltre disponibile un insieme ampliato di metodi di bilanciamento (ci sono mirroring delle richieste, ripetizioni automatiche, limitazione della frequenza delle richieste e molto altro), monitoraggio dettagliato del flusso di traffico e dei guasti. Potrebbe essere un svantaggio significativo per alcuni l'assenza di supporto per le sessioni sticky (anche se i lavori <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/heptio\/contour\/issues\/361\">sono gi\u00e0 in corso<\/a><\/noindex>).<\/p>\n<h3>Istio Ingress<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/tasks\/traffic-management\/ingress\/\">istio.io\/docs\/tasks\/traffic-management\/ingress<\/a><\/noindex><\/i><br \/>\n<i>Licenza: Apache 2.0<\/i><\/p>\n<p>Una soluzione completa di service mesh, che non \u00e8 solo un controller Ingress che gestisce il traffico in entrata dall'esterno, ma controlla anche tutto il traffico all'interno del cluster. \u201cSotto il cofano\u201d, come sidecar proxy per ogni servizio, viene utilizzato Envoy. In sostanza, \u00e8 un grande combinato che \"pu\u00f2 fare tutto\", e la sua idea principale \u00e8 la massima gestibilit\u00e0, scalabilit\u00e0, sicurezza e trasparenza. Con esso puoi configurare dettagliatamente la gestione del traffico, l'autorizzazione dell'accesso tra i servizi, il bilanciamento, il monitoraggio, i rilasci canary e molto altro. Maggiori informazioni su Istio possono essere trovate in una serie di articoli \"<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/438426\/\">Ritorna ai microservizi con Istio<\/a><\/noindex>\u00bb.<\/p>\n<h3>Ambassador<\/h3>\n<p>\n<i>Sito: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/datawire\/ambassador\">github.com\/datawire\/ambassador<\/a><\/noindex><\/i><br \/>\n<i>Licenza: Apache 2.0<\/i><\/p>\n<p>Un'altra soluzione basata su Envoy. Ha versioni gratuita e commerciale. Si posiziona come \"completamente nativa per Kubernetes\", il che porta vantaggi corrispondenti (integrazione stretta con metodi ed entit\u00e0 del cluster K8s).<\/p>\n<h2>Tabella comparativa<\/h2>\n<p>\nDunque, il culmine dell'articolo \u00e8 questa enorme tabella:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ss\/wh\/lj\/sswhljo-rjkms7nadtyewqkxrdi.png\"><img decoding=\"async\" alt=\"Panoramica e confronto dei controller Ingress per Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/3a6c552df6b8b7b6a88517046fa7a275.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>\u00c8 cliccabile per consentire una visualizzazione pi\u00f9 dettagliata ed \u00e8 disponibile anche in formato <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1xjff2AMS6QXSdh8E8ay_uNMoUa2OLIanCallvkDvAy0\/edit#gid=0\">Google Sheets<\/a><\/noindex>.<\/p>\n<h2>Riepiloghiamo<\/h2>\n<p>\nL'obiettivo dell'articolo \u00e8 fornire una comprensione pi\u00f9 completa (sebbene non esaustiva!) di quale scelta fare nel vostro caso specifico. Come spesso accade, ogni controller ha i suoi punti di forza e di debolezza...<\/p>\n<p>L'Ingress classico di Kubernetes \u00e8 apprezzato per la sua disponibilit\u00e0 e affidabilit\u00e0, con funzioni abbastanza ricche: in generale, dovrebbe essere \"sufficiente per la maggior parte delle esigenze\". Tuttavia, se ci sono requisiti elevati per stabilit\u00e0, funzionalit\u00e0 e sviluppo, \u00e8 opportuno considerare l'Ingress con NGINX Plus e abbonamento a pagamento. Kong dispone di un ampio set di plugin (e, di conseguenza, delle funzionalit\u00e0 che essi offrono), e nella versione a pagamento ce ne sono addirittura di pi\u00f9. Ha elevate capacit\u00e0 come API Gateway, configurazione dinamica basata su risorse CRD e servizi di base di Kubernetes.<\/p>\n<p>Per esigenze elevate di bilanciamento e metodi di autorizzazione, prendi in considerazione Traefik e HAProxy. Questi sono progetti open source, collaudati nel tempo, molto stabili e in costante sviluppo. Contour \u00e8 apparso ormai da un paio d'anni, ma appare ancora troppo giovane e ha solo funzionalit\u00e0 di base aggiunte sopra Envoy. Se ci sono requisiti per la presenza\/integrazione di WAF davanti all'applicazione, \u00e8 opportuno considerare lo stesso Ingress di Kubernetes o HAProxy.<\/p>\n<p>I prodotti con le funzionalit\u00e0 pi\u00f9 ricche sono quelli costruiti su base Envoy, in particolare Istio. Si presenta come una soluzione complessa, che \"pu\u00f2 fare tutto\", il che, purtroppo, significa anche una soglia di entrata significativamente pi\u00f9 alta in termini di configurazione\/implementazione\/amministrazione, rispetto alle altre soluzioni.<\/p>\n<p>Abbiamo scelto come controller standard e continuiamo ad utilizzare l'Ingress di Kubernetes, che copre l'80-90% delle esigenze. \u00c8 abbastanza affidabile, facile da configurare e da espandere. In generale, in assenza di requisiti specifici, dovrebbe adattarsi alla maggior parte dei cluster\/applicazioni. Tra i prodotti altrettanto versatili e relativamente semplici, si possono raccomandare Traefik e HAProxy.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLeggi anche nel nostro blog:<\/p>\n<ul>\n<li> \u00abTornare ai microservizi con Istio\u00bb: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/438426\/\">parte 1 (introduzione alle funzionalit\u00e0 principali)<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440378\/\">parte 2 (routing, gestione del traffico)<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/443668\/\">parte 3 (autenticazione e autorizzazione)<\/a><\/noindex>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445596\/\">Kubernetes tips &amp; tricks: pagine di errore personalizzate in NGINX Ingress<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/427745\/\">Kubernetes tips &amp; tricks: accesso ai dev-environment<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/447180\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0443 \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0431\u0438\u0437\u043d\u0435\u0441 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438. \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a \u0432\u044b\u0431\u043e\u0440\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043a\u043e\u0438\u0445 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23140,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31173","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0434\u043b\u044f.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 Ingress \u0434\u043b\u044f Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0434\u043b\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:39:53+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:39:53+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Panoramica e confronto dei controller Ingress per Kubernetes | ProHoster","description":"Durante l'avvio del cluster Kubernetes per.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 Ingress \u0434\u043b\u044f Kubernetes | ProHoster","og:description":"\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0434\u043b\u044f.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:39:53+00:00","article:modified_time":"2019-10-31T18:39:53+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31173","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 04:53:04","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:21:32","updated":"2026-01-21 04:53:04","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/31173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=31173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/31173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/23140"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=31173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=31173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=31173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}