ሴኮምፕ በ Kubernetes: ገና ከመጀመሪያው ማወቅ ያለብዎት 7 ነገሮች

ማስታወሻ. ትርጉምበብሪቲሽ ኩባንያ ASOS.com የአንድ ከፍተኛ የአፕሊኬሽን ደህንነት መሐንዲስ የተተረጎመውን ለእርስዎ ትኩረት እናቀርባለን። በእሱ አማካኝነት በሴክኮፕ አጠቃቀም በኩበርኔትስ ውስጥ ደህንነትን ለማሻሻል የተዘጋጁ ተከታታይ ህትመቶችን ይጀምራል. አንባቢዎች መግቢያውን ከወደዱት, ደራሲውን ተከትለን በዚህ ርዕስ ላይ የወደፊት ጽሑፎቹን እንቀጥላለን.

ሴኮምፕ በ Kubernetes: ገና ከመጀመሪያው ማወቅ ያለብዎት 7 ነገሮች

ይህ መጣጥፍ በሴክዴቭኦፕስ መንፈስ ውስጥ ሴክኮምፕ መገለጫዎችን እንዴት መፍጠር እንደሚቻል ፣ አስማት እና ጥንቆላ ሳይጠቀሙበት በተከታታይ ልጥፎች ውስጥ የመጀመሪያው ነው። በክፍል 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"
        }
    ]
}

(መካከለኛ-መሰረታዊ-ሰከንድ.json)

defaultAction በክፍሉ ውስጥ ያልተገለፀ የማንኛውም የስርዓት ጥሪ ነባሪ እጣ ፈንታ ይወስናል syscalls. ነገሮችን ለማቅለል፣ ጥቅም ላይ በሚውሉ ሁለት ዋና ዋና እሴቶች ላይ እናተኩር፡-

  • SCMP_ACT_ERRNO - የስርዓት ጥሪ አፈፃፀምን ያግዳል ፣
  • SCMP_ACT_ALLOW - ይፈቅዳል.

ክፍል architectures ዒላማ አርክቴክቸር ተዘርዝሯል። ይህ አስፈላጊ ነው ምክንያቱም በከርነል ደረጃ የሚተገበረው ማጣሪያ ራሱ በስርዓት ጥሪ መለያዎች ላይ የተመሰረተ እንጂ በመገለጫው ውስጥ በተገለጹት ስማቸው ላይ አይደለም. ከመጠቀምዎ በፊት የመያዣው የሩጫ ጊዜ ከመለያዎች ጋር ያዛምዳቸዋል። ሀሳቡ የስርዓት ጥሪዎች በስርዓቱ አርክቴክቸር ላይ በመመስረት ሙሉ ለሙሉ የተለያዩ መታወቂያዎች ሊኖራቸው ይችላል። ለምሳሌ, የስርዓት ጥሪ recvfrom (መረጃን ከሶኬት ለመቀበል ጥቅም ላይ የዋለ) መታወቂያ = 64 በ x64 ስርዓቶች እና መታወቂያ = 517 በ x86 ላይ። ይህ ነው ለ x86-x64 አርክቴክቸር ሁሉንም የስርዓት ጥሪዎች ዝርዝር ማግኘት ይችላሉ።

በክፍል ውስጥ 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"
        }
    ]
}

(ሃይ-ፖድ-ሴኮምፕ.json)

...ከእነዚህ ይልቅ፡-

{
    "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"
        }
    ]
}

(ሃይ-container-seccomp.json)

ግን በድጋሚ, ይህ ለምን ችግር አለበት? በግሌ፣ የሚከተሉትን የሥርዓት ጥሪዎች መመዝገብ እቆጠባለሁ (የእነሱ ፍላጎት ከሌለ በቀር) 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"

እባክዎን ኩበርኔትስ ሴኮንድ ሲጠናቀቅ ከላይ ያለው አገባብ እንደሚቀየር ልብ ይበሉ GA ይሆናል (ይህ ክስተት በሚቀጥለው የ Kubernetes ልቀት ይጠበቃል - 1.18 - በግምት. መተርጎም).

ኩበርኔትስ ሁል ጊዜ እንደነበረው ጥቂት ሰዎች ያውቃሉ ሳንካሴክኮምፕ መገለጫዎች እንዲተገበሩ ያደረገው መያዣውን ለአፍታ አቁም. የሩጫ አካባቢው በከፊል ለዚህ ጉድለት ማካካሻ ነው, ነገር ግን ይህ ኮንቴይነር መሠረተ ልማታቸውን ለማዋቀር ስለሚውል ከፖድ ውስጥ አይጠፋም.

ችግሩ ይህ መያዣ ሁልጊዜ የሚጀምረው በ 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. ያልተገደበ አማራጭ አይደለም.

ከ የመጀመሪያው Kubernetes የደህንነት ኦዲት በነባሪነት ተገኘ ሰከንድ ተሰናክሏል. ይህ ማለት ካላቀናበሩ ማለት ነው PodSecurityPolicy, በክላስተር ውስጥ እንዲሰራ ያስችለዋል, ሁሉም የሴክኮም ፕሮፋይል ያልተገለፀባቸው ፖድዎች በ ውስጥ ይሰራሉ. seccomp=unconfined.

በዚህ ሁነታ መስራት ማለት ክላስተርን የሚከላከለው አንድ ሙሉ የንጥል ሽፋን ጠፍቷል ማለት ነው. ይህ አካሄድ በደህንነት ባለሙያዎች አይመከርም።

ጠቃሚ ምክር ቁጥር 4በክላስተር ውስጥ ያለ ማንኛውም ኮንቴይነር መግባት የለበትም seccomp=unconfinedበተለይም በምርት አካባቢዎች.

5. "የኦዲት ሁነታ"

ይህ ነጥብ ለኩበርኔትስ ልዩ አይደለም, ነገር ግን አሁንም "ከመጀመርዎ በፊት ማወቅ ያለባቸው ነገሮች" ምድብ ውስጥ ይወድቃል.

እንደተከሰተ፣ የሴክኮምፕ መገለጫዎችን መፍጠር ሁልጊዜም ፈታኝ ነው እና በሙከራ እና ስህተት ላይ በእጅጉ ይተማመናል። እውነታው ግን ተጠቃሚዎች አፕሊኬሽኑን "መጣል" አደጋ ላይ ሳይጥሉ በምርት አካባቢዎች ውስጥ የመሞከር እድል የላቸውም.

የሊኑክስ ከርነል 4.14 ከተለቀቀ በኋላ የኦዲት ሞድ ውስጥ የመገለጫ ክፍሎችን ማሄድ ተችሏል ፣ ስለ ሁሉም የስርዓት ጥሪዎች መረጃ በ syslog ውስጥ መመዝገብ ፣ ግን እነሱን ሳያግዱ። መለኪያውን በመጠቀም ይህንን ሁነታ ማግበር ይችላሉ SCMT_ACT_LOG:

SCMP_ACT_LOG: ሴክኮም በማጣሪያው ውስጥ ካለ ማንኛውም ህግ ጋር ካልተዛመደ የስርዓቱ ጥሪ በሚያደርገው ክር ላይ ተጽዕኖ አይኖረውም ነገር ግን ስለ ስርዓቱ ጥሪ መረጃ ይመዘገባል።

ይህንን ባህሪ ለመጠቀም የተለመደ ስልት ይኸውና፡

  1. የሚያስፈልጉትን የስርዓት ጥሪዎች ፍቀድ።
  2. የሚያውቁት ስርዓት ጥሪዎችን አግድ ጠቃሚ አይሆንም።
  3. በምዝግብ ማስታወሻው ውስጥ ስለሌሎች ጥሪዎች ሁሉ መረጃ ይመዝግቡ።

ቀለል ያለ ምሳሌ ይህንን ይመስላል።

{
    "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"
        }
    ]
}

(መካከለኛ-ድብልቅ-ሴክኮም.json)

ነገር ግን ጥቅም ላይ እንደማይውሉ የሚያውቁትን እና ክላስተርን ሊጎዱ የሚችሉ ሁሉንም ጥሪዎች ማገድ እንዳለቦት ያስታውሱ። ዝርዝርን ለማዘጋጀት ጥሩ መሠረት ኦፊሴላዊው ነው Docker ሰነድ. በነባሪ መገለጫ ውስጥ የትኞቹ የስርዓት ጥሪዎች እንደታገዱ እና ለምን እንደሆነ በዝርዝር ያብራራል.

ሆኖም, አንድ መያዝ አለ. ቢሆንም SCMT_ACT_LOG ከ 2017 መገባደጃ ጀምሮ በሊኑክስ ከርነል የተደገፈ፣ ወደ Kubernetes ስነ-ምህዳር የገባው በአንጻራዊ በቅርብ ጊዜ ነው። ስለዚህ ይህንን ዘዴ ለመጠቀም ሊኑክስ ከርነል 4.14 እና runC ስሪት ምንም ያነሰ ያስፈልግዎታል v1.0.0-rc9.

ጠቃሚ ምክር ቁጥር 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 ስልኩን ስቀለውo ላልተወሰነ ጊዜ። በውጤቱም፣ በክላስተር ውስጥ ከፍተኛ የሲፒዩ አጠቃቀም ያገኛሉ፡-

ሴኮምፕ በ Kubernetes: ገና ከመጀመሪያው ማወቅ ያለብዎት 7 ነገሮች

በእንደዚህ ዓይነት ሁኔታዎች ውስጥ አንድ መገልገያ ወደ ማዳን ሊመጣ ይችላል strace - ችግሩ ምን ሊሆን እንደሚችል ያሳያል-

ሴኮምፕ በ Kubernetes: ገና ከመጀመሪያው ማወቅ ያለብዎት 7 ነገሮች
sudo strace -c -p 9331

መገለጫዎቹ አፕሊኬሽኑ በሚሰራበት ጊዜ የሚፈልጓቸውን ሁሉንም የስርዓት ጥሪዎች መያዛቸውን ያረጋግጡ።

ጠቃሚ ምክር ቁጥር 7ለዝርዝር ትኩረት ይስጡ እና ሁሉም አስፈላጊ የስርዓት ጥሪዎች በተፈቀደላቸው ዝርዝር ውስጥ መሆናቸውን ያረጋግጡ።

ይህ በሴክዴቭኦፕስ መንፈስ በ Kubernetes ውስጥ ሴክኮምፕን ስለመጠቀም የተከታታይ መጣጥፎች የመጀመሪያ ክፍል ያበቃል። በሚቀጥሉት ክፍሎች ይህ ለምን አስፈላጊ እንደሆነ እና ሂደቱን እንዴት በራስ-ሰር ማድረግ እንደሚቻል እንነጋገራለን.

PS ከተርጓሚ

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ