Анхаарна уу. орчуулга.: LayerCI-г бүтээгчийн энэхүү практик тэмдэглэл нь Kubernetes (болон бусад)-д зориулсан зөвлөмж, арга заль гэж нэрлэгддэг маш сайн дүрслэл юм. Энд санал болгож буй шийдэл нь цөөхөн хэдэн шийдлийн зөвхөн нэг бөгөөд магадгүй хамгийн тод биш юм (зарим тохиолдолд тайлбар дээр дурдсан K8-ийн "уугуул" шийдэл нь тохиромжтой байж магадгүй юм. kubectl port-forward
Ердийн нөхцөл байдлыг төсөөлөөд үз дээ: та локал машин дээрх порт нь траффикийг под/контейнер рүү (эсвэл эсрэгээр) шилжүүлэхийг хүсч байна.
Хэрэглэх боломжит тохиолдлууд
- HTTP төгсгөлийн цэг юу буцаадаг болохыг шалгана уу
/healthz
үйлдвэрлэлийн кластер дахь pod . - TCP дибаглагчийг локал машин дээрх подволд холбоно уу.
- Баталгаажуулалт хийх шаардлагагүй (ихэвчлэн localhost root эрхтэй) локал мэдээллийн сангаас үйлдвэрлэлийн мэдээллийн санд хандах боломжтой.
- Үе шатлалын кластерт өгөгдөлд зориулж контейнер үүсгэхгүйгээр нэг удаагийн шилжих скриптийг ажиллуул.
- VNC сессийг виртуал ширээний компьютер дээр ажиллуулж байгаа pod руу холбоно уу (XVFB-г үзнэ үү).
Шаардлагатай хэрэгслүүдийн талаар хэдэн үг хэлье
colin@colin-work:~$ tcpserver 127.0.0.1 8080 echo -e 'HTTP/1.0 200 OKrnContent-Length: 19rnrn<body>hello!</body>'&
[1] 17377
colin@colin-work:~$ curl localhost:8080
<body>hello!</body>colin@colin-work:~$
Netcat эсрэгээр нь хийдэг. Энэ нь танд нээлттэй порт руу холбогдож, түүнээс хүлээн авсан оролт гаралтыг stdin/stdout руу дамжуулах боломжийг олгоно.
colin@colin-work:~$ nc -C httpstat.us 80
GET /200 HTTP/1.0
Host: httpstat.us
HTTP/1.1 200 OK
Cache-Control: private
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.1
Access-Control-Allow-Origin: *
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=93fdbab9d364704de8ef77182b4d13811344b7dd1ec45d3a9682bbd6fa154ead;Path=/;HttpOnly;Domain=httpstat.us
Date: Fri, 01 Nov 2019 17:53:04 GMT
Connection: close
Content-Length: 0
^C
colin@colin-work:~$
Дээрх жишээн дээр netcat нь HTTP-ээр дамжуулан хуудсыг хүсэх болно. туг -C
Энэ нь мөрийн төгсгөлд CRLF-г нэмэхэд хүргэдэг.
Kubectl-тэй холбогдох: хост дээр сонсож, подтой холбогдоно уу
Хэрэв бид дээрх хэрэгслүүдийг kubectl-тэй нэгтгэвэл дараах тушаалыг авна.
tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080
Үүнтэй адилтгаж үзвэл, pod доторх 80 порт руу нэвтрэхийн тулд үүнийг хийхэд хангалттай curl "127.0.0.1:80"
:
colin@colin-work:~$ sanic kubectl exec -it web-54dfb667b6-28n85 bash
root@web-54dfb667b6-28n85:/web# apt-get -y install netcat-openbsd
Reading package lists... Done
Building dependency tree
Reading state information... Done
netcat-openbsd is already the newest version (1.195-2).
0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.
root@web-54dfb667b6-28n85:/web# exit
colin@colin-work:~$ tcpserver 127.0.0.1 8000 sanic kubectl exec -i web-54dfb667b6-28n85 nc 127.0.0.1 8080&
[1] 3232
colin@colin-work:~$ curl localhost:8000/healthz
{"status":"ok"}colin@colin-work:~$ exit
Хэрэглээний харилцан үйлчлэлийн диаграм
Эсрэг чиглэлд: pod-д сонсож, хосттой холбогдоно уу
nc 127.0.0.1 8000 | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat
Энэ команд нь локал машин дээрх 8000 порт руу нэвтрэх боломжийг олгодог.
Bash скрипт
Би Bash-д зориулж Kubernetes үйлдвэрлэлийн кластерийг удирдах боломжийг олгодог тусгай скрипт бичсэн
kubetunnel() {
POD="$1"
DESTPORT="$2"
if [ -z "$POD" -o -z "$DESTPORT" ]; then
echo "Usage: kubetunnel [pod name] [destination port]"
return 1
fi
pkill -f 'tcpserver 127.0.0.1 6666'
tcpserver 127.0.0.1 6666 kubectl exec -i "$POD" nc 127.0.0.1 "$DESTPORT"&
echo "Connect to 127.0.0.1:6666 to access $POD:$DESTPORT"
}
Хэрэв та энэ функцийг нэмбэл ~/.bashrc
, та тушаалаар хонгилын хонгилыг хялбархан нээж болно kubetunnel web-pod 8080
мөн хийх curl localhost:6666
.
- Доторх хонгилын хувьд Docker Та үндсэн шугамыг дараах байдлаар сольж болно:
tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
- хонгилд зориулсан K3s - үүнийг өөрчлөх:
tcpserver 127.0.0.1 6666 k3s kubectl exec …
- гэх мэт.
Бусад санаа
- Та тушаалуудыг ашиглан UDP урсгалыг дахин чиглүүлэх боломжтой
netcat -l -u -c
оронд ньtcpserver
иnetcat -u
оронд ньnetcat
тус тусдаа. - Хоолой харагчаар дамжуулан I/O харах:
nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat
- Та ашиглан хоёр талын урсгалыг шахаж, задалж болно
gzip
. - SSH-ээр холбогдох файлтай өөр компьютерт холбогдоно уу
kubeconfig
:tcpserver ssh workcomputer "kubectl exec -i my-pod nc 127.0.0.1 80"
- Та өөр өөр кластерт хоёр хонхорцог холбож болно
mkfifo
мөн хоёр тусдаа командыг ажиллуулkubectl
.
Боломжууд хязгааргүй юм!
Орчуулагчийн жич
Мөн манай блог дээрээс уншина уу:
- «
Kubernetes дээр ажиллаж байгаа программ хөгжүүлэгчдэд зориулсан хэрэгслүүд "; - «
Kubernetes зөвлөмж ба заль мэх: орон нутгийн хөгжил ба Телепрезенцийн тухай "; - «
Kubernetes pods дээр дибаг хийх kubectl-дибаг залгаас "; - «
Kubernetes-тэй ажиллахад хэрэгтэй хэрэгслүүд ".
Эх сурвалж: www.habr.com