Natrag na blog

Kako otkloniti poteškoće i pregledati Kubernetes umrežavanje

Kako otkloniti poteškoće i pregledati Kubernetes umrežavanje

Kubernetes je alat otvorenog koda koji je ključan u orkestraciji kontejnera. Kubernetes pomaže u orkestraciji i upravljanju klasterima u velikom opsegu u različitim oblačnim okruženjima ili čak na lokalnim poslužiteljima. Klaster je skup domaćina namijenjenih pokretanju kontejneriziranih aplikacija i usluga. Klasteru su za rad potrebna najmanje dva čvora – jedan glavni čvor i jedan radni čvor. Svoju Kubernetes infrastrukturu možete skalirati dodavanjem više radnih čvorova. Glavni čvor i njegovi radni čvorovi moraju moći komunicirati putem mreže kako bi infrastruktura radila. Za pregled najvažnijih značajki Kubernetesa, pratite naš vodič o Upoznavanju s Kubernetesom.

U ovom vodiču pokazat ćemo vam nekoliko alata i tehnika koji pomažu u pregledu i rješavanju problema s Kubernetes umrežavanjem.

Preduvjeti

  • Također biste trebali imati kubectl instaliran lokalno. Ovisno o vašem lokalnom okruženju, pratite službenu dokumentaciju o instaliranju Kubernetes alata. kubectl bi trebao biti konfiguriran za povezivanje s vašim klasterom. To ćemo detaljnije objasniti u odjeljku u nastavku.

Pokrenut ćemo nekoliko naredbi lokalno i na Kubernetes čvoru. Počnimo!

Konfiguriranje lokalnog kubectl-a za povezivanje s udaljenim Kubernetes klasterom

Počnimo s instalacijom kubectl. Naše lokalno okruženje pokreće Ubuntu, pratite ovu poveznicu ako koristite drugo lokalno okruženje. Za instalaciju kubectl alata na lokalnom okruženju Ubuntu/Debian pomoću upravitelja paketa apt, pokrenite sljedeće naredbe za ažuriranje apt repozitorija i instalaciju potrebnih paketa:

Zatim pokrenite sljedeću naredbu za preuzimanje Google cloud javnog ključa za potpisivanje:

Zatim dodajte Kubernetes apt repozitorij:

Nakon toga, ažurirajte apt indeks i instalirajte kubectl pomoću sljedeće naredbe:

Zatim provjerite je li kubectl instaliran provjerom verzije pomoću sljedeće naredbe:

Evo izlaza ako ste upravo instalirali kubectl lokalno:

kubectl version

Na gornjoj snimci zaslona, kubectl se pokušava povezati s lokalnim Kubernetes klasterom. Međutim, to ne uspijeva jer još nemamo pokrenut Kubernetes klaster na našem lokalnom računalu.

Za povezivanje s udaljenim Kubernetes klasterom, najprije ćete preuzeti Kubernetes vjerodajnice s udaljenog klastera. Evo naredbe za kopiranje vjerodajnica s glavnog čvora:

Zamijenite istaknute dijelove svojim ssh korisničkim imenom i javnom IP adresom glavnog čvora. Nakon što preuzimanje vjerodajnica završi, kopirajte vjerodajnice u svoj matični direktorij:

To je sve. Vaš lokalni kubectl bi se trebao moći povezati i izdavati naredbe na vašem udaljenom Kubernetes klasteru. Kako biste potvrdili da je vaš lokalni kubectl povezan s udaljenim klasterom, ponovno provjerite naredbom za verziju:

Evo izlaza koji prikazuje uspješno povezivanje:

kubectl version json

Po želji možete izvršiti get nodes naredbu na sljedeći način:

kubectl get nodes

Dohvaćanje Cluster IP adrese Pod-a

Cluster IP adresu Pod-a možete dobiti pokretanjem kubectl get pod naredbe na vašem lokalnom računalu. Da biste ispisali više informacija, kao što su čvor koji udomljuje pod i cluster IP adresa poda, dodajte zastavicu -o wide naredbi:

Evo izlaza iz našeg Kubernetes klastera. U preduvjetnom vodiču napravili smo implementaciju Nginx web poslužitelja, kao što možete vidjeti:

kubectl get pod -o wide

Stupac IP prikazuje internu IP adresu pojedinačnih podova. Ako se pod koji tražite ne pojavljuje na popisu, možda se nalazite u drugom prostoru imena (namespace). Možete izdati sljedeću naredbu za ispis podova u svim namespaces:

Dohvaćanje IP adrese usluge (Service)

Također možete dobiti IP adresu usluge (Service) na vašem klasteru. Dodavanjem --all-namespaces zastavice, dobivate sve usluge koje se izvode na klasteru:

Izlaz iz gornje naredbe je sljedeći. IP adresa usluge nalazi se u stupcu cluster-ip stupcu:

kubectl get svc

Dohvaćanje i pristup mrežnim prostorima imena (Network Namespaces) Pod-a

Svakom Kubernetes podu dodijeljen je mrežni prostor imena (network namespace). Mrežni prostori imena, koji se nazivaju i netns, izvorne su mrežne biblioteke u Linuxu koje pružaju izolaciju između mrežnih uređaja.

Da biste provjerili DNS razlučivanje ili opću mrežnu povezivost, možete pokrenuti naredbe unutar mrežnog prostora imena poda. Da biste to postigli, započnite traženjem ID-a procesa (PID) jednog od spremnika u podu. To možete lako učiniti u Docker koristeći naredbe specifične za Docker. Prva naredba ispisuje spremnike koji se izvode na čvoru. Prijavite se na jedan od svojih radnih čvorova (worker nodes) i pokrenite sljedeću naredbu:

docker ps

U izlazu nas zanima stupac s ID-om spremnika (container ID) ili nazivima (Names). Primijetite Nginx spremnik koji smo implementirali u preduvjetnom vodiču Kako instalirati i koristiti Kubernetes na Ubuntu 20.04.

Zatim kopirajte ID ili naziv spremnika jer ćemo ga koristiti u sljedećoj naredbi za pronalaženje ID-a procesa:

Zamijenite istaknuti dio svojom vrijednošću kopiranom iz prethodne naredbe. Ispod je izlaz koji smo dobili, a to je ID procesa:

docker inspect

Sada kada imamo ID procesa, možemo ga koristiti za pokretanje nsenter naredbe unutar mrežnog prostora imena procesa:

Zamijenite istaknuti dio s ID-om procesa koji ste dobili u prethodnoj naredbi. Zatim na mjestu ip addr, možete staviti bilo koju naredbu koju želite pokrenuti unutar mrežnog prostora imena poda. Također je možete pokrenuti sa sudo u slučaju da dobijete pogrešku o odbijenom pristupu (permission denied).

Naredba nsenter omogućuje vam pokretanje šireg raspona naredbi dostupnih na čvoru, za razliku od korištenja docker exec što vas ograničava samo na naredbe instalirane unutar spremnika.

Dohvaćanje virtualnog Ethernet sučelja Pod-a

Mrežni prostor imena na podu komunicira s korijenskim netns-om čvora putem virtualne ethernet cijevi. Na strani čvora, ova se cijev pojavljuje kao uređaj čije ime počinje s veth i završava jedinstvenim identifikatorom, kao što je veth742f721 ili veth90. Dok se unutar poda cijev identificira kao eth0.

Možda ćete htjeti znati koji je veth uređaj uparen s kojim podom. Možete započeti ispisivanjem svih mrežnih uređaja na čvoru, a zatim ispisati sve uređaje u mreži poda. Da biste identificirali koji je veth uređaj uparen s određenim podom, možete povezati brojeve uređaja između ta dva popisa.

Upotrijebite nsenter naredbu za pokretanje ip addr naredbe u mrežnom prostoru imena poda. Morat ćete znati ID procesa jednog od spremnika. Za to pogledajte prethodni odjeljak o Dohvaćanju i pristupanju mrežnim prostorima imena Pod-a.

Zatim izvršite sljedeću naredbu na terminalu vašeg radnog čvora, zamjenjujući istaknuti dio na odgovarajući način:

Naredba ispisuje popis sučelja poda:

nsenter ip addr

Uočite if7 znakove nakon eth0@ u gornjem ispisu. To znači da je eth0 poda uparen sa 7. sučeljem čvora. Zatim izlistajte sučelja unutar zadane imenske prostorije čvora pokretanjem ip addr naredbe:

Naredba ispisuje sučelja kao što je prikazano u nastavku:

Kubernetes Networking ip addr

U ispisu, 7. sučelje je veth254b50e6@if3  – virtualna ethernet cijev uparena s podom koji testiramo.

Pregledavanje Iptables pravila

Možete izvršiti naredbu iptables-save kako biste izlistali sve iptables na čvoru:

Ispis naredbe može biti dugačak, pa ga možete spremiti u datoteku za kasniji pregled:

Također možete koristiti less za straničenje ispisa:

Budući da nas zanimaju samo Kubernetes NAT pravila, dodajte -L zastavicu kako biste odredili ispravno odredište:

Evo ispisa:

Kubernetes Networking iptables

Pregledavanje IPVS detalja

Kube-proxy je mrežni proxy koji se izvodi na svakom čvoru u vašem Kubernetes klasteru. Može se koristiti za konfiguriranje IPVS-a za upravljanje prevođenjem virtualnih IP adresa usluga (Service IPs) u IP adrese podova. Kako biste izlistali tablicu prevođenja IP adresa, možete koristiti ipvsadm naredbu. Prvo je trebate instalirati na svoj čvor:

Sada možete izvršiti sljedeću naredbu:

Za prikaz jedne IP adrese usluge, dodajte -t zastavicu, navodeći željenu IP adresu:

Slanje upita DNS-u klastera

Postoji nekoliko načina koje možete slijediti za otklanjanje pogrešaka s DNS rezolucijom vašeg klastera. Službena dokumentacija opisuje jedan način kao implementaciju debug spremnika sa svim potrebnim alatima, a zatim korištenje kubectl za izvršavanje nslookup.

Opcionalno, možete poslati upit DNS-u pomoću dig i nsenter naredbe sa samog čvora. Prvo ćete morati instalirati dig na svoj glavni čvor. Za Ubuntu, instalirajte pomoću apt naredbe:

Kubernetes Networking install dnsutils

Vratite se na terminal na svom lokalnom računalu i pokrenite donju naredbu kako biste pronašli IP adresu klastera za kube-dns uslugu:

Naredba ispisuje:

get kube dns service

Stupac cluster-ip sadrži vrijednost koju trebamo. Sada možemo koristiti nsenter za pokretanje dig u imenskom prostoru spremnika. Međutim, trebat će vam ID procesa spremnika da biste pristupili njegovom imenskom prostoru. Pogledajte odjeljak Dohvaćanje i pristup mrežnim imenskim prostorima podova iznad za smjernice.

Nakon što dobijete container-id, izvršite sljedeću naredbu na svom glavnom čvoru:

Naredba dig uzima IP adresu DNS usluge klastera ( @10.96.0.10) i traži puni naziv domene usluge service-name.namespace.svc.cluster.local:

Kubernetes Networking nsenter dig

Za informacije o pronalaženju naziva usluga i imenskih prostora, pogledajte odjeljak Dohvaćanje IP adrese usluge.

Pregledavanje Conntrack praćenja veza

Možete koristiti conntrack naredbu za prikaz svih veza koje se trenutno prate:

Ispisuje nešto slično snimci zaslona:

Kubernetes Networking conntrac -l

Dodajte -E zastavicu za kontinuirano praćenje dolaznih veza:

Za prikaz veza koje se prate do određene odredišne adrese, dodajte -d zastavicu i navedite odredišnu adresu:

Ponekad se tablica praćenja veza popuni, što rezultira odbacivanjem novih veza. To uzrokuje probleme koji sprječavaju vaše čvorove u uspostavljanju pouzdanih veza. Ako se to dogodi, vidjet ćete poruke poput sljedećih u vašim sistemskim zapisnicima, na lokaciji /var/log/syslog:

Postoji sistemska postavka za maksimalni broj veza koje se prate. Koristite sljedeću naredbu za prikaz trenutne vrijednosti:

Ispisuje:

conntrack max

Vrijednost možete izmijeniti pomoću -w zastavice:

Možda ćete htjeti izmijeniti svoju /etc/sysctl.conf datoteku kako bi vrijednost postala trajna i osiguralo se njezino očuvanje nakon ponovnog pokretanja. Otvorite datoteku pomoću nano:

Zatim izmijenite vrijednost ako linija postoji ili dodajte liniju na kraj datoteke, navodeći novu vrijednost:

Zaključak

Pri implementaciji više kontejneriziranih usluga imat ćete velike koristi od Kubernetes-a jer vam pruža središnju točku upravljanja. Kako bismo osigurali povezivost između različitih Kubernetes podova, pokazali smo vam neke naredbe za pregled mreže koje možete koristiti za rješavanje svih problema vezanih uz vašu Kubernetes infrastrukturu.

Kako biste saznali više o Kubernetesu, njegovim prednostima, postavljanju i implementaciji aplikacija na Kubernetesu, pogledajte naše razne Kubernetes vodiče.

Sretno računanje!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev je kreativni dizajner u CloudSigma, usredotočen na dosljedan poslovni identitet korištenjem tradicionalnih i inovativnih marketinških kanala. Vješt je u spajanju umjetničke vizije sa strateškim marketingom kako bi stvorio dojmljive brendirane priče.

Komentari

Još nema komentara. Budite prvi.