рдж рдПрдмреАрд╕реА рдСрдл рд╕рд┐рдХреНрдпреБрд░рд┐рдЯреА рдЗрди рдХреБрдмрд░реНрдиреЗрдЯреНрд╕: рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди, рдСрдерд░рд╛рдпрдЭреЗрд╢рди, рдСрдбрд┐рдЯрд┐рдВрдЧ

рдж рдПрдмреАрд╕реА рдСрдл рд╕рд┐рдХреНрдпреБрд░рд┐рдЯреА рдЗрди рдХреБрдмрд░реНрдиреЗрдЯреНрд╕: рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди, рдСрдерд░рд╛рдпрдЭреЗрд╢рди, рдСрдбрд┐рдЯрд┐рдВрдЧ

рд▓рд╡рдХрд░рдЪ рдХрд┐рдВрд╡рд╛ рдирдВрддрд░, рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдирдордзреНрдпреЗ, рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪрд╛ рдкреНрд░рд╢реНрди рдЙрджреНрднрд╡рддреЛ: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ, рдЕрдзрд┐рдХрд╛рд░рд╛рдВрдЪреЗ рдкреГрдердХреНрдХрд░рдг, рдСрдбрд┐рдЯрд┐рдВрдЧ рдЖрдгрд┐ рдЗрддрд░ рдХрд╛рд░реНрдпреЗ. Kubernetes рд╕рд╛рдареА рдЖрдзреАрдЪ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ рдЕрдиреЗрдХ рдЙрдкрд╛рдп, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрддреНрдпрдВрдд рдорд╛рдЧрдгреА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рддрд╣реА рдорд╛рдирдХрд╛рдВрдЪреЗ рдкрд╛рд▓рди рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ... рд╕рдорд╛рди рд╕рд╛рдордЧреНрд░реА K8 рдЪреНрдпрд╛ рдЕрдВрдЧрднреВрдд рдпрдВрддреНрд░рдгрд╛рдВрдордзреНрдпреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪреНрдпрд╛ рдореВрд▓рднреВрдд рдкреИрд▓реВрдВрд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд рдЖрд╣реЗ. рд╕рд░реНрд╡рдкреНрд░рдердо, рдЬреЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рдд рдЖрд╣реЗрдд рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рддреЗ рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓ - рд╕реБрд░рдХреНрд╖рд╛-рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдВрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреВ рдореНрд╣рдгреВрди.

рдкреНрд░рдорд╛рдгреАрдХрд░рдг

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреНрдпреЗ рджреЛрди рдкреНрд░рдХрд╛рд░рдЪреЗ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдЖрд╣реЗрдд:

  • рд╕реЗрд╡рд╛ рдЦрд╛рддреА тАФ Kubernetes API рджреНрд╡рд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реА рдЦрд╛рддреА;
  • рд╡рд╛рдкрд░рдХрд░реНрддреЗ - рдмрд╛рд╣реНрдп, рд╕реНрд╡рддрдВрддреНрд░ рд╕реЗрд╡рд╛рдВрджреНрд╡рд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реЗ "рд╕рд╛рдорд╛рдиреНрдп" рд╡рд╛рдкрд░рдХрд░реНрддреЗ.

рдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдордзреАрд▓ рдореБрдЦреНрдп рдлрд░рдХ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рд╕реЗрд╡рд╛ рдЦрд╛рддреНрдпрд╛рдВрд╕рд╛рдареА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ API рдордзреНрдпреЗ рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреВ рдЖрд╣реЗрдд (рддреНрдпрд╛рдВрдирд╛ рдЕрд╕реЗ рдореНрд╣рдгрддрд╛рдд - ServiceAccounts), рдЬреЗ рдиреЗрдорд╕реНрдкреЗрд╕рд╢реА рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдкреНрд░рдХрд╛рд░рд╛рддреАрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдордзреНрдпреЗ рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдзрд┐рдХреГрдд рдбреЗрдЯрд╛рдЪреНрдпрд╛ рд╕рдВрдЪрд╛рд▓рд╛. рдЕрд╕реЗ рд╡рд╛рдкрд░рдХрд░реНрддреЗ (рд╕реЗрд╡рд╛ рдЦрд╛рддреА) рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдЪрд╛рд▓рдгрд╛рд░реНтАНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдЪреНрдпрд╛ Kubernetes API рдордзреАрд▓ рдкреНрд░рд╡реЗрд╢ рдЕрдзрд┐рдХрд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╕рддрд╛рдд.

рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдХрдбреЗ Kubernetes API рдордзреНрдпреЗ рдиреЛрдВрджреА рдирд╕рддрд╛рдд: рддреНрдпрд╛ рдмрд╛рд╣реНрдп рдпрдВрддреНрд░рдгреЗрджреНрд╡рд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд. рддреЗ рдХреНрд▓рд╕реНрдЯрд░рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рд░рд╛рд╣рдгрд╛рд▒реНрдпрд╛ рд▓реЛрдХрд╛рдВрд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрд╕рд╛рдареА рдЖрд╣реЗрдд.

рдкреНрд░рддреНрдпреЗрдХ API рд╡рд┐рдирдВрддреА рдПрдХрддрд░ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ, рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ рдХрд┐рдВрд╡рд╛ рдирд┐рдирд╛рд╡реА рдорд╛рдирд▓реА рдЬрд╛рддреЗ.

рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдбреЗрдЯрд╛рдордзреНрдпреЗ рд╣реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ:

  • рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡ тАФ рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡ (рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓!);
  • рдпреВрдЖрдпрдбреА - рдПрдХ рдорд╢реАрди-рд╡рд╛рдЪрдиреАрдп рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдУрд│рдЦ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреА "рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡рд╛рдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдЖрдгрд┐ рдЕрджреНрд╡рд┐рддреАрдп" рдЖрд╣реЗ;
  • рдЧрдЯ тАФ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЬреНрдпрд╛ рдЧрдЯрд╛рдВрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреА рдпрд╛рджреА;
  • рдЕрддрд┐рд░рд┐рдХреНрдд тАФ рдЕрдзрд┐рдХреГрддрддрд╛ рдпрдВрддреНрд░рдгреЗрджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрдгрд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдлреАрд▓реНрдб.

Kubernetes рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдпрдВрддреНрд░рдгрд╛ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛рдд: 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"
  • Kubernetes рдХреНрд▓рд╕реНрдЯрд░ 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 рдХреНрд▓рд╕реНрдЯрд░рдЪреНрдпрд╛ рдПрдкреАрдЖрдп-рд╕рд░реНрд╡реНрд╣рд░рдЪреА рд╢реБрджреНрдзрддрд╛ рддрдкрд╛рд╕рдгрд╛рд░ рдирд╛рд╣реА):
      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: рдЖрд╡рд╢реНрдпрдХ рдкрддреНрддрд╛ рдЬрд╛рд╣рд┐рд░рд╛рдд рдХрд░рд╛ рдПрдкреАрдЖрдп-рд╕рд░реНрд╡реНрд╣рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдЖрдврд│реВ рд╢рдХрддреЗ, рдЬреЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕реНрдерд┐рдд рдЖрд╣реЗ /etc/kubernetes/manifests/kube-apiserver.yaml.

рдкрд░рд┐рдгрд╛рдореА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди stdout рд╡рд░ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдИрд▓. рдордзреНрдпреЗ рдЬрддрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ ~/.kube/config рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЦрд╛рддреЗ рдХрд┐рдВрд╡рд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓рд╡рд░ KUBECONFIG.

рдЦреЛрд▓ рдЦреЛрджрд╛

рдЬреНрдпрд╛рдВрдирд╛ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╕рдордЬреВрди рдШреНрдпрд╛рдпрдЪреНрдпрд╛ рдЖрд╣реЗрдд рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА:

рдЕрдзрд┐рдХреГрддрддрд╛

рдбреАрдлреЙрд▓реНрдЯ рдЕрдзрд┐рдХреГрдд рдЦрд╛рддреНрдпрд╛рд▓рд╛ рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ рдСрдкрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреЗ рдЕрдзрд┐рдХрд╛рд░ рдирд╛рд╣реАрдд. рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рджреЗрдгреНрдпрд╛рд╕рд╛рдареА, Kubernetes рдЕрдзрд┐рдХреГрддрддрд╛ рдпрдВрддреНрд░рдгрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ.

рдЖрд╡реГрддреНрддреА рез.рем рдЪреНрдпрд╛ рдЖрдзреА, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдирд╛рд╡рд╛рдЪрд╛ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд░рдд рдЕрд╕реЗ ABAC (рд╡рд┐рд╢реЗрд╖рддрд╛-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг). рддреНрдпрд╛рдмрджреНрджрд▓рдЪреЗ рддрдкрд╢реАрд▓ рдпрд╛рдордзреНрдпреЗ рдорд┐рд│реВ рд╢рдХрддрд╛рдд рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг. рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рд╕рдзреНрдпрд╛ рд╡рд╛рд░рд╕рд╛ рдорд╛рдирд▓рд╛ рдЬрд╛рддреЛ, рдкрд░рдВрддреБ рддрд░реАрд╣реА рддреБрдореНрд╣реА рдЗрддрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХрд╛рд░рд╛рдВрд╕реЛрдмрдд рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.

рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрдзрд┐рдХрд╛рд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд░реНрддрдорд╛рди (рдЖрдгрд┐ рдЕрдзрд┐рдХ рд▓рд╡рдЪрд┐рдХ) рдорд╛рд░реНрдЧ рдореНрд╣рдгрддрд╛рдд RBAC (рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг). рдЖрд╡реГрддреНрддреАрдкрд╛рд╕реВрди рддреЗ рд╕реНрдерд┐рд░ рдШреЛрд╖рд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ 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 рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рддрддреНрддреНрд╡рд╛рдВрдЪреЗ рдЖрдгрд┐ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪреЗ рдмрд▒реНрдпрд╛рдкреИрдХреА рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрдирд╛рд╕рд╣, рддреНрдпрд╛рдореБрд│реЗ рдкреБрдвреЗ рдореА рд╕реНрд╡рддрдГрд▓рд╛ рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреА рдЖрдгрд┐ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реВрдЪреАрдкреБрд░рддреЗ рдорд░реНрдпрд╛рджрд┐рдд рдареЗрд╡реАрди.

RBAC рджреНрд╡рд╛рд░реЗ Kubernetes рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЦрд╛рд▓реАрд▓ API рдШрдЯрдХрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ:

  • 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 рдордзреНрдпреЗ рдХрд╛рдп рд╣реЛрддреЗ?┬╗.

рд╕рд┐рд╕реНрдЯрдо рдСрдбрд┐рдЯрд┐рдВрдЧ рд╣реЗ Kubernetes рдордзреАрд▓ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЖрд╣реЗ, рдЬреЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдЕрдХреНрд╖рдо рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗ. рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡ рдХреЙрд▓реНрд╕ Kubernetes API рд╡рд░ рд▓реЙрдЧ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рддреБрдореНрд╣реА рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡реВ рд╢рдХрддрд╛, рдХреНрд▓рд╕реНрдЯрд░рдЪреА рд╕реНрдерд┐рддреА рдирд┐рд░реАрдХреНрд╖рдг рдЖрдгрд┐ рдмрджрд▓рдгреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╕рд░реНрд╡ рдХреНрд░рд┐рдпрд╛ рдпрд╛ API рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рддреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛рдВрдЪреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╡рд░реНрдгрди (рдиреЗрд╣рдореАрдкреНрд░рдорд╛рдгреЗ) рдордзреНрдпреЗ рдЖрдврд│реВ рд╢рдХрддреЗ рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг K8s. рдкреБрдвреЗ рдореА рд╡рд┐рд╖рдп рд╕реЛрдкреНрдпрд╛ рднрд╛рд╖реЗрдд рдорд╛рдВрдбрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реЗрди.

рддреНрдпрд╛рдореБрд│реЗ рдСрдбрд┐рдЯрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ api-server рдордзреАрд▓ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рддреАрди рдЖрд╡рд╢реНрдпрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд╛рд╕ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреНрдпрд╛рдЪреЗ рдЦрд╛рд▓реА рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ:

  • --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}')

рдСрдбрд┐рдЯрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рддрд╛рдирд╛, рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ 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);
  • рдХреНрд░рд┐рдпрд╛рдкрдж (рдХреНрд░рд┐рдпрд╛рдкрдж: 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 рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓.

рдСрдбрд┐рдЯ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕рдирд╛ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдгреНрдпрд╛рд╕рд╛рдареА, рд╣реЗ рд╢рдХреНрдп рдЖрд╣реЗ рд╡реЗрдмрд╣реБрдХрдЪреЗ рд╡рд░реНрдгрди рдХрд░рд╛. рд╣рд╛ рдореБрджреНрджрд╛ рдЕрдВрддрд░реНрднреВрдд рдЖрд╣реЗ рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг, рдореА рдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╡реНрдпрд╛рдкреНрддреАрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рд╕реЛрдбреЗрди.

рдкрд░рд┐рдгрд╛рдо

рд▓реЗрдЦ Kubernetes рдХреНрд▓рд╕реНрдЯрд░реНрд╕рдордзреАрд▓ рдореВрд▓рднреВрдд рд╕реБрд░рдХреНрд╖рд╛ рдпрдВрддреНрд░рдгреЗрдЪреЗ рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди рдкреНрд░рджрд╛рди рдХрд░рддреЛ, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реИрдпрдХреНрддрд┐рдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЦрд╛рддреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕, рддреНрдпрд╛рдВрдЪреЗ рдЕрдзрд┐рдХрд╛рд░ рд╡реЗрдЧрд│реЗ рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреНрд░рд┐рдпрд╛ рд░реЗрдХреЙрд░реНрдб рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд. рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдЬреНрдпрд╛рдВрдирд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд┐рдВрд╡рд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдЕрд╢рд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рддреЗ рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓. рдореА рдЕрд╢реА рд╢рд┐рдлрд╛рд░рд╕ рджреЗрдЦреАрд▓ рдХрд░рддреЛ рдХреА рддреБрдореНрд╣реА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреАрд▓ рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рдЗрддрд░ рд╕рд╛рдордЧреНрд░реАрдЪреА рдпрд╛рджреА рд╡рд╛рдЪрд╛, рдЬреА тАЬPSтАЭ рдордзреНрдпреЗ рджрд┐рд▓реА рдЖрд╣реЗ - рдХрджрд╛рдЪрд┐рдд рддреНрдпрд╛рдкреИрдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдВрдмрджреНрджрд▓ рдЖрд╡рд╢реНрдпрдХ рддрдкрд╢реАрд▓ рд╕рд╛рдкрдбрддреАрд▓.

PS

рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛