Exposing Services in Kubernetes
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Postoje različiti načini za izlaganje usluga u Kubernetesu tako da i interni i eksterni krajnji tačke mogu da im pristupe. Ova Kubernetes konfiguracija je prilično kritična jer administrator može dati pristup napadačima uslugama kojima ne bi trebali imati pristup.
Pre nego što počnete da enumerišete načine na koje K8s nudi izlaganje usluga javnosti, znajte da ako možete da navedete namespace-ove, usluge i ingress-e, možete pronaći sve što je izloženo javnosti sa:
A ClusterIP usluga je podrazumevana Kubernetes usluga. Ona vam pruža uslugu unutar vašeg klastera kojoj mogu pristupiti druge aplikacije unutar vašeg klastera. Nema spoljnog pristupa.
Međutim, ovo se može pristupiti koristeći Kubernetes Proxy:
Sada možete navigirati kroz Kubernetes API da biste pristupili uslugama koristeći ovu shemu:
http://localhost:8080/api/v1/proxy/namespaces/<NAMESPACE>/services/<SERVICE-NAME>:<PORT-NAME>/
Na primer, možete koristiti sledeći URL:
http://localhost:8080/api/v1/proxy/namespaces/default/services/my-internal-service:http/
da biste pristupili ovoj usluzi:
Ova metoda zahteva da pokrenete kubectl
kao autentifikovani korisnik.
Nabrojte sve ClusterIP-ove:
Kada se koristi NodePort, određeni port je dostupan na svim čvorovima (koji predstavljaju virtuelne mašine). Saobraćaj usmeren na ovaj specifičan port se sistematski usmerava ka servisu. Obično, ova metoda se ne preporučuje zbog svojih nedostataka.
Lista svih NodePort-ova:
Primer specifikacije NodePort:
Ako ne navedete nodePort u yaml-u (to je port koji će biti otvoren), koristiće se port u opsegu 30000–32767.
Izlaže Servis spolja koristeći load balancer provajdera u oblaku. Na GKE, ovo će pokrenuti Network Load Balancer koji će vam dati jedinstvenu IP adresu koja će preusmeriti sav saobraćaj na vaš servis. U AWS-u će pokrenuti Load Balancer.
Morate plaćati za LoadBalancer po izloženom servisu, što može biti skupo.
Lista svih LoadBalancera:
Spoljni IP-ovi su izloženi uslugama tipa Load Balancers i obično se koriste kada se koristi spoljni Cloud Provider Load Balancer.
Da biste ih pronašli, proverite load balancere sa vrednostima u polju EXTERNAL-IP
.
Saobraćaj koji ulazi u klaster sa spoljnim IP-om (kao odredišni IP), na portu usluge, biće usmeren na jedan od krajnjih tačaka usluge. externalIPs
nisu upravljani od strane Kubernetesa i odgovornost su administratora klastera.
U specifikaciji usluge, externalIPs
se mogu navesti zajedno sa bilo kojim od ServiceTypes
. U sledećem primeru, "my-service
" može biti pristupljeno od strane klijenata na "80.11.12.10:80
" (externalIP:port
)
Iz dokumenata: Servisi tipa ExternalName mapiraju servis na DNS ime, a ne na tipičan selektor kao što su my-service
ili cassandra
. Ove servise definišete pomoću parametra spec.externalName
.
Ova definicija servisa, na primer, mapira my-service
servis u prod
imenskom prostoru na my.database.example.com
:
Kada se traži host my-service.prod.svc.cluster.local
, klasterska DNS usluga vraća CNAME
zapis sa vrednošću my.database.example.com
. Pristup my-service
funkcioniše na isti način kao i druge usluge, ali sa ključnom razlikom da preusmeravanje se dešava na DNS nivou umesto putem proksiranja ili prosleđivanja.
Nabrojte sve ExternalNames:
Za razliku od svih gore navedenih primera, Ingress NIJE tip usluge. Umesto toga, on se nalazi ispred više usluga i deluje kao “pametni ruter” ili ulazna tačka u vaš klaster.
Možete raditi mnogo različitih stvari sa Ingress-om, i postoje različite vrste Ingress kontrolera koji imaju različite mogućnosti.
Podrazumevani GKE ingress kontroler će pokrenuti HTTP(S) Load Balancer za vas. Ovo će vam omogućiti da radite i rutiranje zasnovano na putanjama i rutiranje zasnovano na poddomenama ka pozadinskim uslugama. Na primer, možete poslati sve na foo.yourdomain.com ka foo usluzi, i sve ispod putanje yourdomain.com/bar/ ka bar usluzi.
YAML za Ingress objekat na GKE sa L7 HTTP Load Balancer može izgledati ovako:
Nabrojte sve ulaze:
Iako je u ovom slučaju bolje dobiti informacije o svakom pojedinačno kako bi se lakše pročitali:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)