Kubernetes

Kubernetes Ingress

Kubernetes Ingress
Kubernetes har många rörliga delar. Detta kan förväntas från alla modeller avsedda för distribuerad databehandling. För att utforska vad Kubernetes Ingress hjälper oss att åstadkomma, låt oss sammanfatta några relevanta detaljer om ett typiskt Kubernetes-kluster först:

  1. En applikation som distribueras i ett Kubernetes-kluster körs som en samlingsskiva.
  2. Bälgen är i huvudsak behållare som är schemalagda över flera noder.
  3. Noder kan vara fysiska servrar eller virtuella datorer som erbjuds av din webbhotell. Uppenbarligen kan du också Kubernetes på en lokal server om du så önskar.
  4. Varje Pod har en unik IP-adress.
  5. Din ansökan är uppdelad i många underkomponenter, ofta kallade mikrotjänster.
  6. För varje mikrotjänst i din applikation, har en motsvarande tjänst i Kubernetes.
  7. I samband med Kubernetes, a Service exponerar en samling skida för resten av klustret som en enda abstraktion. En enda virtuell IP.
  8. Detta hjälper en tjänst i din applikation att kommunicera med en annan tjänst. Det är en abstraktion som låter dig adressera en samling pods, snarare än att ange IP-adressen för en pod, varje gång du vill prata med den.
  9. En Kubernetes-tjänst fungerar också som en belastningsutjämnare för alla pods som den representerar. Trafiken fördelas jämnt över alla noder.

Än så länge är allt bra. Varje tjänst kan prata med en annan tjänst. Denna kommunikation är möjlig över hela Kubernetes-klustret

Exponera tjänster

Om ett träd faller i en skog och ingen är i närheten för att höra det, gör det ett ljud?

På samma sätt, om din applikation inte tjänar ett syfte utanför Kubernetes-klustret, spelar det någon roll om ditt kluster är välbyggt eller inte? Antagligen inte.

För att ge dig ett konkret exempel, låt oss säga att vi har en klassisk webbapp bestående av en frontend skriven i Nodejs och en backend skriven i Python som använder MySQL-databas. Du distribuerar två motsvarande tjänster i ditt Kubernetes-kluster.

Du skapar en Dockerfile som anger hur du paketerar frontend-programvaran i en container och på liknande sätt paketerar du din backend. Nästa i ditt Kubernetes-kluster kommer du att distribuera två tjänster som var och en kör en uppsättning pods bakom den. Webbtjänsten kan prata med databaskluster och vice versa.

Kubernetes utsätter dock inte någon av dessa tjänster (som är viktiga HTTP-slutpunkter) för resten av världen. Som anges i de officiella dokumenten:

Tjänster antas ha virtuella IP-adresser som bara kan routas inom klusternätverket

Detta är helt rimligt ur säkerhetssynpunkt, dina tjänster kan prata med varandra, men klustret tillåter inte externa enheter att prata med tjänsterna direkt. Till exempel är det bara din webbgränssnitt som kan prata med databastjänsten, och ingen annan kan ens skicka förfrågningar till databastjänsten.

Problemet uppstår när vi tittar på användningsfallet för en frontend-tjänst. Det måste exponeras för resten av allmänheten så att slutanvändare kan använda din applikation. Vi exponerar sådana tjänster med hjälp av Kubernetes Ingress.

Kubernetes Ingress

Ingress exponerar HTTP- och HTTPS-rutter från utanför klustret till tjänster inom klustret. Du kan styra dirigeringsreglerna genom att definiera Kubernetes Ingress-resurs. Men det gör mycket mer än så. Att exponera en enda tjänst kan uppnås med hjälp av olika andra alternativ som NodePort eller Load Balancers, men dessa faciliteter har inte funktioner som är tillräckligt sofistikerade för en modern webbapp.

Funktioner som att exponera flera appar på en enda IP, definiera rutter etc.

Så låt oss förstå dessa funktioner för den återstående artikeln:

Enstaka ingång

Detta är den enklaste versionen av att exponera en enda tjänst som en webbgränssnitt med en IP (eller ett domännamn) och standard HTTP- och HTTPS-portar (i.e, 80 och 443).

Enkel Fanout

Detta är en ingångsinställning som låter dig tillåta inkommande trafik till en enda IP och dirigera den till flera tjänster.

Den består av:

Single fanout är fallet där en enda IP används för flera tjänster. Tjänsterna kan vara på olika vägar i URI som foo.bar.com / admin kan vara en tjänst för administratörer och foo.bar.com / home kan vara den tjänst som genererar varje användares hemsida.

Ingångsporten kommer alltid att vara 80 eller 443, men porten där tjänsterna körs (inuti klustret) kan skilja sig ganska mycket.

Denna typ av intrång hjälper oss att minimera antalet belastningsbalanserare i klustret, eftersom det i huvudsak fungerar som en.

Namnbaserad virtuell hosting

Offentliga IP-adresser är begränsade. De är också ganska dyra. Idén med namnbaserad virtuell hosting är äldre än Kubernetes. Kärnan i det är att du pekar på DNS-posterna för olika webbplatser som ww1.exempel.com och ww2.exempel.com till samma IP-adress. Servern som körs med den IP-adressen ser den inkommande begäran, och om värdnamnet som nämns i begäran är för ww1.exempel.com då tjänar den webbplatsen åt dig, och om ww2.exempel.com begärs, sedan serveras det.

I Kubernetes-sammanhanget kan vi köra två tjänster som körs på, till exempel, port 80 och exponera dem båda på en enda IP-adress med hjälp av en ingång även i port 80. Vid ingångspunkten trafikerar ww1.exempel.com kommer att separeras från trafiken för ww2.exempel.com. Därav termnamnet baserad virtuell hosting.

Slutsats

Ingress i Kubernetes är ganska sofistikerat för att täckas i en enda post. Det finns en mängd användningsfall för det och en mängd Ingress Controllers som kommer att lägga till Ingress-funktionaliteten i ditt kluster. Jag rekommenderar att du börjar med Nginx Ingress Controller.

För ytterligare detaljer och specifikationer kan du också följa den officiella dokumentationen.

Bästa kommandoradsspel för Linux
Kommandoraden är inte bara din största allierade när du använder Linux, det kan också vara källan till underhållning eftersom du kan använda den för a...
Bästa Gamepad Mapping Apps för Linux
Om du gillar att spela spel på Linux med en gamepad istället för ett typiskt tangentbord och musinmatningssystem, finns det några användbara appar för...
Användbara verktyg för Linux-spelare
Om du gillar att spela spel på Linux är chansen att du kan ha använt appar och verktyg som Wine, Lutris och OBS Studio för att förbättra spelupplevels...