Kubernetes

Kubernetes Ingress

Kubernetes Ingress
Kubernetes are multe părți mobile. Acest lucru este de așteptat de la orice model destinat calculelor distribuite. Pentru a explora ce ne ajută Kubernetes Ingress să realizăm, să recapitulăm mai întâi câteva detalii relevante despre un cluster tipic Kubernetes:

  1. O aplicație desfășurată pe un cluster Kubernetes rulează ca un pod de colectare.
  2. Pod-urile sunt în esență containere care sunt programate pe mai multe noduri.
  3. Nodurile pot fi servere fizice sau VM-uri oferite de furnizorul dvs. de găzduire. Evident, puteți, de asemenea, Kubernetes pe un server local, dacă doriți.
  4. Fiecare Pod are o adresă IP unică.
  5. Aplicația dvs. este împărțită în mai mulți subcomponenți, adesea denumiți microservicii.
  6. Pentru fiecare microserviciu al aplicației dvs., are un serviciu corespunzător în Kubernetes.
  7. În contextul Kubernetes, a Serviciu expune o colecție de păstăi restului clusterului ca o singură abstracție. Un singur IP virtual.
  8. Acest lucru ajută un serviciu al aplicației dvs. să comunice cu un alt serviciu. Este o abstracție care vă permite să abordați o colecție de poduri, mai degrabă decât să specificați adresa IP a unui pod, de fiecare dată când doriți să vorbiți cu el.
  9. Un serviciu Kubernetes acționează, de asemenea, ca un echilibru de sarcină pentru toate podurile pe care le reprezintă. Traficul este distribuit uniform pe toate nodurile.

Până acum, bine. Fiecare serviciu poate vorbi cu un alt serviciu. Această comunicare este posibilă în întregul cluster Kubernetes

Servicii de expunere

Dacă un copac cade într-o pădure și nimeni nu este în jur să-l audă, scoate un sunet?

Într-o notă similară, dacă aplicația dvs. nu are un scop în afara clusterului Kubernetes, chiar contează dacă clusterul dvs. este bine construit sau nu? Probabil ca nu.

Pentru a vă oferi un exemplu concret, să presupunem că avem o aplicație web clasică compusă dintr-un frontend scris în Nodejs și un backend scris în Python care utilizează baza de date MySQL. Implementați două servicii corespunzătoare pe clusterul dvs. Kubernetes.

Faceți un fișier Docker care specifică cum să împachetați software-ul frontend într-un container și, în mod similar, împachetați backend-ul. Apoi, în clusterul dvs. Kubernetes, veți implementa două servicii care rulează fiecare un set de pod-uri în spatele acestuia. Serviciul web poate vorbi cu clusterul de baze de date și invers.

Cu toate acestea, Kubernetes nu expune niciunul dintre aceste servicii (care sunt punct final HTTP esențial) pentru restul lumii. După cum se menționează în documentele oficiale:

Se presupune că serviciile au IP-uri virtuale direcționabile numai în cadrul rețelei cluster

Acest lucru este perfect rezonabil din punct de vedere al securității, serviciile dvs. pot vorbi între ele, dar clusterul nu va permite entităților externe să vorbească direct cu serviciile. De exemplu, doar frontend-ul dvs. web poate vorbi cu serviciul de baze de date și nimeni altcineva nu poate trimite cereri către serviciul de baze de date.

Problema apare atunci când ne uităm la cazul de utilizare al unui serviciu frontend. Trebuie să fie expus restului publicului, astfel încât utilizatorii finali să poată utiliza aplicația dvs. Expunem astfel de servicii folosind Kubernetes Ingress.

Kubernetes Ingress

Ingress expune rutele HTTP și HTTPS din afara clusterului către serviciile din cluster. Puteți controla regulile de rutare definind resursa Kubernetes Ingress. Dar face mult mai mult decât atât. Expunerea unui singur serviciu poate fi realizată folosind diverse alte alternative, cum ar fi NodePort sau Load Balancers, dar aceste facilități nu au caracteristici suficient de sofisticate pentru o aplicație web modernă.

Funcții precum, expunerea mai multor aplicații pe un singur IP, definirea rutelor etc.

Deci, să înțelegem aceste caracteristici pentru restul articolului:

Serviciu unic de intrare

Aceasta este cea mai simplă versiune de expunere a unui singur serviciu, cum ar fi un frontend web cu un IP (sau un nume de domeniu) și porturi HTTP și HTTPS implicite (i.e, 80 și 443).

Single Fanout

Aceasta este o configurare de intrare care vă permite să permiteți traficul de intrare către un singur IP și să îl direcționați către mai multe servicii.

Se compune din:

Single fanout este cazul în care un singur IP este utilizat pentru mai multe servicii. Serviciile pot fi pe căi diferite în URI ca foo.bar.com / admin poate fi un serviciu pentru administratori și foo.bar.com / home poate fi serviciul care generează pagina de pornire a fiecărui utilizator.

Portul de intrare va fi întotdeauna 80 sau 443, dar portul pe care se execută serviciile (în interiorul clusterului) poate diferi destul de mult.

Acest tip de intrare ne ajută să minimizăm numărul de echilibratoare de încărcare din cluster, deoarece acționează în esență ca unul.

Găzduire virtuală bazată pe nume

Adresele IP publice sunt finite. De asemenea, sunt destul de scumpe. Ideea de găzduire virtuală bazată pe nume este mai veche decât Kubernetes. Esența este că, indicați înregistrările DNS pentru diferite site-uri web, cum ar fi ww1.exemplu.com și ww2.exemplu.com la aceeași adresă IP. Serverul care rulează la acea adresă IP va vedea solicitarea primită și dacă numele gazdei menționat în cerere este pentru ww1.exemplu.com, atunci vă servește acel site web și dacă ww2.exemplu.com este solicitat, apoi acesta este servit.

În contextul Kubernetes, putem rula două servicii care rulează la, să zicem, portul 80 și le expunem pe ambele pe o singură adresă IP folosind o intrare și a portului 80. La punctul de intrare traficul ww1.exemplu.com va fi separat de trafic pentru ww2.exemplu.com. De aici și termenul de găzduire virtuală bazată pe nume.

Concluzie

Ingress în Kubernetes este destul de sofisticat pentru a fi acoperit într-un singur post. Există o varietate de cazuri de utilizare pentru aceasta și o varietate de controlere de intrare care vor adăuga funcționalitatea de intrare în clusterul dvs. Aș recomanda să începeți cu Nginx Ingress Controller.

Pentru detalii și specificații suplimentare, puteți urmări și documentația oficială.

OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...
SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...
Battle for Wesnoth Tutorial
The Battle for Wesnoth is one of the most popular open source strategy games that you can play at this time. Not only has this game been in developmen...