ááľáłááť. áľáááá áĽáŞá˛á˝ áŠáŁá፠ASOS.com á¨á ááľ á¨áá°á á¨á áááŹá˝á á°á áááľ áááá˛áľ á¨á°á°á¨áááá ááĽááľá áľáŠá¨áľ áĽááááŁááᢠá áĽáą á ááŤáááľ á á´ááŽá á á ááá á áŠá áááľáľ ááľáĽ á°á áááľá áááťáťá á¨á°ááá á°á¨áłáłá á áľááśá˝á ááááŤá. á ááŁá˘áá˝ ááá˘áŤáá á¨áá°áąáľ, á°áŤá˛áá á°á¨áľáá á áá áááľ áá á¨áá°ááľ á˝ááášá áĽáááĽááá.
áá
ááŁáĽá á á´áá´ááŚááľ ááááľ ááľáĽ á´ááŽáá ááááŤáá˝á áĽáá´áľ ááá á áĽáá°ááťá ᣠá áľááľ áĽá áĽááá áłáá ááá áľ á á°á¨áłáłá ááĽáá˝ ááľáĽ á¨ááááŞáŤá ááᢠá ááá XNUMX ááľáĽ á´ááŽáá á áŠá áááľáľ ááľáĽ á¨áá°áá á áá°á¨áłá áĽá ááľáŁá ááááŽá˝á áĽá¸áááá á˘
á¨áŠá áááľáľ áľá-áá
áłá áŽáá´áááŽá˝á ááá á á
áĽá áááá¨áľ áĽá á áááľ ááááśá˝á áá°áŁáᢠá˝áá áľá á´áŞáŠáŞ áŽáááŠá˛áá áááłáŁ áĽáá˛áá á ááŁá ááłááá á´áŽáá. ááá ááá á ááŤáŁáá˝ ááááá á¨ááááľá á¨áľáááľ áĽáŞáá˝ áááŁáŤáľ áá.
ááá á áľááá áá? ááŤáŁ á á ááľ á¨á°áá°á áá˝á áá á¨áá°áŤ áá°áľ ááᢠáĽá áá áĽáá°ááá˝ á áááŹá˝áá˝ á¨ááá áá áááᢠáŽáá´áááŽá˝ áááááá á¨áľáááľ áĽáŞáá˝ ááľá¨á á¨áťá á áŁá á á áἠáá ááľáĽ áááá áá áá á áá áá á¨ááŤáŁ ááá áá áááá áĽá á ááá˝ áá°áá áŞáŤáá˝ áá á°á˝áá áŤáłáľáŤáᥠáá¨áá ááĽááᣠá¨áľáááľ á ááĽáŽá˝á ááááŠáŁ ááá°á˘
á´ááŽáá ááááŤáá˝ á¨áľááš á¨áľáááľ áĽáŞáá˝ ááááľ ááá áá°áá¨á áĽááłááŁá¸á ááááťáᢠá¨ááá á ááťá¸áá¸áá áá¨áłá°á áĽáá˛á˝á á¨áŽáá´ááá á ááľ áá á˛ááá áŤááá¸ááᢠáĽáá°áá á áááľ ááááŤáá˝á áá áá á¨áĽááľ áŹáá°áá áááá°áĽ áĽá á ááŤáŁá ááľáĽ áŤá ááááá ááŽááŤá (áááľá á¨áĽááľá áĽáááá˝ ááá áĽááá˝) ááľá¨á á¨áááááľááľá ááá ááľá¨á á¨ááᨠááłáąá áááááľ áŤáľá˝ááá˘
áá° áá°á¨áłá áááŽá˝ ááľá¨áľ
á¨áá á¨áłáá á´ááŽáá ááá፠áśáľáľ á áŤááľá áŤáŤáľáłááĄ- defaultAction
, architectures
(ááá archMap
) áĽá syscalls
:
{
"defaultAction": "SCMP_ACT_ERRNO",
"architectures": [
"SCMP_ARCH_X86_64",
"SCMP_ARCH_X86",
"SCMP_ARCH_X32"
],
"syscalls": [
{
"names": [
"arch_prctl",
"sched_yield",
"futex",
"write",
"mmap",
"exit_group",
"madvise",
"rt_sigprocmask",
"getpid",
"gettid",
"tgkill",
"rt_sigaction",
"read",
"getpgrp"
],
"action": "SCMP_ACT_ALLOW"
}
]
}
(
defaultAction
á ááá ááľáĽ áŤáá°ááá á¨ááááá á¨áľáááľ áĽáŞ ááŁáŞ áĽáŁ áááł áááľáá syscalls
. áááŽá˝á ááá
ááᣠáĽá
á áá á ááá áááľ áá áá áĽá´áśá˝ áá áĽáá°áŠááĄ-
-
SCMP_ACT_ERRNO
- á¨áľáááľ áĽáŞ á ááááá áŤááłá ᣠ-
SCMP_ACT_ALLOW
- ááá áłá.
ááá architectures
ááá á ááá´áá¸á á°ááááŻáᢠáá
á áľááá áá ááááŤáąá á á¨ááá á°á¨á á¨áá°áá á¨á ááŁáŞáŤ áŤáą á áľáááľ áĽáŞ áááŤáá˝ áá á¨á°áá°á¨á° áĽáá á ááááŤá ááľáĽ á á°ááášáľ áľáá¸á áá á áá°áá. á¨áá ááá á ááľ á¨ááŤáŁá á¨áŠáŤ áá á¨áááŤáá˝ áá áŤáááłá¸ááᢠááłáĄ á¨áľáááľ áĽáŞáá˝ á áľáááą á ááá´áá¸á áá á áááľá¨áľ áá ááá á¨á°ááŤáŠ ááłáááŤáá˝ áááŤá¸á áá˝ááᢠáááłá, á¨áľáááľ áĽáŞ recvfrom
(áá¨áá á¨áśáŹáľ áááá á áĽá
á áá á¨áá) ááłáá፠= 64 á x64 áľáááśá˝ áĽá ááłáá፠= 517 á x86 ááá˘
á ááá ááľáĽ syscalls
áááá á¨áľáááľ áĽáŞáá˝ ááá¨ááŤá áĽá áá ááľá¨á áĽááłáá áľ ááááťáᢠáááłáᣠá áááá á á¨á°ááá°áá¸á áááá ááá á áá˝ááᢠdefaultAction
áá SCMP_ACT_ERRNO
, áĽá á ááá ááľáĽ áĽáŞáá˝ syscalls
ááá°áĽ SCMP_ACT_ALLOW
. áľááá
á ááá ááľáĽ á¨á°áááš áĽáŞáá˝á áĽáť áá á¨ááá
á°á syscalls
, áĽá áááá áá¨áááá. ááĽáá áááἠáĽá´áśášá ááá¨á á ááŚáľ defaultAction
áĽá áľáááśá˝ áá° á°ááŤáá.
á áá á áŁá ááá˝ áŤááááľá áľá áĽáá á áááŽá˝ áĽááľ áááľ áááľ á ááĽá. áĽáŁááá á¨áá á áłá˝ áŤááľ áááŽá˝ á Kubernetes áá á¨áááľ áá°áá áŞáŤáá˝á ááľáá áĽáŤá°áአáĽáá°áá áĽá á á°áťá áá á á áľááš ááĽáśá˝ áĽáá˛á°áŠ áĽáá°áááá áŤáľáĄá˘
1. AllowPrivilegeEscalation=áá¸áľ
Đ securityContext
ááŤáŁá áááŞáŤ á áá AllowPrivilegeEscalation
. ááľáĽ á¨á°áŤá false
áŽáá´áááŽá˝ á () ááááŤá.on
) á˘áľ no_new_priv
á¨áá
á ááŤá á¨áááŽá˝ ááłáľ áĽá¨á°ááᨠááᢠtrue
(ááŁáŞ) á¨áŽáá´ááá á ááľ áá á á
áá áá°áą ááááŞáŤ áá á¨á´ááŽá ááŽáááá á°ááŁáŤá áŤá°áááᢠáľááá
ᣠááá á¨ááľáĽ á¨áŠáŤ áá°áśá˝á áááľáŹáľ á¨ááŤáľááá ááá á¨áľáááľ áĽáŞáá˝ (áááłá á¨á°á áá/áĄáľá ááłáááŤáá˝á áááá áᣠá¨á°áá°á á˝ááłáá˝á ááŁá) á ááááŤá ááľáĽ ááááľ á ááŁá¸áá˘
á°áŤ ááá áá°ááŤá°áá áá echo hi
, á¨áá¨á°ááľ áááśá˝ áŤáľáááá:
{
"defaultAction": "SCMP_ACT_ERRNO",
"architectures": [
"SCMP_ARCH_X86_64",
"SCMP_ARCH_X86",
"SCMP_ARCH_X32"
],
"syscalls": [
{
"names": [
"arch_prctl",
"brk",
"capget",
"capset",
"chdir",
"close",
"execve",
"exit_group",
"fstat",
"fstatfs",
"futex",
"getdents64",
"getppid",
"lstat",
"mprotect",
"nanosleep",
"newfstatat",
"openat",
"prctl",
"read",
"rt_sigaction",
"statfs",
"setgid",
"setgroups",
"setuid",
"stat",
"uname",
"write"
],
"action": "SCMP_ACT_ALLOW"
}
]
}
(
...á¨áĽááá ááá áĄ-
{
"defaultAction": "SCMP_ACT_ERRNO",
"architectures": [
"SCMP_ARCH_X86_64",
"SCMP_ARCH_X86",
"SCMP_ARCH_X32"
],
"syscalls": [
{
"names": [
"arch_prctl",
"brk",
"close",
"execve",
"exit_group",
"futex",
"mprotect",
"nanosleep",
"stat",
"write"
],
"action": "SCMP_ACT_ALLOW"
}
]
}
(
áá á áľáá, áá
ááá á˝áá á áá áľ? á ááᣠá¨áá¨á°ááľá á¨áĽáááľ áĽáŞáá˝ ááááἠáĽáá áŁáá (á¨áĽááą ááááľ á¨áá á áá) capset
, set_tid_address
, setgid
, setgroups
и setuid
. ááá ááᣠáľááááá áá°á áĽááľá áá á áá ááĽáĽá á¨ááá°á¨ááŁá¸á áá°áśá˝á á ááááľáŁ ááááŤáá˝á á¨áŽáá´ááá á ááľ áá áľáá ፠áá áĽáŤá°áŠ ááᢠá áá á áááá˝áŁ á ááľ áá á¨áĽá ááŤá˘áŤáá á¨áŠáŤ áá á áŤáŁá˘ áŤááá á áá (á áĽááľá ááá ááááŁáľá á á°áá á áááááľ á°áŞá) áŽáá´áááŽáš á áľáááľ ááŽáĽ áŤáááá˘
á áá ááá ááĽá 1: ááŤáŁáá˝á áŤááą AllowPrivilegeEscaltion=false
. áá
á¨á´ááŽáá ááááŤáá˝á áá á ááááłá áĽá á áŽáá´ááá á ááľ áá á áŤáŁá˘ áá ááá°á¨á áááŚá˝ áľááłáááľ áŤááą áŤá°ááá¸ááá˘
2. á áŽáá´ááá á°á¨á áá á¨á´ááŽá ááááŤáá˝á áááááľ
á¨á´ááŽáá ááá፠á ááľ á°á¨á áááá áá˝áááĄ-
annotations:
seccomp.security.alpha.kubernetes.io/pod: "localhost/profile.json"
... ááá á ááŤáŁá á°á¨á:
annotations:
container.security.alpha.kubernetes.io/<container-name>: "localhost/profile.json"
áĽáŁááá áŠá áááľáľ á´áŽááľ á˛á ááá
á¨áá áŤáá á ááŁáĽ áĽáá°ááá¨á áἠáá á
áŠá áááľáľ áá áá áĽáá°áá á¨á áĽááľ á°áá˝ áŤááá
á˝áአáá
ááŤáŁ áááá á¨áááá¨á á AllowPrivilegeEscalation=true
á á ááá˝ 1 áá áá°á°ááášáľ á˝ááŽá˝ áááŤá, áĽá áá
áááἠá áá˝áá.
á áŽáá´ááá á°á¨á á¨á´ááŽáá ááááŤáá˝á á áá ááᣠáá áá ááľá áŤáľáááłá áĽá áá ááľ á¨á°áá°á ááŤáŁ á¨á°ááá ááá፠ááá á áá˝ááᢠáá ááá˘áá˝ áľá á°áąá áĽáľáŞáŤáľá°áŤáá áĽá á á˛áą áľáŞáľ (ááááŁáľ 1.18?) áááá á°á áĽáľáŞáá áľá¨áľ áá°á¨á á áá áľá˘
á áá ááá ááĽá 2á áŽáá´ááá á°á¨á áá á¨á´ááŽáá ááááŤáá˝á áŤáááá˘
á á°ááŁáŤá áááŠáŁ áá
á
á á áĽáááá áá ááĽáŤáá áááá°áá áááľ áá áŤááááááĄ- âá¨áĽá á´ááŽá ááŽááá ááá á áĽáŽ áá°áŤáᢠdocker run
áá áá° Kubernetes áááľá°á á¨á°á°á፠á áá á áá°áŤá?
3. á¨áŠáŤ áá/ááŁáŞáá áĽáá° á¨áá¨á¨áť á ááŤá áĽáť áá áá
Kubernetes áá áĽáŽááἠááááŤáá˝ áááľ á ááŤáŽá˝ á ááľá˘ runtime/default
и docker/default
. áááąá á¨áá°áá áŠáľ á áŽáá´ááá á ááľ áá áĽáá á áŠá áááľáľ á áá°ááᢠáľááá
ᣠá á°á ááá áľ á¨áŠáŤ áá á áŤáŁá˘ áĽá áĽáá° áľáŞáą áááŤáŠ áá˝ááá˘
á áá á áááá˝ á¨áŠáŤ ááá á ááá¨á ááááŤáľ áŽáá´ááአáá á¨áľáááľ áĽáŞáá˝ áľáĽáľáĽ áá ááá áľ ááá áá ááá áľ á áá˝ááᢠá áĽááááš á¨áŠáŤ áááá˝ áá ááá
áŁááľ á áŠá á¨áá ááá docker/default
ᨠKubernetes 1.11 ááᎠá°ááá§áᣠáľááá
á¨áá áá á°áá áĽá˘
á áĽá á áľá°áŤá¨áľ, ááá፠runtime/default
áá°áá á¨á ááá áášá á°áľáá áá-á°á áááá˝á á¨áľáĽáá á áááá áá á¨á°áŤáŤá á á°ááá˝ áá á á
docker run
á ááŞáááťá¸á áá. ááá ááᣠá Kubernetes áááľá°á áá á¨áá°áŠ á¨áááľ áá°áá áŞáŤáá˝á á á°ááá¨á°áŁ áĽáá˛á
ááááą ááá፠á áŁá áááľ áá áĽá ááá˘áá˝ ááá°áá áŞáŤááťá¸á (ááá á¨áá°áá áŞáŤ ááááśá˝) ááááŤáá˝á á ááá á áá áá°áŽá á ááŁá¸á áĽáŹ ááá¨áŤá¨á áĽá°ááŤááá˘
á áá ááá ááĽá 3áá°áá°á á áááŹá˝áá˝ á°á¨ááľ ááááŤáá˝á ááá áŠá˘ áá á¨áááťá á¨áá ááá°áá áŞáŤ ááááśá˝ ááááŤáá˝á ááá áŠáŁ áááłá áááá á¨áááá áá°áá áŞáŤ á¨áľá á¤áá ááá˝á áŤáŤá°á° á¨áá ááá፠ááá áŠá˘ áĽáá° á¨áá¨á¨áť á ááŤá á¨áŠáŤ áá/ááŁáŞ áĽáť áá ááá˘
á áá°ááľ ááĽáá˝ ááᣠá á´áá´ááŚááľ á ááłá˝ááľ á¨á°á¨ááľ ááááŤáá˝á áĽáá´áľ ááá áᣠá ááśáá˛á ááľá¨á áĽá á á§á᧠ááľáĽ áĽáá´áľ áĽáá°áááá áĽá¸ááááᢠá áá á ááááᣠáá° áá°áá áŞáŤ-á°áŽá ááááŤáá˝ áááá°á ááá ááááŤáľ á áááá áá˘
4. áŤáá°áá°á á ááŤá á áá°áá.
ᨠPodSecurityPolicy
, á áááľá°á ááľáĽ áĽáá˛á°áŤ áŤáľá˝ááá, ááá á¨á´ááŽá ááŽááá áŤáá°ááááŁá¸á ááľáá˝ á ááľáĽ áá°áŤá. seccomp=unconfined
.
á áá áááł ááľáŤáľ áááľ áááľá°áá á¨áá¨áá¨áá á ááľ áá á¨ááĽá á˝áá á ááˇá áááľ áá. áá á áŤááľ á á°á áááľ áŁáááŤáá˝ á ááá¨ááá˘
á áá ááá ááĽá 4á áááľá°á ááľáĽ áŤá ááááá áŽáá´ááá áááŁáľ á¨áá áľá seccomp=unconfined
á á°ááá á áááľ á áŤáŁá˘áá˝.
5. "á¨áŚá˛áľ áááł"
áá ááĽáĽ ááŠá áááľáľ áአá áá°áá, ááá áá á ááá "á¨ááááá á ááľ ááá áŤááŁá¸á áááŽá˝" ááľáĽ ááľáĽ áááľáá.
áĽáá°á°á¨á°á°áŁ á¨á´ááŽáá ááááŤáá˝á ááá á ááááá ááłá áá áĽá á áá¨áŤ áĽá áľá á°áľ áá á áĽá á áá°ááááᢠáĽáááłá áá á°á áááá˝ á áááŹá˝áá "ááŁá" á á°á áá áłááĽá á áááľ á áŤáŁá˘áá˝ ááľáĽ á¨ááá¨á áĽáľá á¨áá¸áá.
á¨ááááľ á¨ááá 4.14 á¨á°ááá á áá á¨áŚá˛áľ ááľ ááľáĽ á¨ááá፠áááá˝á áááľ á°á˝áá ᣠáľá ááá á¨áľáááľ áĽáŞáá˝ áá¨á á syslog ááľáĽ ááááἠᣠáá áĽááąá áłáŤááąá˘ áááŞáŤáá á áá áá áá
áá áááł ááá á áá˝áá SCMT_ACT_LOG
:
SCMP_ACT_LOG: á´ááŽá á ááŁáŞáŤá ááľáĽ áŤá ááááá á á áá áŤáá°ááá° á¨áľáááą áĽáŞ á ááŤá°ááá áá áá á°á˝áá á ááá¨áá ááá áá áľá áľáááą áĽáŞ áá¨á áááááŁáá˘
áá áá áŁá ᪠ááá áá á¨á°ááá° áľááľ áá¸áááĄ
- á¨ááŤáľááááľá á¨áľáááľ áĽáŞáá˝ áááľá˘
- á¨ááŤáááľ áľáááľ áĽáŞáá˝á á ááľ á áá á ááááá˘
- á áááἠááľáłááťá ááľáĽ áľáááá˝ áĽáŞáá˝ áá áá¨á áááááĄá˘
ááá áŤá ááłá áá áá áááľááá˘
{
"defaultAction": "SCMP_ACT_LOG",
"architectures": [
"SCMP_ARCH_X86_64",
"SCMP_ARCH_X86",
"SCMP_ARCH_X32"
],
"syscalls": [
{
"names": [
"arch_prctl",
"sched_yield",
"futex",
"write",
"mmap",
"exit_group",
"madvise",
"rt_sigprocmask",
"getpid",
"gettid",
"tgkill",
"rt_sigaction",
"read",
"getpgrp"
],
"action": "SCMP_ACT_ALLOW"
},
{
"names": [
"add_key",
"keyctl",
"ptrace"
],
"action": "SCMP_ACT_ERRNO"
}
]
}
(
ááá áá áĽá
á áá áĽáá°áááá á¨ááŤáááľá áĽá áááľá°áá áááą á¨áá˝á áááá áĽáŞáá˝ áááľ áĽááłááŚáľ áŤáľáłááąá˘ ááááá ááááááľ áĽáŠ áá á¨áľ áŚáá´ááá áá
ááá, á ááľ ááŤá á á. á˘ááá SCMT_ACT_LOG
ᨠ2017 áááŁá°á ááᎠá ááááľ á¨ááá á¨á°á°ááᣠáá° Kubernetes áľá-áá
áłá á¨ááŁá á á ááťáŤá á á
áἠáá ááᢠáľááá
áá
áá áá´ ááá áá ááááľ á¨ááá 4.14 áĽá runC áľáŞáľ ááá áŤáá° áŤáľáááááłá
á áá ááá ááĽá 5áĽáá áĽá áá ááááŽá˝á á ááŁáá á áááľ ááľáĽ ááá¨áŤ á¨áŚá˛áľ áááł ááŽááá ááá á áá˝áá, áĽá ááá á¨áááŤá°áąáľ ááááᥠáá˝áá.
6. á¨á°ááá°áá¸á ááááŽá˝á áá áá
á¨á°ááá°áá¸á áááá á°á¨á᪠áĽá¨áľ áá ááá ááááŤáąá á áááŹá˝á á¨áááááá áĽáŤááłááąá áĽáŞ ááá¨áľ á ááĽá áŁááá áá áá á áŤááľ á°á áááľá á áĽá á áŤáťá˝áááĄ
ááá áĽá á¨á áá á áľá°ááá áľááá á¨á°ááá°áá¸á áááá á ááŤá¨áĽá áá áá á áŁá ááá¨áŤáᢠá á°áá ááá á¨áá˝á á¨áľáááľ áĽáŞ (ááá á á°áá áŁáá˛áŤ/á ááŤá á áĽáá áááἠááľáĽ áŤá) á á°á¨áᨠááĽá á¨á°á¨áá¨ááľ áááአáááá á áá áľá˘ á á°á¨ááŞá, áĽááá áá á¨áááŞáŤ áááááá áłáááá áááἠáĽá á áĽáá áááἠááľáĽ áŤááľá áá°áŚá˝ ááá ááťáá.
áá á áááŹá˝áá˝áŁ á¨áá°áá áŞáŤá áá á áĽáŽ á¨áááľ áĽá á á ááťá¸á áá á¨á°á°á¨á áĽáŞáá˝á áá á¨áá°á áľáĽ áአááŁáŞáŤ á áŤáᢠáááłáᣠááá¨á°áá áá°áá áŞáŤáĄ-
package main
import "fmt"
func main() {
fmt.Println("test")
}
... áĽáááá gosystract
áĽáá°áá
go install https://github.com/pjbgf/gosystract
gosystract --template='{{- range . }}{{printf ""%s",n" .Name}}{{- end}}' application-path
... áĽá á¨áá¨á°ááá áá¤áľ áĽááááá:
"sched_yield",
"futex",
"write",
"mmap",
"exit_group",
"madvise",
"rt_sigprocmask",
"getpid",
"gettid",
"tgkill",
"rt_sigaction",
"read",
"getpgrp",
"arch_prctl",
áá ááᣠáá á ááľ ááłá áĽáť áá-áľá ááłáŞáŤááš á°á¨á᪠ááááŽá˝ áá¨á°ááá˘
á áá ááá ááĽá 6ጠá¨áááááľá áĽáŞáá˝ áĽáť áááľ áĽá ááá˝á áá á ááľá˘
7. áľáááááá áá á¨áľ áŁá (ááá ááá°á á á áŁá ᪠á°ááá )
á ááľáĄ á¨áťááľ ááá ááá áá á¨ááá ááááŤáá áŤáľááľáłáᢠááá áĽááłá áĽááľá á¨áááááľá á áľááá áŁáááá áĽááłá˘ áááłá áĽáá° áĽáŞáá˝ ááłá¨áťá áŤááą exit
ááá exit_group
, ááŤáŁá á áľááá áĽá áĽáá° ááá áľááá áĽááłá ááááľ á áá˝áá echo hi
á áĽáá°áá
ááááľ áááłáá˝ ááľáĽ á ááľ áááá፠áá° ááłá ááᣠáá˝áá strace
- á˝áአáá ááá áĽáá°áá˝á áŤáłáŤá-
sudo strace -c -p 9331
ááááŤááš á áááŹá˝á á áá°áŤá áľ áá á¨ááááá¸áá áááá á¨áľáááľ áĽáŞáá˝ ááŤáá¸áá áŤá¨áááĄá˘
á áá ááá ááĽá 7ááááá áľáŠá¨áľ ááľáĄ áĽá ááá á áľááá á¨áľáááľ áĽáŞáá˝ á á°ááá°áá¸á áááá ááľáĽ áááá¸áá áŤá¨áááĄá˘
áá á á´áá´ááŚááľ ááááľ á Kubernetes ááľáĽ á´ááŽááá áľááá áá á¨á°á¨áłáłá ááŁáĽáá˝ á¨ááááŞáŤ ááá áŤá ááᢠá áááĽááľ áááá˝ áá ááá á áľááá áĽáá°áá áĽá áá°áąá áĽáá´áľ á áŤáľ-á°á ááľá¨á áĽáá°ááťá áĽáááááŤáá.
PS á¨á°ááá
á áĽááá˝á áá áŤááĽáĄáĄ-
- ÂŤ
ááśá¨á ááŤáŁáá˝ á°á áááľ "; - ÂŤ
33+ Kubernetes á¨á°á áááľ ááłáŞáŤáá˝ "; - ÂŤ
áśá¨á áĽá áŠá áááľáľ á á°á áááľ-á áŤá á áŤáŁá˘áá˝ "; - ÂŤ
9 Kubernetes á°á áááľ ááἠáááśá˝ Âť.
ááá: hab.com