Шарҳ. тарҷума.: Ин ёддошти амалӣ аз созандаи LayerCI як тасвири олиҷаноби ба истилоҳ маслиҳатҳо ва ҳилаҳо барои Kubernetes аст (ва на танҳо). Ҳалли дар ин ҷо пешниҳодшуда танҳо яке аз чанде аст ва эҳтимолан возеҳтарин нест (барои баъзе ҳолатҳо, "модарӣ" барои K8s, ки дар шарҳҳо зикр шудаанд, мувофиқанд. kubectl port-forward
Вазъияти маъмулиро тасаввур кунед: шумо мехоҳед, ки бандари мошини маҳаллии шумо трафикро ба таври ҷодугарӣ ба поддон/контейнер интиқол диҳад (ё баръакс).
Ҳолатҳои эҳтимолии истифода
- Санҷед, ки нуқтаи ниҳоии HTTP чӣ бармегардад
/healthz
pod дар кластери истеҳсолӣ. - Debuger TCP-ро ба дастгоҳи мошини маҳаллӣ пайваст кунед.
- Аз абзорҳои маҳаллии пойгоҳи додаҳо ба пойгоҳи додаҳои истеҳсолӣ дастрасӣ пайдо кунед, ки бидуни ташвиш бо аутентификатсия (одатан localhost ҳуқуқи реша дорад).
- Скрипти муҳоҷирати якдафъаинаро барои маълумот дар кластери марҳилавӣ бидуни сохтани контейнер барои он иҷро кунед.
- Сеанси VNC-ро ба подкале, ки дар мизи кории виртуалӣ кор мекунад, пайваст кунед (ниг. 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
Аз рӯи қиёс, барои дастрасӣ ба порти 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
Диаграммаи таъсири мутақобилаи коммуналӣ
Дар самти муқобил: дар подкаст гӯш кунед ва ба мизбон пайваст шавед
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
, шумо метавонед ба осонӣ нақби дар pod бо фармон кушоед kubetunnel web-pod 8080
ва кунед curl localhost:6666
.
- Барои туннель дар Доктор шумо метавонед хати асосиро бо: иваз кунед:
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
.
Имкониятҳо беохиранд!
PS аз тарҷумон
Инчунин дар блоги мо хонед:
- «
Асбобҳо барои таҳиягарони барномаҳое, ки дар Kubernetes кор мекунанд »; - «
Маслиҳатҳо ва ҳилаҳои Kubernetes: дар бораи рушди маҳаллӣ ва Telepresence »; - «
Васлкунаки kubectl-debug барои хатогиҳо дар қуттиҳои Kubernetes »; - «
Хидматҳои муфид ҳангоми кор бо Kubernetes ".
Манбаъ: will.com