May 9, 2025

Šta je Ingress u Kubernetesu?

 Ingress je objekat koji omogućava spoljašnji HTTP/HTTPS pristup aplikacijama koje rade unutar klastera – preko URL-a i domena.

Ukratko: Ingress = pametan HTTP/HTTPS "ulaz" u tvoj klaster.


🧱 Kako radi?

  • Radi iznad Service-a.

  • Koristi se da route-uje (prosleđuje) HTTP(S) zahteve ka odgovarajućim servisima na osnovu:

    • URL putanje (npr. /app1, /admin)

    • Naziva domena (npr. app.mojsa.it, admin.mojsa.it)

  • Radi preko Ingress kontrolera – softvera koji obrađuje pravila iz Ingress objekta (npr. nginx ingress controller, traefik, HAProxy...)


🧠 Zašto je važan?

  • Bez Ingress-a moraš da koristiš NodePort ili LoadBalancer za svaki servis posebno.

  • Sa Ingress-om možeš da imaš jednu tačku ulaza (npr. jedan domen) i da rutiraš sve unutar klastera elegantno.


📄 Primer YAML fajla:


apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: primer-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: app.mojdomen.com http: paths: - path: / pathType: Prefix backend: service: name: moj-servis port: number: 80

Ovo znači:

  • Svi zahtevi na http://app.mojdomen.com/ biće prosleđeni moj-servis na portu 80.

Šta je Service u Kubernetesu?

 Service (servis) je stalna mrežna apstrakcija koja omogućava pristup Podovima putem fiksne IP adrese i DNS imena, bez obzira na to da li se Podovi menjaju.

Drugim rečima:

Service je "stalna adresa" za pristup aplikaciji koja se pokreće u Podovima, iako se ti Podovi menjaju u pozadini.


🧠 Zašto je to važno?

Kada koristiš Deployment ili ReplicaSet, Kubernetes stalno menja Podove (npr. zbog restarta, skaliranja…). Svaki Pod dobije novu IP adresu, pa ne možeš direktno da se oslanjaš na njih.

Zato koristiš Service kao "fiksni ulaz" koji automatski preusmerava saobraćaj na ispravne Podove.


⛓️ Kako radi?

Service koristi label selector da pronađe Podove:


apiVersion: v1 kind: Service metadata: name: moj-servis spec: selector: app: moja-aplikacija ports: - port: 80 targetPort: 8080 type: ClusterIP

Ovo znači:

  • Pronalazi sve Podove koji imaju label: app=moja-aplikacija

  • Kada neko pristupi ovom servisu na portu 80, saobraćaj se šalje na 8080 unutar Podova

  • ClusterIP znači da je servis dostupan samo unutar klastera


🧭 Tipovi servisa:

TipDostupan gde?Opis
ClusterIPUnutar klasteraPodrazumevani
NodePortSa spolja preko nodovaOtvara port na svakom nodu
LoadBalancerSpolja kroz cloud load balancerKoristi eksterni IP (npr. u AWS, GCP)
ExternalNameDNS alias za eksterni servisNema port forwarding

🗺️ Analogija:

Zamisli da imaš restoran (Podove) koji se stalno seli u različite lokale, ali uvek zadrži isti broj telefona (Service). Kada klijent pozove taj broj, automatski se poveže sa trenutnom lokacijom.

Šta je Pod u Kubernetesu?

Pod je najmanja i najosnovnija jedinica koju Kubernetes može da "pokrene". To je objekat koji predstavlja jedan ili više kontejnera (najčešće jedan), koji dele istu mrežu i sistem fajlova.

Ukratko:

  • Pod = kontejner(i) + mreža + skladište + metadata

  • Kontejneri unutar jednog poda:

    • Dele IP adresu i portove

    • Dele volume-ove (fajl sistem)

    • Pokreću se zajedno na istom Node-u


Zašto postoji Pod ako koristi kontejnere?

Kubernetes ne upravlja direktno kontejnerima (npr. Docker), već koristi Podove da ih "spakuje" zajedno. To omogućava napredne scenarije, kao što su:

  • Glavni kontejner + pomoćni (sidecar) kontejner (npr. za logovanje, proxy, backup, itd.)

  • Lakše restartovanje, skaliranje i održavanje


Vizuelna analogija:

Zamisli Pod kao sobu, a kontejnere kao ljude u toj sobi:

  • Ljudi (kontejneri) mogu međusobno da pričaju bez odlaska napolje (mreža)

  • Imaju zajednički sto (fajl sistem) gde svi mogu da ostavljaju stvari

  • Ako se seli soba, svi idu zajedno

Primer YAML fajla za Pod:


apiVersion: v1 kind: Pod metadata: name: moj-pod spec: containers: - name: moj-kontejner image: nginx ports: - containerPort: 80

Ovo definiše Pod koji pokreće jedan Nginx kontejner.