āĻŦāĻŋāĻāĻĻā§āĻ°āĻ. āĻ
āĻ¨ā§āĻŦāĻžāĻĻ: āĻ˛ā§āĻ¯āĻŧāĻžāĻ°āĻ¸āĻŋāĻāĻ-āĻāĻ° āĻ¸ā§āĻ°āĻˇā§āĻāĻžāĻ° āĻāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻ¨ā§āĻāĻāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻā§āĻ¸ (āĻāĻŦāĻ āĻļā§āĻ§ā§ āĻ¨āĻ¯āĻŧ) āĻāĻ¨ā§āĻ¯ āĻ¤āĻĨāĻžāĻāĻĨāĻŋāĻ¤ āĻāĻŋāĻĒāĻ¸ āĻāĻŦāĻ āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻāĻŽā§āĻāĻžāĻ° āĻāĻŋāĻ¤ā§āĻ°āĨ¤ āĻāĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻŋāĻ¤ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻāĻŋ āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ¯āĻŧā§āĻāĻāĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻāĻŦāĻ āĻ¸āĻŽā§āĻāĻŦāĻ¤, āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¨āĻ¯āĻŧ (āĻāĻŋāĻā§ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻ˛ā§āĻ˛āĻŋāĻāĻŋāĻ¤ K8 āĻāĻ° āĻāĻ¨ā§āĻ¯ "āĻ¨ā§āĻāĻŋāĻ" āĻāĻāĻāĻŋ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ kubectl port-forward
āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°ā§āĻ¨: āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻ āĻāĻžāĻ¨ āĻ¯āĻž āĻāĻžāĻĻā§āĻāĻ°ā§āĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻĒāĻĄ/āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ°ā§ āĻā§āĻ°ā§āĻ¯āĻžāĻĢāĻŋāĻ āĻĢāĻ°ā§āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻāĻ°āĻ¤ā§ (āĻŦāĻž āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ā§)āĨ¤
āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§
- HTTP āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻāĻŋ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻāĻ°ā§ āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨
/healthz
āĻā§āĻĒāĻžāĻĻāĻ¨ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻĄ. - āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻĒāĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ TCP āĻĄāĻŋāĻŦāĻžāĻāĻžāĻ° āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤
- āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧā§ āĻŦāĻŋāĻ°āĻā§āĻ¤ āĻ¨āĻž āĻāĻ°ā§āĻ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋ āĻĨā§āĻā§ āĻāĻ¤ā§āĻĒāĻžāĻĻāĻ¨ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒāĻžāĻ¨ (āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ˛ā§āĻāĻžāĻ˛āĻšā§āĻ¸ā§āĻā§āĻ° āĻ°ā§āĻ āĻ āĻ§āĻŋāĻāĻžāĻ° āĻĨāĻžāĻā§)āĨ¤
- āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻāĻŋāĻ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻĄā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ§āĻžāĻ°āĻ āĻ¤ā§āĻ°āĻŋ āĻ¨āĻž āĻāĻ°ā§āĻ āĻāĻāĻāĻŋ āĻāĻāĻāĻžāĻ˛ā§āĻ¨ āĻŽāĻžāĻāĻā§āĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻžāĻ˛āĻžāĻ¨ā§ˇ
- āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻĄā§āĻ¸ā§āĻāĻāĻĒā§ āĻāĻ˛āĻŽāĻžāĻ¨ āĻāĻāĻāĻŋ āĻĒāĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ 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 āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ āĻāĻ°ā§. āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻž āĻĒā§āĻ°ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻĨā§āĻā§ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ I/OāĻā§ 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:~$
āĻāĻĒāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§, āĻ¨ā§āĻāĻā§āĻ¯āĻžāĻ āĻĒā§āĻˇā§āĻ āĻžāĻāĻŋāĻā§ 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 āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ
āĻāĻŽāĻŋ āĻŦā§āĻ¯āĻžāĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛āĻŋāĻā§āĻāĻŋ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻĒā§āĻ°ā§āĻĄāĻžāĻāĻļāĻ¨ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ
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
.
- āĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻĄāĻŧāĻā§āĻ āĻāĻ¨ā§āĻ¯ āĻĄāĻāĻļā§āĻ°āĻŽāĻŋāĻ āĻāĻĒāĻ¨āĻŋ āĻāĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ˛āĻžāĻāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
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 āĻĒāĻĄāĻā§āĻ˛āĻŋāĻ¤ā§ āĻĄāĻŋāĻŦāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ kubectl-debug āĻĒā§āĻ˛āĻžāĻāĻāĻ¨ "; - ÂĢ
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĻāĻ°āĻāĻžāĻ°ā§ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ Âģ.
āĻāĻ¤ā§āĻ¸: www.habr.com