เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชธเซเชฐเช•เซเชทเชพเชจเซเช‚ เชเชฌเซ€เชธเซ€: เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ, เช…เชงเชฟเช•เซƒเชคเชคเชพ, เช“เชกเชฟเชŸเซ€เช‚เช—

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชธเซเชฐเช•เซเชทเชพเชจเซเช‚ เชเชฌเซ€เชธเซ€: เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ, เช…เชงเชฟเช•เซƒเชคเชคเชพ, เช“เชกเชฟเชŸเซ€เช‚เช—

เชตเชนเซ‡เชฒเชพ เช…เชฅเชตเชพ เชชเช›เซ€เชจเชพ เชธเชฎเชฏเชฎเชพเช‚, เช•เซ‹เชˆเชชเชฃ เชธเชฟเชธเซเชŸเชฎเชจเชพ เชธเช‚เชšเชพเชฒเชจเชฎเชพเช‚, เชธเซเชฐเช•เซเชทเชพเชจเซ‹ เชฎเซเชฆเซเชฆเซ‹ เช‰เชญเซ‹ เชฅเชพเชฏ เช›เซ‡: เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ, เช…เชงเชฟเช•เชพเชฐเซ‹เชจเซเช‚ เชตเชฟเชญเชพเชœเชจ, เช‘เชกเชฟเชŸเชฟเช‚เช— เช…เชจเซ‡ เช…เชจเซเชฏ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเซ€. Kubernetes เชฎเชพเชŸเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฌเชจเชพเชตเซ‡เชฒ เช›เซ‡ เช˜เชฃเชพ เช‰เช•เซ‡เชฒเซ‹, เชœเซ‡ เชคเชฎเชจเซ‡ เช–เซ‚เชฌ เชœ เชฎเชพเช‚เช—เชตเชพเชณเชพ เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เชชเชฃ เชงเซ‹เชฐเชฃเซ‹เชจเซเช‚ เชชเชพเชฒเชจ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡... เชธเชฎเชพเชจ เชธเชพเชฎเช—เซเชฐเซ€ K8s เชจเซ€ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเซเชธเชฎเชพเช‚ เชฒเชพเช—เซ เชธเซเชฐเช•เซเชทเชพเชจเชพ เชฎเซ‚เชณเชญเซ‚เชค เชชเชพเชธเชพเช“เชจเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เช›เซ‡. เชธเซŒ เชชเซเชฐเชฅเชฎ, เชคเซ‡ เชเชตเชพ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡ เช•เซ‡ เชœเซ‡เช“ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เชชเชฐเชฟเชšเชฟเชค เชฅเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡ - เชธเซเชฐเช•เซเชทเชพ-เชธเช‚เชฌเช‚เชงเชฟเชค เชฎเซเชฆเซเชฆเชพเช“เชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฌเชฟเช‚เชฆเซ เชคเชฐเซ€เช•เซ‡.

เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชฌเซ‡ เชชเซเชฐเช•เชพเชฐเชจเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เช›เซ‡:

  • เชธเซ‡เชตเชพ เชเช•เชพเช‰เชจเซเชŸเซเชธ - เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ API เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค เชเช•เชพเช‰เชจเซเชŸเซเชธ;
  • เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ - "เชธเชพเชฎเชพเชจเซเชฏ" เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฌเชพเชนเซเชฏ, เชธเซเชตเชคเช‚เชคเซเชฐ เชธเซ‡เชตเชพเช“ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค.

เช† เชชเซเชฐเช•เชพเชฐเซ‹ เชตเชšเซเชšเซ‡เชจเซ‹ เชฎเซเช–เซเชฏ เชคเชซเชพเชตเชค เช เช›เซ‡ เช•เซ‡ เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸเซเชธ เชฎเชพเชŸเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ API เชฎเชพเช‚ เชตเชฟเชถเชฟเชทเซเชŸ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เช›เซ‡ (เชคเซ‡เชจเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ - ServiceAccounts), เชœเซ‡ เชจเซ‡เชฎเชธเซเชชเซ‡เชธ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡ เช…เชจเซ‡ เชธเชฟเช•เซเชฐเซ‡เชŸเซเชธ เชชเซเชฐเช•เชพเชฐเชจเชพ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชฎเชพเช‚ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช…เชงเชฟเช•เซƒเชค เชกเซ‡เชŸเชพเชจเชพ เชธเชฎเซ‚เชน เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡. เช†เชตเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ (เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸเซเชธ) เชฎเซเช–เซเชฏเชคเซเชตเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชšเชพเชฒเชคเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเชพ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ API เชจเชพ เชเช•เซเชธเซ‡เชธ เช…เชงเชฟเช•เชพเชฐเซ‹เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชชเชพเชธเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ API เชฎเชพเช‚ เชเชจเซเชŸเซเชฐเซ€เช“ เชนเซ‹เชคเซ€ เชจเชฅเซ€: เชคเซ‡เช“ เชฌเชพเชนเซเชฏ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเซเชธ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค เชนเซ‹เชตเชพ เชœเซ‹เชˆเช. เชคเซ‡เช“ เช•เซเชฒเชธเซเชŸเชฐเชจเซ€ เชฌเชนเชพเชฐ เชฐเชนเซ‡เชคเชพ เชฒเซ‹เช•เซ‹ เช…เชฅเชตเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชฎเชพเชŸเซ‡ เชฌเชจเชพเชตเชพเชฏเซ‡เชฒ เช›เซ‡.

เชฆเชฐเซ‡เช• API เชตเชฟเชจเช‚เชคเซ€ เช•เชพเช‚ เชคเซ‹ เชธเซ‡เชตเชพ เช–เชพเชคเชพ, เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เช›เซ‡ เช…เชฅเชตเชพ เช…เชจเชพเชฎเซ€ เช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชกเซ‡เชŸเชพเชฎเชพเช‚ เชถเชพเชฎเซ‡เชฒ เช›เซ‡:

  • เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชจเชพเชฎ โ€” เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชจเชพเชฎ (เช•เซ‡เชธ เชธเซ‡เชจเซเชธเชฟเชŸเชฟเชต!);
  • เชฏเซ.เช†เช‡.เชกเซ€. - เชฎเชถเซ€เชจ เชฆเซเชตเชพเชฐเชพ เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซ€ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช“เชณเช– เชธเซเชŸเซเชฐเชฟเช‚เช— เช•เซ‡ เชœเซ‡ "เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพเชฎ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชธเซเชธเช‚เช—เชค เช…เชจเซ‡ เช…เชจเชจเซเชฏ" เช›เซ‡;
  • เชœเซ‚เชฅเซ‹ โ€” เชœเซ‚เชฅเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เช•เซ‡ เชœเซ‡เชจเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเช‚เชฌเช‚เชง เชงเชฐเชพเชตเซ‡ เช›เซ‡;
  • เชตเชฟเชถเซ‡เชท โ€” เชตเชงเชพเชฐเชพเชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เช•เซ‡ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช…เชงเชฟเช•เซƒเชคเชคเชพ เชชเชฆเซเชงเชคเชฟ เชฆเซเชตเชพเชฐเชพ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชชเชฆเซเชงเชคเชฟเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡: X509 เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹, เชฌเซ‡เชฐเชฐ เชŸเซ‹เช•เชจเซเชธ, เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชชเซเชฐเซ‹เช•เซเชธเซ€, HTTP เชฎเซ‚เชณเชญเซ‚เชค เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ. เช† เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชคเชฎเซ‡ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชฏเซ‹เชœเชจเชพเช“ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ€ เชถเช•เซ‹ เช›เซ‹: เชชเชพเชธเชตเชฐเซเชกเซเชธ เชธเชพเชฅเซ‡เชจเซ€ เชธเซเชฅเชฟเชฐ เชซเชพเช‡เชฒเชฅเซ€ OpenID OAuth2 เชธเซเชงเซ€.

เชคเชฆเซเชชเชฐเชพเช‚เชค, เชเช• เชธเชพเชฅเซ‡ เช…เชจเซ‡เช• เช…เชงเชฟเช•เซƒเชคเชคเชพ เชฏเซ‹เชœเชจเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชถเช•เซเชฏ เช›เซ‡. เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, เช•เซเชฒเชธเซเชŸเชฐ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡:

  • เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸ เชŸเซ‹เช•เชจเซเชธ - เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸเซเชธ เชฎเชพเชŸเซ‡;
  • X509 - เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡.

เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸเซเชธ เชฎเซ‡เชจเซ‡เชœ เช•เชฐเชตเชพ เชตเชฟเชถเซ‡เชจเซ‹ เชชเซเชฐเชถเซเชจ เช† เชฒเซ‡เช–เชจเชพ เช…เชตเช•เชพเชถเชจเซ€ เชฌเชนเชพเชฐ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซ‡เช“ เช† เชฎเซเชฆเซเชฆเชพเชฅเซ€ เชชเซ‹เชคเชพเชจเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชชเชฐเชฟเชšเชฟเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡, เชนเซเช‚ เช†เชจเชพเชฅเซ€ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชชเซƒเชทเซเช เซ‹. X509 เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชฎเซเชฆเซเชฆเชพเชจเซ‡ เช…เชฎเซ‡ เชจเชœเซ€เช•เชฅเซ€ เชœเซ‹เชˆเชถเซเช‚.

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ (X.509)

เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เช•เซเชฒเชพเชธเชฟเช• เชฐเซ€เชคเชฎเชพเช‚ เชถเชพเชฎเซ‡เชฒ เช›เซ‡:

  • เช•เซ€ เชชเซ‡เชขเซ€:
    mkdir -p ~/mynewuser/.certs/
    openssl genrsa -out ~/.certs/mynewuser.key 2048
  • เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชตเชฟเชจเช‚เชคเซ€ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช:
    openssl req -new -key ~/.certs/mynewuser.key -out ~/.certs/mynewuser.csr -subj "/CN=mynewuser/O=company"
  • เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐ CA เช•เซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชตเชฟเชจเช‚เชคเซ€ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเซ€, เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชฎเซ‡เชณเชตเชตเซเช‚ (เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชเชตเชพ เชเช•เชพเช‰เชจเซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เช†เชตเชถเซเชฏเช• เช›เซ‡ เช•เซ‡ เชœเซ‡เชจเซ€ เชชเชพเชธเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐ CA เช•เซ€เชจเซ€ เชเช•เซเชธเซ‡เชธ เชนเซ‹เชฏ, เชœเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชธเซเชฅเชฟเชค เช›เซ‡ /etc/kubernetes/pki/ca.key):
    openssl x509 -req -in ~/.certs/mynewuser.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out ~/.certs/mynewuser.crt -days 500
  • เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡:
    • เช•เซเชฒเชธเซเชŸเชฐ เชตเชฐเซเชฃเชจ (เชšเซ‹เช•เซเช•เชธ เช•เซเชฒเชธเซเชŸเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฎเชพเชŸเซ‡ CA เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชซเชพเช‡เชฒเชจเซเช‚ เชธเชฐเชจเชพเชฎเซเช‚ เช…เชจเซ‡ เชธเซเชฅเชพเชจ เชธเซเชชเชทเซเชŸ เช•เชฐเซ‹):
      kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --server=https://192.168.100.200:6443
    • เช…เชฅเชตเชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชจเชฅเซ€เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡เชฒ เชตเชฟเช•เชฒเซเชช - เชคเชฎเชพเชฐเซ‡ เชฐเซ‚เชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€ (เชชเช›เซ€ kubectl เช•เซเชฒเชธเซเชŸเชฐเชจเชพ api-เชธเชฐเซเชตเชฐเชจเซ€ เชถเซเชฆเซเชงเชคเชพ เชคเชชเชพเชธเชถเซ‡ เชจเชนเซ€เช‚):
      kubectl config set-cluster kubernetes  --insecure-skip-tls-verify=true --server=https://192.168.100.200:6443
    • เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชฎเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เช‰เชฎเซ‡เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡:
      kubectl config set-credentials mynewuser --client-certificate=.certs/mynewuser.crt  --client-key=.certs/mynewuser.key
    • เชธเช‚เชฆเชฐเซเชญ เช‰เชฎเซ‡เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡:
      kubectl config set-context mynewuser-context --cluster=kubernetes --namespace=target-namespace --user=mynewuser
    • เชกเชฟเชซเซ‰เชฒเซเชŸ เชธเช‚เชฆเชฐเซเชญ เชธเซ‹เช‚เชชเชฃเซ€:
      kubectl config use-context mynewuser-context

เช‰เชชเชฐเซ‹เช•เซเชค เชฎเซ‡เชจเชฟเชชเซเชฏเซเชฒเซ‡เชถเชจเซเชธ เชชเช›เซ€, เชซเชพเช‡เชฒเชฎเชพเช‚ .kube/config เช†เชจเชพ เชœเซ‡เชตเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /etc/kubernetes/pki/ca.crt
    server: https://192.168.100.200:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: target-namespace
    user: mynewuser
  name: mynewuser-context
current-context: mynewuser-context
kind: Config
preferences: {}
users:
- name: mynewuser
  user:
    client-certificate: /home/mynewuser/.certs/mynewuser.crt
    client-key: /home/mynewuser/.certs/mynewuser.key

เชเช•เชพเช‰เชจเซเชŸเซเชธ เช…เชจเซ‡ เชธเชฐเซเชตเชฐเซเชธ เชตเชšเซเชšเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชจเซ€เชšเซ‡เชจเซ€ เช•เซ€เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเชตเซเช‚ เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡:

  • certificate-authority
  • client-certificate
  • client-key

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชฌเซ‡เช 64 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชเชจเซเช•เซ‹เชก เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเชฎเชพเช‚ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช•เซ€เชจเชพ เชจเชพเชฎเชฎเชพเช‚ เชชเซเชฐเชคเซเชฏเชฏ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. -data, เชเชŸเชฒเซ‡ เช•เซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซเชฏเชพ certificate-authority-data เช…เชจเซ‡ เชœเซ‡เชฎ

kubeadm เชธเชพเชฅเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹

เชชเซเชฐเช•เชพเชถเชจ เชธเชพเชฅเซ‡ เช•เซเชฌเชฐเซเชจเซ€เชŸเซเชธ 1.15 เชฎเชพเช‚ เชคเซ‡เชจเชพ เชธเชฎเชฐเซเชฅเชจเชจเชพ เช†เชฒเซเชซเชพ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เชตเชงเซ เชธเชฐเชณ เชฌเชจเซเชฏเซเช‚ เช›เซ‡ kubeadm เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฏเซเชเชฐ เช•เซ€ เชตเชกเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชจเซเช‚ เชนเชตเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชถเซ‡:

kubeadm alpha kubeconfig user --client-name=mynewuser --apiserver-advertise-address 192.168.100.200

NB: เชœเชฐเซ‚เชฐเซ€ เชธเชฐเชจเชพเชฎเซเช‚ เชœเชพเชนเซ‡เชฐเชพเชค เช•เชฐเซ‹ api-server เชฐเซ‚เชชเชฐเซ‡เช–เชพเชฎเชพเช‚ เชถเซ‹เชงเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชœเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชธเซเชฅเชฟเชค เช›เซ‡ /etc/kubernetes/manifests/kube-apiserver.yaml.

เชชเชฐเชฟเชฃเชพเชฎเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพ stdout เชฎเชพเช‚ เช†เช‰เชŸเชชเซเชŸ เชฅเชถเซ‡. เชคเซ‡ เชฎเชพเช‚ เชธเชพเชšเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ ~/.kube/config เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช–เชพเชคเซเช‚ เช…เชฅเชตเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชซเชพเช‡เชฒเชฎเชพเช‚ KUBECONFIG.

เชตเชงเซ เชŠเช‚เชกเชพ เช–เซ‹เชฆเชตเซเช‚

เชœเซ‡เช“ เชตเชงเซ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชตเชฐเซเชฃเชตเซ‡เชฒ เชฎเซเชฆเซเชฆเชพเช“เชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡:

เช…เชงเชฟเช•เซƒเชคเชคเชพ

เชกเชฟเชซเซ‰เชฒเซเชŸ เช…เชงเชฟเช•เซƒเชค เชเช•เชพเช‰เชจเซเชŸ เชชเชพเชธเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชชเชฐ เช•เชพเชฎ เช•เชฐเชตเชพเชจเชพ เช…เชงเชฟเช•เชพเชฐเซ‹ เชจเชฅเซ€. เชชเชฐเชตเชพเชจเช—เซ€เช“ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡, Kubernetes เชเช• เช…เชงเชฟเช•เซƒเชคเชคเชพ เชชเชฆเซเชงเชคเชฟ เชฒเชพเช—เซ เช•เชฐเซ‡ เช›เซ‡.

เชธเช‚เชธเซเช•เชฐเชฃ 1.6 เชชเชนเซ‡เชฒเชพ, เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชจเชพเชฎเชจเชพ เช…เชงเชฟเช•เซƒเชค เชชเซเชฐเช•เชพเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเชพ เชนเชคเชพ ABAC (เชเชŸเซเชฐเซ€เชฌเซเชฏเซเชŸ เช†เชงเชพเชฐเชฟเชค เชเช•เซเชธเซ‡เชธ เช•เช‚เชŸเซเชฐเซ‹เชฒ). เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡เชจเซ€ เชตเชฟเช—เชคเซ‹ เชคเซ‡เชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ. เช† เช…เชญเชฟเช—เชฎ เชนเชพเชฒเชฎเชพเช‚ เชฒเซ‡เช—เชธเซ€ เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเชฎเซ‡ เชนเชœเซ เชชเชฃ เช…เชจเซเชฏ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชชเซเชฐเช•เชพเชฐเซ‹ เชธเชพเชฅเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เช•เซเชฒเชธเซเชŸเชฐเชจเชพ เชเช•เซเชธเซ‡เชธ เช…เชงเชฟเช•เชพเชฐเซ‹เชจเซ‡ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชตเชฐเซเชคเชฎเชพเชจ (เช…เชจเซ‡ เชตเชงเซ เชฒเชตเชšเซ€เช•) เชฐเซ€เชค เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช†เชฐเชฌเซ€เชเชธเซ€ (เชญเซ‚เชฎเชฟเช•เชพ-เช†เชงเชพเชฐเชฟเชค เชเช•เซเชธเซ‡เชธ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ). เชธเช‚เชธเซเช•เชฐเชฃเชฅเซ€ เชคเซ‡เชจเซ‡ เชธเซเชฅเชฟเชฐ เชœเชพเชนเซ‡เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช•เซเชฌเชฐเซเชจเซ€เชŸเซเชธ 1.8. RBAC เชเช• เชฐเชพเช‡เชŸเซเชธ เชฎเซ‹เชกเชฒ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เชจ เชนเซ‹เชฏ เชคเซ‡เชตเซ€ เชฆเชฐเซ‡เช• เชตเชธเซเชคเซ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เช›เซ‡.
RBAC เชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชธเชพเชฅเซ‡ Kubernetes api-server เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ --authorization-mode=RBAC. เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸเชฎเชพเช‚ เชธเซ‡เชŸ เช•เชฐเซ‡เชฒ เช›เซ‡, เชœเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชชเชพเชฅ เชธเชพเชฅเซ‡ เชธเซเชฅเชฟเชค เช›เซ‡ /etc/kubernetes/manifests/kube-apiserver.yaml, เชตเชฟเชญเชพเช—เชฎเชพเช‚ command. เชœเซ‹ เช•เซ‡, RBAC เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เชธเช•เซเชทเชฎ เช›เซ‡, เชคเซ‡เชฅเซ€ เชธเช‚เชญเชตเชคเชƒ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชšเชฟเช‚เชคเชพ เชจ เช•เชฐเชตเซ€ เชœเซ‹เชˆเช: เชคเชฎเซ‡ เช†เชจเซ‡ เชฎเซ‚เชฒเซเชฏ เชฆเซเชตเชพเชฐเชพ เชšเช•เชพเชธเซ€ เชถเช•เซ‹ เช›เซ‹ authorization-mode (เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ kube-apiserver.yaml). เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เชคเซ‡เชจเชพ เช…เชฐเซเชฅเซ‹เชฎเชพเช‚ เช…เชจเซเชฏ เชชเซเชฐเช•เชพเชฐเชจเซ€ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ (node, webhook, always allow), เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ€ เชตเชฟเชšเชพเชฐเชฃเชพเชจเซ‡ เชธเชพเชฎเช—เซเชฐเซ€เชจเชพ เช…เชตเช•เชพเชถเชจเซ€ เชฌเชนเชพเชฐ เช›เซ‹เชกเซ€เชถเซเช‚.

เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เช…เชฎเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เชเช• เชฒเซ‡เช– RBAC เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹ เช…เชจเซ‡ เชตเชฟเชถเซ‡เชทเชคเชพเช“เชจเชพ เชเช•เชฆเชฎ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เชธเชพเชฅเซ‡, เชคเซ‡เชฅเซ€ เช†เช—เชณ เชนเซเช‚ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฌเชพเชฌเชคเซ‹ เช…เชจเซ‡ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ€ เชธเช‚เช•เซเชทเชฟเชชเซเชค เชธเซ‚เชšเชฟ เชธเซเชงเซ€ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช•เชฐเซ€เชถ.

เชจเซ€เชšเซ‡เชจเซ€ API เชเช•เชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— RBAC เชฎเชพเชฐเชซเชค เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชเช•เซเชธเซ‡เชธเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡:

  • Role ะธ ClusterRole - เชญเซ‚เชฎเชฟเช•เชพเช“ เชœเซ‡ เชเช•เซเชธเซ‡เชธ เช…เชงเชฟเช•เชพเชฐเซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡:
  • Role เชคเชฎเชจเซ‡ เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชฎเชพเช‚ เช…เชงเชฟเช•เชพเชฐเซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡;
  • ClusterRole - เช•เซเชฒเชธเซเชŸเชฐเชจเซ€ เช…เช‚เชฆเชฐ, เช•เซเชฒเชธเซเชŸเชฐ-เชตเชฟเชถเชฟเชทเซเชŸ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เชœเซ‡เชฎ เช•เซ‡ เชจเซ‹เชกเซเชธ, เชฌเชฟเชจ-เชธเช‚เชธเชพเชงเชจ url (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชธเช‚เชธเชพเชงเชจเซ‹เชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชจเชฅเซ€ - เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, /version, /logs, /api*);
  • RoleBinding ะธ ClusterRoleBinding - เชฌเช‚เชงเชจ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡ Role ะธ ClusterRole เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ, เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชœเซ‚เชฅ เช…เชฅเชตเชพ เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸ เชฎเชพเชŸเซ‡.

เชฐเซ‹เชฒ เช…เชจเซ‡ เชฐเซ‹เชฒเชฌเชพเชˆเชจเซเชกเชฟเช‚เช— เชเชจเซเชŸเชฟเชŸเซ€ เชจเซ‡เชฎเชธเซเชชเซ‡เชธ เชฆเซเชตเชพเชฐเชพ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡. เช เชœ เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชจเซ€ เช…เช‚เชฆเชฐ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช. เชœเซ‹ เช•เซ‡, เชฐเซ‹เชฒเชฌเชพเช‡เชจเซเชกเชฟเช‚เช— เช•เซเชฒเชธเซเชŸเชฐเชฐเซ‹เชฒเชจเซ‹ เชธเช‚เชฆเชฐเซเชญ เช†เชชเซ€ เชถเช•เซ‡ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชชเชฐเชตเชพเชจเช—เซ€เช“เชจเซ‹ เชธเชฎเซ‚เชน เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเช•เซเชธเซ‡เชธเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชญเซ‚เชฎเชฟเช•เชพเช“ เชธเชฎเชพเชตเชฟเชทเซเชŸ เชจเชฟเชฏเชฎเซ‹เชจเชพ เชธเซ‡เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชงเชฟเช•เชพเชฐเซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡:

  • API เชœเซ‚เชฅเซ‹ - เชœเซเช“ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ apiGroups เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชฆเซเชตเชพเชฐเชพ kubectl api-resources;
  • เชธเช‚เชธเชพเชงเชจเซ‹ (เชธเซเชฐเซ‹เชคเซ‹: pod, namespace, deployment เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชตเชงเซ.);
  • เช•เซเชฐเชฟเชฏเชพเชชเชฆเซ‹ (เช•เซเชฐเชฟเชฏเชพเชชเชฆ: set, update เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชตเชงเซ.).
  • เชธเช‚เชธเชพเชงเชจ เชจเชพเชฎเซ‹ (resourceNames) - เชคเซ‡ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เช•เซ‹เชˆ เชตเชฟเชถเชฟเชทเซเชŸ เชธเช‚เชธเชพเชงเชจเชจเซ€ เชเช•เซเชธเซ‡เชธ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เช…เชจเซ‡ เช† เชชเซเชฐเช•เชพเชฐเชจเชพ เชคเชฎเชพเชฎ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‡ เชจเชนเซ€เช‚.

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เช…เชงเชฟเช•เซƒเชคเชคเชพเชจเซเช‚ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชชเซƒเชทเซเช  เชชเชฐ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ. เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡ (เช…เชฅเชตเชพ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เช† เช‰เชชเชฐเชพเช‚เชค), เชนเซเช‚ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช†เชชเซ€เชถ เชœเซ‡ เชคเซ‡เชจเชพ เช•เชพเชฐเซเชฏเชจเซ‡ เชธเชฎเชœเชพเชตเซ‡ เช›เซ‡.

RBAC เชเช•เชฎเซ‹เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹

เชธเชฐเชณ Role, เชœเซ‡ เชคเชฎเชจเซ‡ เชชเซ‹เชกเซเชธเชจเซ€ เชธเซ‚เชšเชฟ เช…เชจเซ‡ เชธเซเชฅเชฟเชคเชฟ เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เช…เชจเซ‡ เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชฎเชพเช‚ เชคเซ‡เชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ target-namespace:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: target-namespace
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

เช‰เชฆเชพเชนเชฐเชฃ: ClusterRole, เชœเซ‡ เชคเชฎเชจเซ‡ เชชเซ‹เชกเซเชธเชจเซ€ เชธเซ‚เชšเชฟ เช…เชจเซ‡ เชธเซเชฅเชฟเชคเชฟ เชฎเซ‡เชณเชตเชตเชพ เช…เชจเซ‡ เชธเชฎเช—เซเชฐ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชคเซ‡เชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  # ัะตะบั†ะธะธ "namespace" ะฝะตั‚, ั‚ะฐะบ ะบะฐะบ ClusterRole ะทะฐะดะตะนัั‚ะฒัƒะตั‚ ะฒะตััŒ ะบะปะฐัั‚ะตั€
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

เช‰เชฆเชพเชนเชฐเชฃ: RoleBinding, เชœเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡ mynewuser เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชฎเชพเช‚ เชชเซ‹เชกเซเชธ "เชตเชพเช‚เชšเซ‹". my-namespace:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: target-namespace
subjects:
- kind: User
  name: mynewuser # ะธะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะทะฐะฒะธัะธะผะพ ะพั‚ ั€ะตะณะธัั‚ั€ะฐ!
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role # ะทะดะตััŒ ะดะพะปะถะฝะพ ะฑั‹ั‚ัŒ โ€œRoleโ€ ะธะปะธ โ€œClusterRoleโ€
  name: pod-reader # ะธะผั Role, ั‡ั‚ะพ ะฝะฐั…ะพะดะธั‚ัั ะฒ ั‚ะพะผ ะถะต namespace,
                   # ะธะปะธ ะธะผั ClusterRole, ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต ะบะพั‚ะพั€ะพะน
                   # ั…ะพั‚ะธะผ ั€ะฐะทั€ะตัˆะธั‚ัŒ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŽ
  apiGroup: rbac.authorization.k8s.io

เช‡เชตเซ‡เชจเซเชŸ เช“เชกเชฟเชŸ

เชฏเซ‹เชœเชจเชพเช•เซ€เชฏ เชฐเซ€เชคเซ‡, เช•เซเชฌเชฐเชจเซ‡เชŸเซ€เชธ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเชจเซ‡ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เชฐเชœเซ‚ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชธเซเชฐเช•เซเชทเชพเชจเซเช‚ เชเชฌเซ€เชธเซ€: เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ, เช…เชงเชฟเช•เซƒเชคเชคเชพ, เช“เชกเชฟเชŸเซ€เช‚เช—

เชตเชฟเชจเช‚เชคเซ€เช“ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เชฎเซเช–เซเชฏ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช˜เชŸเช• เช›เซ‡ api-เชธเชฐเซเชตเชฐ. เช•เซเชฒเชธเซเชŸเชฐ เชชเชฐเชจเซ€ เชคเชฎเชพเชฎ เช•เชพเชฎเช—เซ€เชฐเซ€ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡. เชคเชฎเซ‡ เชฒเซ‡เช–เชฎเชพเช‚ เช† เช†เช‚เชคเชฐเชฟเช• เชชเชฆเซเชงเชคเชฟเช“ เชตเชฟเชถเซ‡ เชตเชงเซ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹ โ€œเชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ kubectl เชฐเชจ เชšเชฒเชพเชตเซ‹ เช›เซ‹ เชคเซเชฏเชพเชฐเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชถเซเช‚ เชฅเชพเชฏ เช›เซ‡?ยป.

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชธเชฟเชธเซเชŸเชฎ เช“เชกเชฟเชŸเซ€เช‚เช— เช เชเช• เชฐเชธเชชเซเชฐเชฆ เชธเซเชตเชฟเชงเชพ เช›เซ‡, เชœเซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เช…เช•เซเชทเชฎ เช›เซ‡. เชคเซ‡ เชคเชฎเชจเซ‡ Kubernetes API เชฎเชพเช‚ เชคเชฎเชพเชฎ เช•เซ‰เชฒเซเชธเชจเซ‡ เชฒเซ‰เช— เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชœเซ‡เชฎ เชคเชฎเซ‡ เช…เชจเซเชฎเชพเชจ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช•เซเชฒเชธเซเชŸเชฐเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพ เช…เชจเซ‡ เชฌเชฆเชฒเชตเชพเชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชคเชฎเชพเชฎ เช•เซเชฐเชฟเชฏเชพเช“ เช† API เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเซ‡เชจเซ€ เช•เซเชทเชฎเชคเชพเช“เชจเซเช‚ เชธเชพเชฐเซเช‚ เชตเชฐเซเชฃเชจ (เชนเช‚เชฎเซ‡เชถเชจเซ€ เชœเซ‡เชฎ) เชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ K8s. เช†เช—เชณ, เชนเซเช‚ เชตเชฟเชทเชฏเชจเซ‡ เชธเชฐเชณ เชญเชพเชทเชพเชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถ.

เช…เชจเซ‡ เชคเซ‡เชฅเซ€, เช“เชกเชฟเชŸเซ€เช‚เช— เชธเช•เซเชทเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเชพเชฐเซ‡ เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐเชฎเชพเช‚ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เชคเซเชฐเชฃ เชœเชฐเซ‚เชฐเซ€ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡ เชจเซ€เชšเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡:

  • --audit-policy-file=/etc/kubernetes/policies/audit-policy.yaml
  • --audit-log-path=/var/log/kube-audit/audit.log
  • --audit-log-format=json

เช† เชคเซเชฐเชฃ เชœเชฐเซ‚เชฐเซ€ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช‰เชชเชฐเชพเช‚เชค, เช‘เชกเชฟเชŸเชฟเช‚เช— เชธเช‚เชฌเช‚เชงเชฟเชค เช˜เชฃเซ€ เชตเชงเชพเชฐเชพเชจเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช›เซ‡: เชฒเซ‹เช— เชฐเซ‹เชŸเซ‡เชถเชจเชฅเซ€ เชตเซ‡เชฌเชนเซ‚เช• เชตเชฐเซเชฃเชจเซ‹. เชฒเซ‹เช— เชฐเซ‹เชŸเซ‡เชถเชจ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ:

  • --audit-log-maxbackup=10
  • --audit-log-maxsize=100
  • --audit-log-maxage=7

เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเชพ เชชเชฐ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ€เชถเซเช‚ เชจเชนเซ€เช‚ - เชคเชฎเซ‡ เชคเซ‡เชฎเชพเช‚ เชฌเชงเซ€ เชตเชฟเช—เชคเซ‹ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹ kube-apiserver เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ.

เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ เชคเซ‡เชฎ, เชคเชฎเชพเชฎ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐ เช—เซ‹เช เชตเชฃเซ€ เชธเชพเชฅเซ‡ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸเชฎเชพเช‚ เชธเซ‡เชŸ เช•เชฐเซ‡เชฒ เช›เซ‡ (เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ /etc/kubernetes/manifests/kube-apiserver.yaml), เชตเชฟเชญเชพเช—เชฎเชพเช‚ command. เชšเชพเชฒเซ‹ 3 เชœเชฐเซ‚เชฐเซ€ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชชเชฐ เชชเชพเช›เชพ เชœเชˆเช เช…เชจเซ‡ เชคเซ‡เชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ€เช:

  1. audit-policy-file โ€” เช“เชกเชฟเชŸ เชจเซ€เชคเชฟเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชคเซ€ YAML เชซเชพเช‡เชฒเชจเซ‹ เชชเชพเชฅ. เช…เชฎเซ‡ เชชเช›เซ€เชฅเซ€ เชคเซ‡เชจเชพ เชธเชฎเชพเชตเชฟเชทเซเชŸเซ‹ เชชเชฐ เชชเชพเช›เชพ เช†เชตเซ€เชถเซเช‚, เชชเชฐเช‚เชคเซ เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เชนเซเช‚ เชจเซ‹เช‚เชง เช•เชฐเซ€เชถ เช•เซ‡ เชซเชพเช‡เชฒ เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซ€ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช. เชคเซ‡เชฅเซ€, เชคเซ‡เชจเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ€ เช…เช‚เชฆเชฐ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชกเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเชพ เชฏเซ‹เช—เซเชฏ เชตเชฟเชญเชพเช—เซ‹เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:
      volumeMounts:
        - mountPath: /etc/kubernetes/policies
          name: policies
          readOnly: true
      volumes:
      - hostPath:
          path: /etc/kubernetes/policies
          type: DirectoryOrCreate
        name: policies
  2. audit-log-path - เชฒเซ‹เช— เชซเชพเชˆเชฒเชจเซ‹ เชชเชพเชฅ. เชชเชพเชฅ เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชชเชฃ เชธเซเชฒเชญ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชคเซ‡เชจเชพ เชฎเชพเช‰เชจเซเชŸเชฟเช‚เช—เชจเซเช‚ เชคเซ‡ เชœ เชฐเซ€เชคเซ‡ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เช เช›เซ€เช:
      volumeMounts:
        - mountPath: /var/log/kube-audit
          name: logs
          readOnly: false
      volumes:
      - hostPath:
          path: /var/log/kube-audit
          type: DirectoryOrCreate
        name: logs
  3. audit-log-format - เช“เชกเชฟเชŸ เชฒเซ‹เช— เชซเซ‹เชฐเซเชฎเซ‡เชŸ. เชฎเซ‚เชณเชญเซ‚เชค เช›เซ‡ json, เชชเชฐเช‚เชคเซ เชฒเซ‡เช—เชธเซ€ เชŸเซ‡เช•เซเชธเซเชŸ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เชชเชฃ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ (legacy).

เช“เชกเชฟเชŸ เชจเซ€เชคเชฟ

เชนเชตเซ‡ เชฒเซ‹เช—เซ€เช‚เช— เชจเซ€เชคเชฟเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชคเซ€ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชซเชพเช‡เชฒ เชตเชฟเชถเซ‡. เช“เชกเชฟเชŸ เชจเซ€เชคเชฟเชจเซ‹ เชชเซเชฐเชฅเชฎ เช–เซเชฏเชพเชฒ เช›เซ‡ level, เชฒเซ‹เช—เซ€เช‚เช— เชธเซเชคเชฐ. เชคเซ‡เช“ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡.

  • None - เชฒเซ‹เช— เชจ เช•เชฐเซ‹;
  • Metadata - เชฒเซ‹เช— เชตเชฟเชจเช‚เชคเซ€ เชฎเซ‡เชŸเชพเชกเซ‡เชŸเชพ: เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ, เชตเชฟเชจเช‚เชคเซ€ เชธเชฎเชฏ, เชฒเช•เซเชทเซเชฏ เชธเช‚เชธเชพเชงเชจ (เชชเซ‹เชก, เชจเซ‡เชฎเชธเซเชชเซ‡เชธ, เชตเช—เซ‡เชฐเซ‡), เช•เซเชฐเชฟเชฏเชพเชจเซ‹ เชชเซเชฐเช•เชพเชฐ (เช•เซเชฐเชฟเชฏเชพเชชเชฆ), เชตเช—เซ‡เชฐเซ‡;
  • Request - เชฎเซ‡เชŸเชพเชกเซ‡เชŸเชพ เชฒเซ‹เช— เช•เชฐเซ‹ เช…เชจเซ‡ เชฌเซ‹เชกเซ€เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‹;
  • RequestResponse - เชฎเซ‡เชŸเชพเชกเซ‡เชŸเชพ เชฒเซ‹เช— เช•เชฐเซ‹, เชฌเซ‹เชกเซ€ เช…เชจเซ‡ เชฐเชฟเชธเซเชชเซ‹เชจเซเชธ เชฌเซ‹เชกเซ€เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‹.

เช›เซ‡เชฒเซเชฒเชพ เชฌเซ‡ เชธเซเชคเชฐเซ‹ (Request ะธ RequestResponse) เชเชตเซ€ เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‡ เชฒเซ‰เช— เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚ เช•เซ‡ เชœเซ‡เชฃเซ‡ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‡ เชเช•เซเชธเซ‡เชธ เชจ เช•เชฐเซเชฏเซเช‚ เชนเซ‹เชฏ (เช•เชนเซ‡เชตเชพเชคเชพ เชฌเชฟเชจ-เชธเช‚เชธเชพเชงเชจ URL เชจเซ€ เชเช•เซเชธเซ‡เชธ).

เชคเซ‡เชฎเชœ เชคเชฎเชพเชฎ เชตเชฟเชจเช‚เชคเซ€เช“ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡ เช•เซ‡เชŸเชฒเชพเช• เชคเชฌเช•เซเช•เชพเช“:

  • RequestReceived - เชคเซ‡ เชคเชฌเช•เซเช•เซ‹ เชœเซเชฏเชพเชฐเซ‡ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชจเช‚เชคเซ€ เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชนเชœเซ เชธเซเชงเซ€ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเชจเซ€ เชธเชพเช‚เช•เชณ เชธเชพเชฅเซ‡ เช†เช—เชณ เชชเซเชฐเชธเชพเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชจเชฅเซ€;
  • ResponseStarted โ€” เชชเซเชฐเชคเชฟเชญเชพเชต เชนเซ‡เชกเชฐเซ‹ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชฌเซ‹เชกเซ€ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚. เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏเชฅเซ€ เชšเชพเชฒเชคเซ€ เช•เซเชตเซ‡เชฐเซ€ เชฎเชพเชŸเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, watch);
  • ResponseComplete - เชชเซเชฐเชคเชฟเชญเชพเชต เชฌเซ‹เชกเซ€ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡, เชตเชงเซ เชฎเชพเชนเชฟเชคเซ€ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชจเชนเซ€เช‚;
  • Panic - เช˜เชŸเชจเชพเช“ เชœเชจเชฐเซ‡เชŸ เชฅเชพเชฏ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เช…เชธเชพเชฎเชพเชจเซเชฏ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชฎเชณเซ€ เช†เชตเซ‡ เช›เซ‡.

เชคเชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เชคเซ‡ เช•เซ‹เชˆเชชเชฃ เชชเช—เชฒเชพเช‚เชจเซ‡ เช›เซ‹เชกเชตเชพ เชฎเชพเชŸเซ‡ omitStages.

เชชเซ‹เชฒเชฟเชธเซ€ เชซเชพเช‡เชฒเชฎเชพเช‚, เช…เชฎเซ‡ เชตเชฟเชตเชฟเชง เชฒเซ‹เช—เซ€เช‚เช— เชธเซเชคเชฐเซ‹ เชธเชพเชฅเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชตเชฟเชญเชพเช—เซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เชชเซ‰เชฒเชฟเชธเซ€ เชตเชฐเซเชฃเชจเชฎเชพเช‚ เชœเซ‹เชตเชพ เชฎเชณเซ‡เชฒเซ‹ เชชเซเชฐเชฅเชฎ เชฎเซ‡เชšเชฟเช‚เช— เชจเชฟเชฏเชฎ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เช•เซเชฌเซ‡เชฒเซ‡เชŸ เชกเชฟเชฎเชจ เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡, เชœเซ‹ เช•เซ‹เชˆ เชถเซ‹เชงเชพเชฏเซ‡เชฒ เชนเซ‹เชฏ, เชคเซ‹ เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชเช• เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชตเชฟเช—เชค เช›เซ‡: เชชเซ‹เชฒเชฟเชธเซ€ เชซเชพเช‡เชฒเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชคเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เช…เชตเช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชชเซ‹เชฒเชฟเชธเซ€ เชซเชพเช‡เชฒเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชคเชฎเชพเชฐเซ‡ เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐเชจเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชฐเซ€เชธเซเชŸเชพเชฐเซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เชเชชเซ€เช†เชˆ-เชธเชฐเซเชตเชฐ เชคเชฐเซ€เช•เซ‡ เชถเชฐเซ‚ เชฅเชฏเซเช‚ เชนเซ‹เชตเชพเชฅเซ€ เชธเซเชฅเชฟเชฐ เชชเซ‹เชก, เชŸเซ€เชฎ kubectl delete เชคเซ‡เชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เช•เชฐเชตเซเช‚ เชชเชกเชถเซ‡ docker stop kube-masters เชชเชฐ, เชœเซเชฏเชพเช‚ เช“เชกเชฟเชŸ เชจเซ€เชคเชฟ เชฌเชฆเชฒเชพเชˆ เช›เซ‡:

docker stop $(docker ps | grep k8s_kube-apiserver | awk '{print $1}')

เช‘เชกเชฟเชŸเชฟเช‚เช—เชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชคเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡ เช•เซเชฌเซ‡-เชเชชเซ€เชธเชฐเซเชตเชฐ เชชเชฐเชจเซ‹ เชญเชพเชฐ เชตเชงเซ‡ เช›เซ‡. เช–เชพเชธ เช•เชฐเซ€เชจเซ‡, เชตเชฟเชจเช‚เชคเซ€ เชธเช‚เชฆเชฐเซเชญ เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชตเชชเชฐเชพเชถ เชตเชงเซ‡ เช›เซ‡. เชชเซเชฐเชคเชฟเชญเชพเชต เชนเซ‡เชกเชฐ เชฎเซ‹เช•เชฒเซเชฏเชพ เชชเช›เซ€ เชœ เชฒเซ‹เช—เซ€เช‚เช— เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡. เชฒเซ‹เชก เชชเชฃ เช“เชกเชฟเชŸ เชจเซ€เชคเชฟ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡.

เชจเซ€เชคเชฟเช“เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹

เชšเชพเชฒเซ‹ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซ‹เชฒเชฟเชธเซ€ เชซเชพเช‡เชฒเซ‹เชจเซ€ เชฐเชšเชจเชพ เชœเซ‹เชˆเช.

เช…เชนเซ€เช‚ เชเช• เชธเชฐเชณ เชซเชพเช‡เชฒ เช›เซ‡ policyเชธเซเชคเชฐ เชชเชฐ เชฌเชงเซเช‚ เชฒเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ Metadata:

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata

เชจเซ€เชคเชฟเชฎเชพเช‚ เชคเชฎเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ€ เชธเซ‚เชšเชฟเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (Users ะธ ServiceAccounts) เช…เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชœเซ‚เชฅเซ‹. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช† เชฐเซ€เชคเซ‡ เช…เชฎเซ‡ เชธเชฟเชธเซเชŸเชฎ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เช…เชตเช—เชฃเซ€เชถเซเช‚, เชชเชฐเช‚เชคเซ เชธเซเชคเชฐ เชชเชฐ เชฌเชพเช•เซ€เชจเซเช‚ เชฌเชงเซเช‚ เชฒเซ‹เช— เช•เชฐเซ€เชถเซเช‚ Request:

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: None
    userGroups:
      - "system:serviceaccounts"
      - "system:nodes"
    users:
      - "system:anonymous"
      - "system:apiserver"
      - "system:kube-controller-manager"
      - "system:kube-scheduler"
  - level: Request

เชฒเช•เซเชทเซเชฏเซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเซเช‚ เชชเชฃ เชถเช•เซเชฏ เช›เซ‡:

  • เชจเชพเชฎเชจเซ€ เชœเช—เซเชฏเชพเช“ (namespaces);
  • เช•เซเชฐเชฟเชฏเชพเชชเชฆเซ‹ (เช•เซเชฐเชฟเชฏเชพเชชเชฆ: get, update, delete เช…เชจเซ‡ เช…เชจเซเชฏ);
  • เชธเช‚เชธเชพเชงเชจเซ‹ (เชธเซเชฐเซ‹เชคเซ‹เชเชŸเชฒเซ‡ เช•เซ‡: pod, configmaps เชตเช—เซ‡เชฐเซ‡) เช…เชจเซ‡ เชธเช‚เชธเชพเชงเชจ เชœเซ‚เชฅเซ‹ (apiGroups).

เชงเซเชฏเชพเชจ เช†เชชเซ‹! เชธเช‚เชธเชพเชงเชจเซ‹ เช…เชจเซ‡ เชธเช‚เชธเชพเชงเชจ เชœเซ‚เชฅเซ‹ (API เชœเซ‚เชฅเซ‹, เชเชŸเชฒเซ‡ เช•เซ‡ apiGroups), เชคเซ‡เชฎเชœ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชธเซเชฅเชพเชชเชฟเชค เชคเซ‡เชฎเชจเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹, เช†เชฆเซ‡เชถเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡:

kubectl api-resources
kubectl api-versions

เชจเซ€เชšเซ‡เชจเซ€ เช“เชกเชฟเชŸ เชจเซ€เชคเชฟ เชถเซเชฐเซ‡เชทเซเช  เชชเซเชฐเชฅเชพเช“เชจเชพ เชชเซเชฐเชฆเชฐเซเชถเชจ เชคเชฐเซ€เช•เซ‡ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ เช…เชฒเซ€เชฌเชพเชฌเชพ เช•เซเชฒเชพเช‰เชก เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ:

apiVersion: audit.k8s.io/v1beta1
kind: Policy
# ะะต ะปะพะณะธั€ะพะฒะฐั‚ัŒ ัั‚ะฐะดะธัŽ RequestReceived
omitStages:
  - "RequestReceived"
rules:
  # ะะต ะปะพะณะธั€ะพะฒะฐั‚ัŒ ัะพะฑั‹ั‚ะธั, ัั‡ะธั‚ะฐัŽั‰ะธะตัั ะผะฐะปะพะทะฝะฐั‡ะธั‚ะตะปัŒะฝั‹ะผะธ ะธ ะฝะต ะพะฟะฐัะฝั‹ะผะธ:
  - level: None
    users: ["system:kube-proxy"]
    verbs: ["watch"]
    resources:
      - group: "" # ัั‚ะพ api group ั ะฟัƒัั‚ั‹ะผ ะธะผะตะฝะตะผ, ะบ ะบะพั‚ะพั€ะพะผัƒ ะพั‚ะฝะพััั‚ัั
                  # ะฑะฐะทะพะฒั‹ะต ั€ะตััƒั€ัั‹ Kubernetes, ะฝะฐะทั‹ะฒะฐะตะผั‹ะต โ€œcoreโ€
        resources: ["endpoints", "services"]
  - level: None
    users: ["system:unsecured"]
    namespaces: ["kube-system"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["configmaps"]
  - level: None
    users: ["kubelet"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes"]
  - level: None
    userGroups: ["system:nodes"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes"]
  - level: None
    users:
      - system:kube-controller-manager
      - system:kube-scheduler
      - system:serviceaccount:kube-system:endpoint-controller
    verbs: ["get", "update"]
    namespaces: ["kube-system"]
    resources:
      - group: "" # core
        resources: ["endpoints"]
  - level: None
    users: ["system:apiserver"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["namespaces"]
  # ะะต ะปะพะณะธั€ะพะฒะฐั‚ัŒ ะพะฑั€ะฐั‰ะตะฝะธั ะบ read-only URLs:
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # ะะต ะปะพะณะธั€ะพะฒะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธั, ะพั‚ะฝะพััั‰ะธะตัั ะบ ั‚ะธะฟัƒ ั€ะตััƒั€ัะพะฒ โ€œัะพะฑั‹ั‚ะธัโ€:
  - level: None
    resources:
      - group: "" # core
        resources: ["events"]
  # ะ ะตััƒั€ัั‹ ั‚ะธะฟะฐ Secret, ConfigMap ะธ TokenReview ะผะพะณัƒั‚ ัะพะดะตั€ะถะฐั‚ัŒ  ัะตะบั€ะตั‚ะฝั‹ะต ะดะฐะฝะฝั‹ะต,
  # ะฟะพัั‚ะพะผัƒ ะปะพะณะธั€ัƒะตะผ ั‚ะพะปัŒะบะพ ะผะตั‚ะฐะดะฐะฝะฝั‹ะต ัะฒัะทะฐะฝะฝั‹ั… ั ะฝะธะผะธ ะทะฐะฟั€ะพัะพะฒ
  - level: Metadata
    resources:
      - group: "" # core
        resources: ["secrets", "configmaps"]
      - group: authentication.k8s.io
        resources: ["tokenreviews"]
  # ะ”ะตะนัั‚ะฒะธั ั‚ะธะฟะฐ get, list ะธ watch ะผะพะณัƒั‚ ะฑั‹ั‚ัŒ ั€ะตััƒั€ัะพั‘ะผะบะธะผะธ; ะฝะต ะปะพะณะธั€ัƒะตะผ ะธั…
  - level: Request
    verbs: ["get", "list", "watch"]
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
  # ะฃั€ะพะฒะตะฝัŒ ะปะพะณะธั€ะพะฒะฐะฝะธั ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะดะปั ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ั… ั€ะตััƒั€ัะพะฒ API
  - level: RequestResponse
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
  # ะฃั€ะพะฒะตะฝัŒ ะปะพะณะธั€ะพะฒะฐะฝะธั ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะดะปั ะฒัะตั… ะพัั‚ะฐะปัŒะฝั‹ั… ะทะฐะฟั€ะพัะพะฒ
  - level: Metadata

เช“เชกเชฟเชŸ เชจเซ€เชคเชฟเชจเซเช‚ เชฌเซ€เชœเซเช‚ เชธเชพเชฐเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡ GCE เชฎเชพเช‚ เชตเชชเชฐเชพเชฏเซ‡เชฒ เชชเซเชฐเซ‹เชซเชพเช‡เชฒ.

เช‘เชกเชฟเชŸ เช‡เชตเซ‡เชจเซเชŸเซเชธเชจเซ‡ เชเชกเชชเชฅเซ€ เชœเชตเชพเชฌ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡ เชถเช•เซเชฏ เช›เซ‡ เชตเซ‡เชฌเชนเซ‚เช•เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‹. เช† เชฎเซเชฆเซเชฆเซ‹ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ, เชนเซเช‚ เชคเซ‡เชจเซ‡ เช† เชฒเซ‡เช–เชจเชพ เช…เชตเช•เชพเชถเชจเซ€ เชฌเชนเชพเชฐ เช›เซ‹เชกเซ€เชถ.

เชชเชฐเชฟเชฃเชพเชฎเซ‹

เช† เชฒเซ‡เช– เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐเซเชธเชฎเชพเช‚ เชฎเซ‚เชณเชญเซ‚เชค เชธเซเชฐเช•เซเชทเชพ เชชเชฆเซเชงเชคเชฟเช“เชจเซเช‚ เชตเชฟเชนเช‚เช—เชพเชตเชฒเซ‹เช•เชจ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชเช•เชพเช‰เชจเซเชŸเซเชธ เชฌเชจเชพเชตเชตเชพ, เชคเซ‡เชฎเชจเชพ เช…เชงเชฟเช•เชพเชฐเซ‹เชจเซ‡ เช…เชฒเช— เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เช•เซเชฐเชฟเชฏเชพเช“ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เชœเซ‡เช“ เชธเชฟเชฆเซเชงเชพเช‚เชคเชฎเชพเช‚ เช…เชฅเชตเชพ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เช†เชตเซ€ เชธเชฎเชธเซเชฏเชพเช“เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เชคเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡. เชนเซเช‚ เช เชชเชฃ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชคเชฎเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชธเซเชฐเช•เซเชทเชพเชจเชพ เชตเชฟเชทเชฏ เชชเชฐเชจเซ€ เช…เชจเซเชฏ เชธเชพเชฎเช—เซเชฐเซ€เช“เชจเซ€ เชธเซ‚เชšเชฟ เชตเชพเช‚เชšเซ‹, เชœเซ‡ "PS" เชฎเชพเช‚ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ - เช•เชฆเชพเชš เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชคเชฎเชจเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เชธเชฎเชธเซเชฏเชพเช“ เชชเชฐ เชœเชฐเซ‚เชฐเซ€ เชตเชฟเช—เชคเซ‹ เชฎเชณเชถเซ‡.

PS

เช…เชฎเชพเชฐเชพ เชฌเซเชฒเซ‹เช— เชชเชฐ เชชเชฃ เชตเชพเช‚เชšเซ‹:

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹