ABC เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปƒเบ™ Kubernetes: เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡, เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”, เบเบฒเบ™เบเบงเบ”เบชเบญเบš

ABC เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปƒเบ™ Kubernetes: เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡, เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”, เบเบฒเบ™เบเบงเบ”เบชเบญเบš

เบšเปเปˆเบ”เบปเบ™, เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบšเบฑเบ™เบซเบฒเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเป€เบเบตเบ”เบ‚เบทเป‰เบ™: เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบขเบฑเป‰เบ‡เบขเบทเบ™, เบเบฒเบ™เปเบเบเบชเบดเบ”, เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบฅเบฐเบงเบฝเบเบ‡เบฒเบ™เบญเบทเปˆเบ™เป†. เบชเป‰เบฒเบ‡เปเบฅเป‰เบงเบชเบณเบฅเบฑเบš Kubernetes เบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบซเบผเบฒเบ, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบšเบฑเบ™เบฅเบธเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบ ... เบงเบฑเบ”เบชเบฐเบ”เบธเบ”เบฝเบงเบเบฑเบ™เปเบกเปˆเบ™เบญเบธเบ—เบดเบ”เปƒเบซเป‰เบฅเบฑเบเบชเบฐเบ™เบฐเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฒเบเปƒเบ™เบเบปเบ™เป„เบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™ K8s. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เปเปˆเบœเบนเป‰เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบฎเบนเป‰เบˆเบฑเบเบเบฑเบš Kubernetes - เป€เบ›เบฑเบ™เบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบชเบถเบเบชเบฒเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž.

เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™

เบกเบตเบชเบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เปƒเบ™ Kubernetes:

  • เบšเบฑเบ™เบŠเบตเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ โ€” เบšเบฑเบ™เบŠเบตเบ—เบตเปˆเบ„เบธเป‰เบกเบ„เบญเบ‡เป‚เบ”เบ Kubernetes API;
  • เบœเบนเป‰เบŠเบปเบกเปƒเบŠเป‰ โ€” เบœเบนเป‰โ€‹เบŠเบปเบกโ€‹เปƒเบŠเป‰ "เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹" เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡โ€‹เป‚เบ”เบโ€‹เบžเบฒเบโ€‹เบ™เบญเบโ€‹, เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เป€เบญโ€‹เบเบฐโ€‹เบฅเบฒเบ”โ€‹.

เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ•เบปเป‰เบ™เบ•เปเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ›เบฐเป€เบžเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบŠเบตเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบกเบตเบงเบฑเบ”เบ–เบธเบžเบดเป€เบชเบ”เปƒเบ™ Kubernetes API (เบžเบงเบเบกเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ - ServiceAccounts), เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบš namespace เปเบฅเบฐเบŠเบธเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ cluster เปƒเบ™เบงเบฑเบ”เบ–เบธเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ„เบงเบฒเบกเบฅเบฑเบš. เบœเบนเป‰เปƒเบŠเป‰เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง (เบšเบฑเบ™เบŠเบตเบšเปเบฅเบดเบเบฒเบ™) เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ•เบปเป‰เบ™เบ•เปเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบชเบดเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ Kubernetes API เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบเบธเปˆเบก Kubernetes.

เบœเบนเป‰เปƒเบŠเป‰เบ—เบปเปˆเบงเป„เบ›เบšเปเปˆเบกเบตเบฅเบฒเบเบเบฒเบ™เปƒเบ™ Kubernetes API: เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป‚เบ”เบเบเบปเบ™เป„เบเบžเบฒเบเบ™เบญเบ. เบžเบงเบเบกเบฑเบ™เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเบ„เบปเบ™ เบซเบผเบทเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบญเบฒเป„เบชเบขเบนเปˆเบ™เบญเบเบเบธเปˆเบก.

เปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป API เปเบกเปˆเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบšเบฑเบ™เบŠเบตเบšเปเบฅเบดเบเบฒเบ™, เบœเบนเป‰เปƒเบŠเป‰, เบซเบผเบทเบ–เบทเบงเปˆเบฒเบšเปเปˆเป€เบ›เบตเบ”เป€เบœเบตเบเบŠเบทเปˆ.

เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบœเบนเป‰เปƒเบŠเป‰เบ›เบฐเบเบญเบšเบกเบต:

  • เบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰ โ€” เบŠเบทเปˆโ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰ (เบ•เบปเบงโ€‹เบžเบดเบกโ€‹เบ™เป‰เบญเบโ€‹เปƒเบซเบเปˆโ€‹)โ€‹;
  • UID - เบชเบฐเบ•เบฃเบดเบ‡เบเบฒเบ™เบฅเบฐเบšเบธเบ•เบปเบงเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบ—เบตเปˆ โ€œเบชเบญเบ”เบ„เปˆเบญเบ‡ เปเบฅเบฐเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบเบงเปˆเบฒเบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰โ€;
  • Groups - เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบเบธเปˆเบกเบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เป€เบ›เบฑเบ™;
  • เบžเบดเป€เบชเบ” โ€” เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เป‚เบ”เบเบเบปเบ™เป„เบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”.

Kubernetes เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบเบปเบ™เป„เบเบเบฒเบ™เบžเบดเบชเบนเบ”เบขเบทเบ™เบขเบฑเบ™เป„เบ”เป‰เบซเบผเบฒเบเบญเบฑเบ™: เปƒเบšเบฎเบฑเบšเบฎเบญเบ‡ X509, Bearer tokens, authenticating proxy, HTTP Basic Auth. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบปเบ™เป„เบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ: เบˆเบฒเบเป„เบŸเบฅเปŒเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เป„เบ›เบซเบฒ OpenID OAuth2.

เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบซเบผเบฒเบเบ„เบฑเป‰เบ‡เบžเป‰เบญเบกเบเบฑเบ™. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบเบธเปˆเบกเปƒเบŠเป‰:

  • tokens เบšเบฑเบ™เบŠเบตเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ - เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบŠเบตเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™;
  • 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"
  • เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบšเบฎเบฑเบšเบฎเบญเบ‡เป‚เบ”เบเปƒเบŠเป‰เบเบฐเปเบˆ Kubernetes cluster CA, เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบœเบนเป‰เปƒเบŠเป‰ (เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบšเบฑเบ™เบŠเบตเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฐเปเบˆ Kubernetes cluster 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-server เบ‚เบญเบ‡เบเบธเปˆเบก):
      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 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

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เปƒเบ™เบเบฒเบ™เป‚เบญเบ™ config เบฅเบฐเบซเบงเปˆเบฒเบ‡เบšเบฑเบ™เบŠเบตเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบ„เปˆเบฒเบ‚เบญเบ‡เบ„เบตเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป„เบŸเบฅเปŒเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบžเบงเบเบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ base64 เปเบฅเบฐเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบžเบงเบเบกเบฑเบ™เปƒเบ™ config, เป€เบžเบตเปˆเบกเบ„เปเบฒเบ•เปเปˆเบ—เป‰เบฒเบเปƒเบชเปˆเบŠเบทเปˆเบ‚เบญเบ‡เบเบฐเปเบˆ. -data, i.e. เป„เบ”เป‰โ€‹เบฎเบฑเบš certificate-authority-data เปเบฅเบฐเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™.

เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบ—เบตเปˆเบกเบต kubeadm

เบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบ เบ„เบนเป‚เบšเบ•เป‰เบฒ 1.15 เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบเบฑเบšโ€‹เปƒเบšโ€‹เบขเบฑเป‰เบ‡โ€‹เบขเบทเบ™โ€‹เป„เบ”เป‰โ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™โ€‹เบซเบผเบฒเบโ€‹เบ‡เปˆเบฒเบโ€‹เบ‚เบถเป‰เบ™โ€‹เบเป‰เบญเบ™โ€‹เบงเปˆเบฒโ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบญเบฑเบ™โ€‹เบŸเบฒโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เปƒเบ™โ€‹ เบ›เบฐเป‚เบซเบเบ” kubeadm. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบเบฒเบ™เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เบœเบนเป‰เปƒเบŠเป‰เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ:

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

NB: เบ•เป‰เบญเบ‡เบเบฒเบ™ เป‚เบ„เบชเบฐเบ™เบฒเบ—เบตเปˆเบขเบนเปˆ เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™ api-server config, เป€เบŠเบดเปˆเบ‡เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ /etc/kubernetes/manifests/kube-apiserver.yaml.

config เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเป€เบ›เบฑเบ™ output เบเบฑเบš stdout. เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™ ~/.kube/config เบšเบฑเบ™เบŠเบตเบœเบนเป‰เปƒเบŠเป‰ เบซเบผเบทเป„เบŸเบฅเปŒเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก KUBECONFIG.

เบ‚เบธเบ”โ€‹เป€เบฅเบดเบ

เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”:

เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”

เบšเบฑเบ™เบŠเบตเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบšเปเปˆเบกเบตเบชเบดเบ”เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบเบธเปˆเบก. เป€เบžเบทเปˆเบญเปƒเบซเป‰เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”, Kubernetes เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ™เป„เบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”.

เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เป€เบงเบตเบŠเบฑเบ™ 1.6, Kubernetes เป„เบ”เป‰เปƒเบŠเป‰เบ›เบฐเป€เบžเบ”เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ ABAC (เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ). เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป€เบ›เบฑเบ™เบกเปเบฅเบฐเบ”เบปเบ, เปเบ•เปˆเบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบกเบฑเบ™เบ„เบฝเบ‡เบ„เบนเปˆเบเบฑเบšเบเบฒเบ™เบžเบดเบชเบนเบ”เบขเบทเบ™เบขเบฑเบ™เบ›เบฐเป€เบžเบ”เบญเบทเปˆเบ™เป†.

เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™ (เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบซเบผเบฒเบ) เบ‚เบญเบ‡เบเบฒเบ™เปเบšเปˆเบ‡เบชเบดเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบธเปˆเบกเปเบกเปˆเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ RBAC (เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบšเบปเบ”เบšเบฒเบ”). เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ•เบฑเป‰เบ‡เปเบ•เปˆเบฎเบธเปˆเบ™ เบ„เบนเป‚เบšเบ•เป‰เบฒ 1.8. RBAC เบ›เบฐเบ•เบดเบšเบฑเบ”เบฎเบนเบšเปเบšเบšเบชเบดเบ”เบ—เบดเบ—เบตเปˆเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เปเบกเปˆเบ™เบ–เบทเบเบซเป‰เบฒเบก.
เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰ RBAC, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ Kubernetes api-server เบ”เป‰เบงเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต --authorization-mode=RBAC. เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ manifest เบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ api-server, เป€เบŠเบดเปˆเบ‡เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡. /etc/kubernetes/manifests/kube-apiserver.yaml, เปƒเบ™เบžเบฒเบ command. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, RBAC เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เปเบฅเป‰เบงเป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เบเบฑเบ‡เบงเบปเบ™เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™: เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเป„เบ”เป‰เป‚เบ”เบเบกเบนเบ™เบ„เปˆเบฒ. authorization-mode (เปƒเบ™เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง kube-apiserver.yaml). เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เปƒเบ™เบšเบฑเบ™เบ”เบฒเบ„เบงเบฒเบกเบซเบกเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™เบญเบฒเบ”เบกเบตเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ›เบฐเป€เบžเบ”เบญเบทเปˆเบ™เป† (node, webhook, always allow), เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบญเบญเบเบˆเบฒเบเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบขเบนเปˆเบ™เบญเบเบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบงเบฑเบ”เบชเบฐเบ”เบธ.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบˆเบฑเบ”เบžเบตเบกเบกเบฒเปเบฅเป‰เบง เบšเบปเบ”เบ„เบงเบฒเบก เบ”เป‰เบงเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบซเบผเบฑเบเบเบฒเบ™เปเบฅเบฐเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš RBAC, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ•เบทเปˆเบกเบญเบตเบเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบˆเปเบฒเบเบฑเบ”เบ•เบปเบงเป€เบญเบ‡เบเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบฑเป‰เบ™เป†เบ‚เบญเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡.

เบซเบปเบงเปœเปˆเบงเบ API เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ–เบทเบเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เปƒเบ™ Kubernetes เบœเปˆเบฒเบ™ RBAC:

  • Role ะธ ClusterRole โ€” เบžเบฒโ€‹เบฅเบฐโ€‹เบšเบปเบ”โ€‹เบšเบฒเบ”โ€‹เป€เบžเบทเปˆเบญโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบชเบดเบ”โ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป€เบ–เบดเบ‡โ€‹:
  • Role เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบเบชเบดเบ”เบ—เบดเบžเบฒเบเปƒเบ™ namespace;
  • ClusterRole - เบžเบฒเบเปƒเบ™เบเบธเปˆเบก, เบฅเบงเบกเบ—เบฑเบ‡เบงเบฑเบ”เบ–เบธเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบเบธเปˆเบกเป€เบŠเบฑเปˆเบ™ nodes, urls เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เป€เบŠเบฑเปˆเบ™: เบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Kubernetes - เบ•เบปเบงเบขเปˆเบฒเบ‡, /version, /logs, /api*);
  • RoleBinding ะธ ClusterRoleBinding - เปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบœเบนเบเบกเบฑเบ” Role ะธ ClusterRole เปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰, เบเบธเปˆเบกเบœเบนเป‰เปƒเบŠเป‰ เบซเบผเบทเบšเบฑเบ™เบŠเบตเบšเปเบฅเบดเบเบฒเบ™.

เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปเบฅเบฐ RoleBinding เป„เบ”เป‰เบ–เบทเบเบˆเปเบฒเบเบฑเบ”เป‚เบ”เบ namespace, i.e. เบ•เป‰เบญเบ‡เบขเบนเปˆเปƒเบ™ namespace เบ”เบฝเบงเบเบฑเบ™. เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก, RoleBinding เบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡ ClusterRole, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบŠเบธเบ”เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ—เบปเปˆเบงเป„เบ› เปเบฅเบฐเบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™.

เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบเบชเบดเบ”เบ—เบดเป‚เบ”เบเปƒเบŠเป‰เบŠเบธเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ›เบฐเบเบญเบšเบกเบต:

  • เบเบธเปˆเบก API - เป€เบšเบดเปˆเบ‡ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™ เป‚เบ”เบ apiGroups เปเบฅเบฐเบœเบปเบ™เบœเบฐเบฅเบดเบ” kubectl api-resources;
  • เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™ (เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™: pod, namespace, deployment เปเบฅเบฐ เบญเบทเปˆเบ™เป†.);
  • เบ„เบณเบเบดเบฅเบดเบเบฒ (เบ„เบณ เบเบดเบฅเบดเบเบฒ: set, update เปเบฅเบฐเบญเบทเปˆเบ™เป†.).
  • เบŠเบทเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (resourceNames) - เบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ™เบตเป‰.

เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบ™ Kubernetes เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ (เบซเบผเบทเปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบ™เบตเป‰), เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเปƒเบซเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ™เบฒเบ‡.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบซเบปเบงเปœเปˆเบงเบ RBAC

เบ‡เปˆเบฒเบเบ”เบฒเบ Role, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบเบฑเบเปเบฅเบฐเบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบขเบนเปˆเปƒเบ™ namespace เป„เบ”เป‰ 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 "เบญเปˆเบฒเบ™" pods เปƒเบ™ namespace 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

เบเบฒเบ™เบเบงเบ”เบชเบญเบšเป€เบซเบ”เบเบฒเบ™

เบ•เบฒเบกเปเบœเบ™, เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณ Kubernetes เบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เป„เบ”เป‰เบ”เบฑเปˆเบ‡เบ™เบตเป‰:

ABC เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปƒเบ™ Kubernetes: เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡, เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”, เบเบฒเบ™เบเบงเบ”เบชเบญเบš

เบญเบปเบ‡เบ›เบฐเบเบญเบš Kubernetes เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™ api-เป€เบŠเบตเบšเป€เบงเบต. เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบเบธเปˆเบกเบœเปˆเบฒเบ™เบกเบฑเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบปเบ™เป„เบเบžเบฒเบเปƒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก "เบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ Kubernetes เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เปเบฅเปˆเบ™ kubectl run?".

เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฅเบฐเบšเบปเบšเป€เบ›เบฑเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเปƒเบ™ Kubernetes, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป‚เบ—เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ›เบซเบฒ Kubernetes API. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเป€เบ”เบปเบฒเป„เบ”เป‰, เบเบฒเบ™เบเบฐเบ—เบณเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก เปเบฅเบฐ เบเบฒเบ™เบ›เปˆเบฝเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบเบธเปˆเบกเปเบกเปˆเบ™เบ”เบณเป€เบ™เบตเบ™เบœเปˆเบฒเบ™ API เบ™เบตเป‰. เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบชเบฒเบกเบฒเบ” (เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด) เบขเบนเปˆเปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™ K8s. เบ•เปเปˆเป„เบ›, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบซเบปเบงเบ‚เปเป‰เปƒเบ™เบžเบฒเบชเบฒเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบเบงเปˆเบฒ.

เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™ เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบเบงเบ”เบชเบญเบš, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบœเปˆเบฒเบ™เบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบเบฑเบš container เปƒเบ™ api-server, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

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

เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบซเบผเบฒเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš: เบˆเบฒเบเบเบฒเบ™เบซเบกเบธเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเป„เบ›เบซเบฒเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบเปˆเบฝเบงเบเบฑเบš webhook. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบซเบกเบธเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบ:

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

เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบขเบนเปˆเปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก - เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™ kube-apiserver.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง, เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ manifest เบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ api-server (เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ /etc/kubernetes/manifests/kube-apiserver.yaml), เปƒเบ™เบžเบฒเบ command. เปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒ 3 เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเบงเบดเป€เบ„เบฒเบฐเบžเบงเบเบกเบฑเบ™:

  1. audit-policy-file โ€” เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป„เบŸเบฅเปŒ YAML เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบเบงเบ”เบชเบญเบš. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบ•เปเปˆเบกเบฒ, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเป„เบŸเบฅเปŒเบ•เป‰เบญเบ‡เบ–เบทเบเบญเปˆเบฒเบ™เป„เบ”เป‰เป‚เบ”เบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ api-server. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ–เบฑเบ‡, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบชเปˆเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ:
      volumeMounts:
        - mountPath: /etc/kubernetes/policies
          name: policies
          readOnly: true
      volumes:
      - hostPath:
          path: /etc/kubernetes/policies
          type: DirectoryOrCreate
        name: policies
  2. audit-log-path - เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบ. เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบเบฑเบ‡เบ•เป‰เบญเบ‡เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ api-server, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ‚เบญเบ‡เบกเบฑเบ™เปƒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™:
      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 โ€” เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบ‚เบญเบ‡โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹: เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹, เบ—เบตเปˆโ€‹เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹, เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™โ€‹เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ (podโ€‹, namespaceโ€‹, เปเบฅเบฐโ€‹เบญเบทเปˆเบ™เป†โ€‹)โ€‹, เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” (verbโ€‹)โ€‹, เปเบฅเบฐโ€‹เบญเบทเปˆเบ™เป†โ€‹;
  • Request โ€” เบšเบฑเบ™เบ—เบถเบ metadata เปเบฅเบฐเบฎเปˆเบฒเบ‡เบเบฒเบเบฎเป‰เบญเบ‡เบ‚เป;
  • RequestResponse โ€” เป€เบ‚เบปเป‰เบฒโ€‹เบชเบนเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบš metadataโ€‹, เบฎเปˆเบฒเบ‡โ€‹เบเบฒเบโ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เปเบฅเบฐโ€‹เบฎเปˆเบฒเบ‡โ€‹เบเบฒเบโ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹.

เบชเบญเบ‡โ€‹เบ‚เบฑเป‰เบ™โ€‹เบชเบธเบ”โ€‹เบ—เป‰เบฒเบ (Request ะธ RequestResponse) เบšเปเปˆเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบšเปเปˆเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ urls เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™).

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ›เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™ เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™:

  • RequestReceived โ€” เบ‚เบฑเป‰เบ™เบ•เบญเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เปเบฅเบฐเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบชเบปเปˆเบ‡เบ•เปเปˆเป„เบ›เบญเบตเบเบ•เบฒเบกเบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบ‚เบญเบ‡เป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”;
  • ResponseStarted โ€” เบซเบปเบงโ€‹เบ•เบญเบšโ€‹เบ–เบทเบโ€‹เบชเบปเปˆเบ‡โ€‹เป„เบ›โ€‹, เปเบ•เปˆโ€‹เบเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบฎเปˆเบฒเบ‡โ€‹เบเบฒเบโ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เบชเบปเปˆเบ‡โ€‹. เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบเบฒเบงเบ™เบฒเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡: watch);
  • ResponseComplete โ€” เปœเปˆเบงเบโ€‹เบ‡เบฒเบ™โ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เปœเบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบชเบปเปˆเบ‡โ€‹เป„เบ›โ€‹เปเบฅเป‰เบง, เบšเปเปˆโ€‹เบกเบตโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป€เบžเบตเปˆเบกโ€‹เป€เบ•เบตเบกโ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เบชเบปเปˆเบ‡;
  • Panic โ€” เป€เบซเบ”เบเบฒเบ™เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบกเบทเปˆเบญเบเบงเบ”เบžเบปเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบœเบดเบ”เบ›เบปเบเบเบฐเบ•เบด.

เป€เบžเบทเปˆเบญเบ‚เป‰เบฒเบกเบ‚เบฑเป‰เบ™เบ•เบญเบ™เปƒเบ”เป†เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ omitStages.

เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ™เบฐเป‚เบเบšเบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบเบซเบผเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบกเบตเบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบปเบšเปƒเบ™เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ™เบฐเป‚เบเบšเบฒเบเบˆเบฐเบ–เบทเบเปƒเบŠเป‰.

kubelet daemon เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™ manifest เบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ api-server เปเบฅเบฐ, เบ–เป‰เบฒเบกเบตเบเบงเบ”เบžเบปเบš, restart container เบเบฑเบš api-server. เปเบ•เปˆเบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™: เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป„เบŸเบฅเปŒเบ™เบฐเป‚เบเบšเบฒเบเบˆเบฐเบ–เบทเบเบฅเบฐเป€เบฅเบตเบเป‚เบ”เบเบกเบฑเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบฎเบฑเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบŸเบฅเปŒเบ™เบฐเป‚เบเบšเบฒเบ, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบ›เบดเบ”เป€เบ›เบตเบ” api-server เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ api-server เปเบกเปˆเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™ เบเบฑเบเบชเบฐเบ–เบดเบ”, เบ—เบตเบกเบ‡เบฒเบ™ kubectl delete เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™ restart. เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบกเบฑเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ docker stop เบเปˆเบฝเบงเบเบฑเบš kube-masters, เบšเปˆเบญเบ™เบ—เบตเปˆเบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบเบงเบ”เบชเบญเบšเป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡:

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

เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบเบงเบ”เบชเบญเบš, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒ เบเบฒเบ™เป‚เบซเบผเบ”เปƒเบ™ kube-apiserver เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเปเบฅเบดเบšเบปเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™. เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบซเบปเบงเบ„เปเบฒเบ•เบญเบšเบ–เบทเบเบชเบปเปˆเบ‡. เบเบฒเบ™เป‚เบซเบผเบ”เบเบฑเบ‡เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบเบงเบ”เบชเบญเบš.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ™เบฐเป‚เบเบšเบฒเบ

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ™เบฐเป‚เบเบšเบฒเบเป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡.

เบ™เบตเป‰เปเบกเปˆเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ 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 (namespaces);
  • เบ„เบณเบเบดเบฅเบดเบเบฒ (เบ„เบณ เบเบดเบฅเบดเบเบฒ: get, update, delete เปเบฅเบฐโ€‹เบญเบทเปˆเบ™เป†);
  • เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™ (เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™, เบ„เบท: pod, configmaps เปเบฅเบฐเบญเบทเปˆเบ™เป†) เปเบฅเบฐเบเบธเปˆเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (apiGroups).

เบˆเปˆเบฒเบเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆ! เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบฅเบฐเบเบธเปˆเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เบเบธเปˆเบก API, i.e. apiGroups), เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบฎเบธเปˆเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบเบธเปˆเบก, เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡:

kubectl api-resources
kubectl api-versions

เบ™เบฐโ€‹เป‚เบโ€‹เบšเบฒเบโ€‹เบเบฒเบ™โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบ”เบตโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹เปƒเบ™โ€‹ เป€เบญเบเบฐเบชเบฒเบ™ Alibaba Cloud:

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.

เป€เบžเบทเปˆเบญเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเบเบฑเบšเป€เบซเบ”เบเบฒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบš, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ เบญเบฐเบ—เบดเบšเบฒเบ webhook. เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบงเบกเป€เบญเบปเบฒเปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบ›เปˆเบญเบเปƒเบซเป‰เบกเบฑเบ™เบขเบนเปˆเบ™เบญเบเบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบซเป‰เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡เบเบปเบ™เป„เบเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบžเบทเป‰เบ™เบ–เบฒเบ™เปƒเบ™เบเบธเปˆเบก Kubernetes, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบœเบนเป‰เปƒเบŠเป‰เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™, เปเบเบเบชเบดเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบเบฐเบ—เปเบฒเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบตเบซเบผเบทเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบญเปˆเบฒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบญเบทเปˆเบ™เป†เบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปƒเบ™ Kubernetes, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบกเบญเบšเปƒเบซเป‰เบขเบนเปˆเปƒเบ™ "PS" - เบšเบฒเบ‡เบ—เบตเปƒเบ™เบ™เบฑเป‰เบ™เป€เบˆเบปเป‰เบฒเบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ—เปˆเบฒเบ™.

PS

เบญเปˆเบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™