Cred că există două soluții posibile care te pot ajuta în cazul tău:
- Puteți adăuga
--abordare
argument la kubectl port-forward
comanda cu adresa IP a containerului care rulează această comandă. În mod implicit, kubectl
se leagă numai la localhost și, prin urmare, nu funcționează așa cum vă așteptați (vezi: Documente de referință Kubectl).
- Toate containerele nou-pornite se conectează la o valoare implicită
pod
rețea, dacă nu se specifică altfel. Pentru a vă rezolva problema, puteți utiliza gazdă
reţea în loc de pod
reţea. După cum se poate găsi în Rețea gazdă Docker documentație:
Dacă utilizați modul de rețea gazdă pentru un container, stiva de rețea a containerului respectiv nu este izolată de gazda Docker (containerul partajează spațiul de nume de rețea al gazdei), iar containerul nu primește propria sa adresă IP alocată. .
Voi descrie pe scurt ambele soluții pentru a vă arăta cum funcționează.
În primul rând, m-am pregătit postgres
:
# kubectl get pod,svc
STAREA NUMELE GATA REINCEPE VARSTA
pod/postgres 1/1 Alergare 0 155m
NUME TIP CLUSTER-IP EXTERN-IP PORT(E) Vârsta
service/postgres ClusterIP 10.110.151.73 <niciunul> 5432/TCP 2s
Anunțul 1.
Această abordare este foarte asemănătoare cu a ta, tocmai am adăugat --abordare
argument:
NOTĂ: Am folosit un recipient cu kubectl
deja instalat. Vreau doar să fii atent la kubectl port-forward --address $(hostname -i), localhost service/postgres 2223:5432
comanda.
root@kworker:~# docker run -it --name=k8s-conn-12 -p 2223:2223 -v /config:/config mattjcontainerregistry/forward:latest bash
root@31b05af956ab:/# kubectl port-forward --address $(hostname -i), localhost service/postgres 2223:5432 --kubeconfig=config
Redirecționare de la 127.0.0.1:2223 -> 5432
Redirecționare de la 172.17.0.2:2223 -> 5432
Din altă filă de terminal putem verifica dacă funcționează:
root@kworker:~# docker exec -it k8s-conn-12 bash
root@31b05af956ab:/# psql -U postgres -h localhost -p 2223
psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1), server 13.3 (Debian 13.3-1.pgdg100+1))
AVERTISMENT: psql major versiunea 12, server major versiunea 13.
Este posibil ca unele caracteristici psql să nu funcționeze.
Tastați „ajutor” pentru ajutor.
postgres=#
În plus, putem face același lucru de la mașina gazdă (din exteriorul containerului cu portul expus și publicat):
root@kworker:~# psql -U postgres -h localhost -p 2223
psql (11.12 (Debian 11.12-0+deb10u1), server 13.3 (Debian 13.3-1.pgdg100+1))
AVERTISMENT: psql major versiunea 11, server major versiunea 13.
Este posibil ca unele caracteristici psql să nu funcționeze.
Tastați „ajutor” pentru ajutor.
postgres=#
Anunțul 2.
Această abordare necesită utilizarea a gazdă reţea:
gazdă: pentru containerele autonome, eliminați izolarea rețelei dintre container și gazda Docker și utilizați direct rețeaua gazdei.
NOTĂ: Vreau doar să fii atent la --network=gazdă
opțiune (am folosit același recipient ca înainte):
root@kworker:~# docker run -it --name=k8s-conn-12 --network=host -v /config:/config mattjcontainerregistry/forward:latest bash
root@kworker:/# kubectl port-forward service/postgres 2223:5432 --kubeconfig=config
Redirecționare de la 127.0.0.1:2223 -> 5432
Redirecționare de la [::1]:2223 -> 5432
Din nou, putem verifica dacă funcționează conform așteptărilor din afara containerului:
root@kworker:~# psql -U postgres -h localhost -p 2223
psql (11.12 (Debian 11.12-0+deb10u1), server 13.3 (Debian 13.3-1.pgdg100+1))
AVERTISMENT: psql major versiunea 11, server major versiunea 13.
Este posibil ca unele caracteristici psql să nu funcționeze.
Tastați „ajutor” pentru ajutor.
postgres=#
În plus, merită să vă gândiți dacă aveți într-adevăr nevoie de un container docker pentru redirecționarea portului. Poate alergând kubectl port-forward
în fundal ar fi mai bine (vezi: Efectuați kubectl port-forward în fundal).