Kubernetes Basics

Kubernetes Basics

Support HackTricks

The original author of this page is Jorge (read his original post here)

Architecture & Basics

What does Kubernetes do?

  • рдХрдВрдЯреЗрдирд░/рдХреЛ рдХрдВрдЯреЗрдирд░ рдЗрдВрдЬрди рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

  • рд╢реЗрдбреНрдпреВрд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдорд┐рд╢рди рдХреБрд╢рд▓ рдмрдирд╛рддрд╛ рд╣реИред

  • рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЬреАрд╡рд┐рдд рд░рдЦрддрд╛ рд╣реИред

  • рдХрдВрдЯреЗрдирд░ рд╕рдВрдЪрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

  • рддреИрдирд╛рддреА рддрдХрдиреАрдХреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

  • рдЬрд╛рдирдХрд╛рд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

Architecture

  • Node: рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЬрд┐рд╕рдореЗрдВ рдкреЙрдб рдпрд╛ рдкреЙрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред

  • Pod: рдПрдХ рдХрдВрдЯреЗрдирд░ рдпрд╛ рдХрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓рд╛ред рдПрдХ рдкреЙрдб рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░, рдПрдХ рдкреЙрдб рдХреЗрд╡рд▓ 1 рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рддрд╛ рд╣реИ)ред рдкреЙрдб рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЪрд▓ рд░рд╣реЗ рдХрдВрдЯреЗрдирд░ рддрдХрдиреАрдХ рдХреЛ рдЕрдореВрд░реНрдд рдХрд░рддрд╛ рд╣реИред

  • Service: рдкреНрд░рддреНрдпреЗрдХ рдкреЙрдб рдХрд╛ 1 рдЖрдВрддрд░рд┐рдХ IP рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдиреЛрдб рдХреЗ рдЖрдВрддрд░рд┐рдХ рд░реЗрдВрдЬ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕реЗ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реЗрд╡рд╛ рдХрд╛ рднреА рдПрдХ IP рдкрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рдкреЙрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИ рддрд╛рдХрд┐ рдпрджрд┐ рдПрдХ рдорд░ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдирдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдПрдХ рдЕрд▓рдЧ рдЖрдВрддрд░рд┐рдХ IP рдХреЗ рд╕рд╛рде) рдЙрд╕реА рд╕реЗрд╡рд╛ рдХреЗ IP рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдпрд╛ рдмрд╛рд╣рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реЗрд╡рд╛ рддрдм рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ рдЬрдм 2 рдкреЙрдбреНрд╕ рдПрдХ рд╣реА рд╕реЗрд╡рд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рддреЛ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рдЕрдВрдд рдмрд┐рдВрджреБрдУрдВ рдХреЛ kubectl get endpoints рдЪрд▓рд╛рдХрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

  • Kubelet: рдкреНрд░рд╛рдердорд┐рдХ рдиреЛрдб рдПрдЬреЗрдВрдЯред рд╡рд╣ рдШрдЯрдХ рдЬреЛ рдиреЛрдб рдФрд░ рдХреБрдмectl рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдкреЙрдбреНрд╕ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ (API рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред рдХреБрдмрд▓реЗрдЯ рдЙрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрдирд╛рдП рдЧрдП рдереЗред

  • Kube-proxy: рд╡рд╣ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ apiserver рдФрд░ рдиреЛрдб рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ (рд╕реЗрд╡рд╛рдУрдВ) рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЖрдзрд╛рд░ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП IPtables рд╣реИред рд╕рдмрд╕реЗ рдЕрдиреБрднрд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреНрдп рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рд╕реЗ рдЕрдиреНрдп kube-proxies рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • Sidecar container: рд╕рд╛рдЗрдбрдХрд╛рд░ рдХрдВрдЯреЗрдирд░ рд╡реЗ рдХрдВрдЯреЗрдирд░ рд╣реИрдВ рдЬреЛ рдкреЙрдб рдореЗрдВ рдореБрдЦреНрдп рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рд╛рдЗрдбрдХрд╛рд░ рдкреИрдЯрд░реНрди рдореМрдЬреВрджрд╛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рдФрд░ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓реЗред рдЖрдЬрдХрд▓, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрдВрдЯреЗрдирд░ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╣реАрдВ рднреА рдЪрд▓ рд╕рдХреЗред рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдХрд╛рдо рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд░рддрд╛ рд╣реИред

  • Master process:

  • Api Server: рдпрд╣ рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкреЙрдб рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

  • Scheduler: рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╣реИ рдХрд┐ рдкреЙрдбреНрд╕ рдХреЛ рдиреЛрдбреНрд╕ рд╕реЗ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдХреБрдмрд▓реЗрдЯ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛ рд╕рдХреЗред рдЗрд╕рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмреБрджреНрдзрд┐рдорддреНрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдиреЛрдб рдЕрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИ рдФрд░ рдирдП рдкреЙрдб рдХреЛ рдЙрд╕реЗ рд╕реМрдВрдкрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╢реЗрдбреНрдпреВрд▓рд░ рдирдП рдкреЙрдбреНрд╕ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдиреЛрдб рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд░рд╣реЗ рдХреБрдмрд▓реЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдирдП рдкреЙрдб рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред

  • Kube Controller manager: рдпрд╣ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд░рд┐рдкреНрд▓рд┐рдХрд╛ рд╕реЗрдЯ рдпрд╛ рддреИрдирд╛рддреА рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреЙрдбреНрд╕ рдпрд╛ рдиреЛрдбреНрд╕ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдкреЙрдб рдЧрд╛рдпрдм рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░реЗрдЧрд╛ред рдпрд╣ API рдХреЗ рд▓рд┐рдП рдкреБрдирд░реБрддреНрдкрд╛рджрди, рдЯреЛрдХрди рдФрд░ рдЦрд╛рддрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

  • etcd: рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг, рд╕реНрдерд╛рдпреА, рд╕реБрд╕рдВрдЧрдд, рдФрд░ рд╡рд┐рддрд░рд┐рддред рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдкреВрд░реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА-рдореВрд▓реНрдп рднрдВрдбрд╛рд░рдг рд╣реИ (рдпрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╢реЗрдбреНрдпреВрд▓рд░ рдпрд╛ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреНрд░рдмрдВрдзрдХ рдЬреИрд╕реЗ рдШрдЯрдХ рдЗрд╕ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВ (рдиреЛрдбреНрд╕ рдХреЗ рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕рд╛рдзрди, рдЪрд▓ рд░рд╣реЗ рдкреЙрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛...)ред

  • Cloud controller manager: рдпрд╣ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ, рдпрд╛рдиреА: рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ AWS рдпрд╛ OpenStack рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪреВрдВрдХрд┐ рдХрдИ рдиреЛрдбреНрд╕ (рдХрдИ рдкреЙрдбреНрд╕ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ) рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрдИ рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ рд▓реЛрдб рд╕рдВрддреБрд▓рд┐рдд рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрдирдХрд╛ etcd рд╕рдордиреНрд╡рдпрд┐рдд рд╣реЛрддрд╛ рд╣реИред

Volumes:

рдЬрдм рдПрдХ рдкреЙрдб рдбреЗрдЯрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреЙрдб рдХреЗ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдкрд░ рдЦреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЗрд╕реЗ рдПрдХ рднреМрддрд┐рдХ рд╡реЙрд▓реНрдпреВрдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдХ рдкреЙрдб рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдпреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЙрд▓реНрдпреВрдо рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡реЙрд▓реНрдпреВрдо рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдореЗрдВ рдпрд╛ рджреВрд░рд╕реНрде рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рднреМрддрд┐рдХ рдиреЛрдбреНрд╕ рдореЗрдВ рдкреЙрдбреНрд╕ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рджреВрд░рд╕реНрде рднрдВрдбрд╛рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕рднреА рдкреЙрдбреНрд╕ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХреЗрдВред

Other configurations:

  • ConfigMap: рдЖрдк рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП URLs рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреЙрдб рдпрд╣рд╛рдБ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдмрд╛рдХреА рд╕реЗрд╡рд╛рдУрдВ (рдкреЙрдбреНрд╕) рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ!

  • Secret: рдпрд╣ рдЧреБрдкреНрдд рдбреЗрдЯрд╛ рдЬреИрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб, API рдХреБрдВрдЬреА... рдХреЛ B64 рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рд╕реНрдерд╛рди рд╣реИред рдкреЙрдб рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХреЗрдЧрд╛ред

  • Deployments: рдпрд╣ рд╡рд╣ рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдБ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдорддреМрд░ рдкрд░ рдкреЙрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдкреЙрдбреНрд╕ рдХреЛ ReplicaSets (рдПрдХ рд╕рдорд╛рди рдкреЙрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рджреЛрд╣рд░рд╛рдИ рдЬрд╛рддреА рд╣реИ) рдореЗрдВ рдЕрдореВрд░реНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рддреИрдирд╛рддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рддреИрдирд╛рддрд┐рдпрд╛рдБ stateless рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИрдВред рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╛рдо рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рд╣реИред

  • StatefulSet: рдпрд╣ рдШрдЯрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреИрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╣реА рднрдВрдбрд╛рд░рдг рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

  • Ingress: рдпрд╣ рд╡рд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ URL рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред

  • рдпрджрд┐ рдЖрдк рдПрдХ рдЗрдирдЧреНрд░реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ Ingress Controllers рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдПрдХ рдкреЙрдб рд╣реИ рдЬреЛ рд╡рд╣ рдЕрдВрдд рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд▓реЛрдб рд╕рдВрддреБрд▓рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдЗрдирдЧреНрд░реЗрд╕ рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдЧрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрдирдЧреНрд░реЗрд╕ рдирд┐рдпрдо рд╡рд┐рднрд┐рдиреНрди рдкрдереЛрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЖрдВрддрд░рд┐рдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдбреЛрдореЗрди рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • рдПрдХ рдмреЗрд╣рддрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдерд╛ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдХрд┐рд╕реА рднреА рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднрд╛рдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЙрдб рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдпрд╛ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред

  • рдЬрдм рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЗрдирдЧреНрд░реЗрд╕ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдЗрд╕реЗ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреИрдХрдПрдВрдб" рдХреА рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдкрддреЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ describe рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • minikube addons enable ingress

PKI infrastructure - Certificate Authority CA:

  • CA рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рд╕рднреА рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдЯ рд╣реИред

  • рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

  • рд╕рднреА рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ CA рджреНрд╡рд╛рд░рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

  • ETCd рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реИред

  • рдкреНрд░рдХрд╛рд░:

  • apiserver cert.

  • kubelet cert.

  • scheduler cert.

Basic Actions

Minikube

Minikube рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рдмрд┐рдирд╛ рдкреВрд░реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд┐рдПред рдпрд╣ рдПрдХ рдорд╢реАрди рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдФрд░ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдПрдЧрд╛ред Minikube рдиреЛрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ.

$ minikube start
ЁЯШД  minikube v1.19.0 on Ubuntu 20.04
тЬи  Automatically selected the virtualbox driver. Other choices: none, ssh
ЁЯТ┐  Downloading VM boot image ...
> minikube-v1.19.0.iso.sha256: 65 B / 65 B [-------------] 100.00% ? p/s 0s
> minikube-v1.19.0.iso: 244.49 MiB / 244.49 MiB  100.00% 1.78 MiB p/s 2m17.
ЁЯСН  Starting control plane node minikube in cluster minikube
ЁЯТ╛  Downloading Kubernetes v1.20.2 preload ...
> preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB  100.00% 2.59 MiB
ЁЯФе  Creating virtualbox VM (CPUs=2, Memory=3900MB, Disk=20000MB) ...
ЁЯР│  Preparing Kubernetes v1.20.2 on Docker 20.10.4 ...
тЦк Generating certificates and keys ...
тЦк Booting up control plane ...
тЦк Configuring RBAC rules ...
ЁЯФО  Verifying Kubernetes components...
тЦк Using image gcr.io/k8s-minikube/storage-provisioner:v5
ЁЯМЯ  Enabled addons: storage-provisioner, default-storageclass
ЁЯПД  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by defaul

$ minikube status
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

---- ONCE YOU HAVE A K8 SERVICE RUNNING WITH AN EXTERNAL SERVICE -----
$ minikube service mongo-express-service
(This will open your browser to access the service exposed port)

$ minikube delete
ЁЯФе  Deleting "minikube" in virtualbox ...
ЁЯТА  Removed all traces of the "minikube" cluster

Kubectl Basics

Kubectl рдХреНрдпреВрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реИред рдпрд╣ рдХреНрдпреВрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреЗ рдпрд╛ рдбреЗрдЯрд╛ рдорд╛рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред

kubectl version #Get client and server version
kubectl get pod
kubectl get services
kubectl get deployment
kubectl get replicaset
kubectl get secret
kubectl get all
kubectl get ingress
kubectl get endpoints

#kubectl create deployment <deployment-name> --image=<docker image>
kubectl create deployment nginx-deployment --image=nginx
#Access the configuration of the deployment and modify it
#kubectl edit deployment <deployment-name>
kubectl edit deployment nginx-deployment
#Get the logs of the pod for debbugging (the output of the docker container running)
#kubectl logs <replicaset-id/pod-id>
kubectl logs nginx-deployment-84cd76b964
#kubectl describe pod <pod-id>
kubectl describe pod mongo-depl-5fd6b7d4b4-kkt9q
#kubectl exec -it <pod-id> -- bash
kubectl exec -it mongo-depl-5fd6b7d4b4-kkt9q -- bash
#kubectl describe service <service-name>
kubectl describe service mongodb-service
#kubectl delete deployment <deployment-name>
kubectl delete deployment mongo-depl
#Deploy from config file
kubectl apply -f deployment.yml

Minikube Dashboard

рдбреИрд╢рдмреЛрд░реНрдб рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдорд┐рдиреАрдХреНрдпреВрдм рдХреНрдпрд╛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП URL рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

minikube dashboard --url


ЁЯФМ  Enabling dashboard ...
тЦк Using image kubernetesui/dashboard:v2.3.1
тЦк Using image kubernetesui/metrics-scraper:v1.0.7
ЁЯдФ  Verifying dashboard health ...
ЁЯЪА  Launching proxy ...
ЁЯдФ  Verifying proxy health ...
http://127.0.0.1:50034/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

YAML configuration files examples

рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 3 рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: metadata, specification (рдХреНрдпрд╛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИ), status (рдЗрдЪреНрдЫрд┐рдд рд╕реНрдерд┐рддрд┐)ред рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреА рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдЖрдк рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдореЗрдЬ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдирдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ:

Example of Deployment + Service declared in the same configuration file (from here)

рдЪреВрдВрдХрд┐ рдПрдХ рд╕реЗрд╡рд╛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдШреЛрд╖рд┐рдд рд╕реЗрд╡рд╛ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд╣реИ):

apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-deployment
labels:
app: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
---
apiVersion: v1
kind: Service
metadata:
name: mongodb-service
spec:
selector:
app: mongodb
ports:
- protocol: TCP
port: 27017
targetPort: 27017

рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг

рдпрд╣ рд╕реЗрд╡рд╛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдЧреА (рдЪреЗрдХ рдХрд░реЗрдВ nodePort рдФрд░ type: LoadBlancer рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ):

---
apiVersion: v1
kind: Service
metadata:
name: mongo-express-service
spec:
selector:
app: mongo-express
type: LoadBalancer
ports:
- protocol: TCP
port: 8081
targetPort: 8081
nodePort: 30000

рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдПрдБ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Ingress рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

Ingress рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрджрд╛рд╣рд░рдг

рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ http://dashboard.com рдкрд░ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ред

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dashboard-ingress
namespace: kubernetes-dashboard
spec:
rules:
- host: dashboard.com
http:
paths:
- backend:
serviceName: kubernetes-dashboard
servicePort: 80

Example of secrets config file

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╛рд╕рд╡рд░реНрдб B64 рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИрдВ (рдЬреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ!)

apiVersion: v1
kind: Secret
metadata:
name: mongodb-secret
type: Opaque
data:
mongo-root-username: dXNlcm5hbWU=
mongo-root-password: cGFzc3dvcmQ=

ConfigMap рдХрд╛ рдЙрджрд╛рд╣рд░рдг

рдПрдХ ConfigMap рд╡рд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ рдЬреЛ рдкреЙрдбреНрд╕ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдвреВрдВрдврдирд╛ рдФрд░ рдЙрди рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреЙрдб рдХреЛ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдирд╛рдо mongodb-service рдПрдХ рдкреЙрдб рдХрд╛ рдкрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡реЗ рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдкреЙрдб рдПрдХ mongodb рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛):

apiVersion: v1
kind: ConfigMap
metadata:
name: mongodb-configmap
data:
database_url: mongodb-service

рдлрд┐рд░, рдПрдХ deployment config рдХреЗ рдЕрдВрджрд░, рдЗрд╕ рдкрддреЗ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдкреЛрдб рдХреЗ env рдХреЗ рдЕрдВрджрд░ рд▓реЛрдб рд╣реЛ рдЬрд╛рдП:

[...]
spec:
[...]
template:
[...]
spec:
containers:
- name: mongo-express
image: mongo-express
ports:
- containerPort: 8081
env:
- name: ME_CONFIG_MONGODB_SERVER
valueFrom:
configMapKeyRef:
name: mongodb-configmap
key: database_url
[...]

рдЙрджрд╛рд╣рд░рдг рд╡реЙрд▓реНрдпреВрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╕реНрдЯреЛрд░реЗрдЬ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди yaml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡реЙрд▓реНрдпреВрдо рдирд╛рдорд╕реНрдкреЗрд╕ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ

рдирд╛рдорд╕реНрдкреЗрд╕

Kubernetes рдПрдХ рд╣реА рднреМрддрд┐рдХ рдХреНрд▓рд╕реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрдИ рдЖрднрд╛рд╕реА рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрди рдЖрднрд╛рд╕реА рдХреНрд▓рд╕реНрдЯрд░реЛрдВ рдХреЛ рдирд╛рдорд╕реНрдкреЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдЙрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдИ рдЯреАрдореЛрдВ рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдлреИрд▓реЗ рд╣реБрдП рд╣реИрдВред рдХреБрдЫ рд╕реЗ рд▓реЗрдХрд░ рджрд░реНрдЬрдиреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд╛рдорд╕реНрдкреЗрд╕ рдмрдирд╛рдиреЗ рдпрд╛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдирд╛рдорд╕реНрдкреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЖрдк kubernetes рдореЗрдВ рддреИрдирд╛рдд рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЗ рдмреЗрд╣рддрд░ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рд╕рдВрдЧрдарди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред

рдирд╛рдорд╕реНрдкреЗрд╕ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╛рдпрд░рд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдирд╛рдо рдХреЛ рдПрдХ рдирд╛рдорд╕реНрдкреЗрд╕ рдХреЗ рднреАрддрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдирд╛рдорд╕реНрдкреЗрд╕ рдХреЗ рдмреАрдЪ рдирд╣реАрдВред рдирд╛рдорд╕реНрдкреЗрд╕ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ Kubernetes рд╕рдВрд╕рд╛рдзрди рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк minikube рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 4 рдирд╛рдорд╕реНрдкреЗрд╕ рд╣реИрдВ:

kubectl get namespace
NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d
  • kube-system: рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЫреВрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдорд╛рд╕реНрдЯрд░ рдФрд░ kubectl рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИред

  • kube-public: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рдбреЗрдЯрд╛ред рдЗрд╕рдореЗрдВ рдПрдХ configmap рд╣реИ рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред

  • kube-node-lease: рдПрдХ рдиреЛрдб рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

  • default: рд╡рд╣ рдирд╛рдорд╕реНрдерд╛рди рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

#Create namespace
kubectl create namespace my-namespace

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ Kubernetes рд╕рдВрд╕рд╛рдзрди (рдЬреИрд╕реЗ pods, services, replication controllers, рдФрд░ рдЕрдиреНрдп) рдХреБрдЫ namespaces рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдЬреИрд╕реЗ namespace рд╕рдВрд╕рд╛рдзрди рдФрд░ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рдВрд╕рд╛рдзрди, рдЬреИрд╕реЗ nodes рдФрд░ persistentVolumes рдХрд┐рд╕реА namespace рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реЗ Kubernetes рд╕рдВрд╕рд╛рдзрди namespace рдореЗрдВ рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВ:

kubectl api-resources --namespaced=true #In a namespace
kubectl api-resources --namespaced=false #Not in a namespace

рдЖрдк рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рднреА рдмрд╛рдж рдХреЗ kubectl рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

kubectl config set-context --current --namespace=<insert-namespace-name-here>

Helm

Helm Kubernetes рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рд╣реИред рдпрд╣ YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХреЛ Helm Charts рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

helm search <keyword>

Helm рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рднреА рд╣реИ рдЬреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

Kubernetes secrets

рдПрдХ Secret рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдЬреИрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб, рдЯреЛрдХрди рдпрд╛ рдХреБрдВрдЬреА рдХреЛ рдзрд╛рд░рдг рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдЕрдиреНрдпрдерд╛ рдПрдХ Pod рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдпрд╛ рдПрдХ рдЗрдореЗрдЬ рдореЗрдВ рд░рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Secrets рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рднреА Secrets рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ Secret рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдПрдХ рдорд╛рдиреНрдп DNS рдЙрдкрдбреЛрдореЗрди рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред

Secrets рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  • API, SSH Keys.

  • OAuth tokens.

  • Credentials, Passwords (plain text рдпрд╛ b64 + encryption)ред

  • рдЬрд╛рдирдХрд╛рд░реА рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБред

  • рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЛрдб, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕тАжред

Kubernetes рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ secrets рд╣реЛрддреЗ рд╣реИрдВ

Opaque рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рд╛рдорд╛рдиреНрдп рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реАред

Secrets рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдПрдХ secret рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ mysecret рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 2 рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ username: YWRtaW4= рдФрд░ password: MWYyZDFlMmU2N2Rm рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ pod рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ secretpod рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ mysecret рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд username рдФрд░ password рдХреЛ environment variables SECRET_USERNAME __ рдФрд░ __ SECRET_PASSWOR рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ред рдпрд╣ 0640 рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде /etc/foo/my-group/my-username рдкрде рдореЗрдВ mysecret рдХреЗ рдЕрдВрджрд░ username secret рдХреЛ рднреА mount рдХрд░реЗрдЧрд╛ред

secretpod.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
---
apiVersion: v1
kind: Pod
metadata:
name: secretpod
spec:
containers:
- name: secretpod
image: nginx
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
volumeMounts:
- name: foo
mountPath: "/etc/foo"
restartPolicy: Never
volumes:
- name: foo
secret:
secretName: mysecret
items:
- key: username
path: my-group/my-username
mode: 0640
kubectl apply -f <secretpod.yaml>
kubectl get pods #Wait until the pod secretpod is running
kubectl exec -it  secretpod -- bash
env | grep SECRET && cat /etc/foo/my-group/my-username && echo

Secrets in etcd

etcd рдПрдХ рд╕реБрд╕рдВрдЧрдд рдФрд░ рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╡рд╛рд▓рд╛ рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Kubernetes рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдХреНрд▓рд╕реНрдЯрд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдмреИрдХрд┐рдВрдЧ рд╕реНрдЯреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд▓рд┐рдП etcd рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд╣рд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ:

cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep etcd

рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рд░реНрдЯреНрд╕, рдХреАрдЬрд╝ рдФрд░ рдпреВрдЖрд░рдПрд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк etcd рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

#ETCDCTL_API=3 etcdctl --cert <path to client.crt> --key <path to client.ket> --cacert <path to CA.cert> endpoint=[<ip:port>] health

ETCDCTL_API=3 etcdctl --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key --cacert /etc/kubernetes/pki/etcd/etcd/ca.cert endpoint=[127.0.0.1:1234] health

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:

#ETCDCTL_API=3 etcdctl --cert <path to client.crt> --key <path to client.ket> --cacert <path to CA.cert> endpoint=[<ip:port>] get <path/to/secret>

ETCDCTL_API=3 etcdctl --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key --cacert /etc/kubernetes/pki/etcd/etcd/ca.cert endpoint=[127.0.0.1:1234] get /registry/secrets/default/secret_02

ETCD рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЬреЛрдбрд╝рдирд╛

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рд░рд╣рд╕реНрдп рд╕рд╛рджрд╛ рдкрд╛рда рдореЗрдВ etcd рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкрд░рдд рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

encryption.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: cjjPMcWpTPKhAdieVtd+KhG4NN+N6e3NmBPMXJvbfrY= #Any random key
- identity: {}

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ kube-apiserver рдкрд░ --encryption-provider-config рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдмрдирд╛рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реНрдерд╛рди рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░реЗред рдЖрдк /etc/kubernetes/manifest/kube-apiserver.yaml рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

containers:
- command:
- kube-apiserver
- --encriyption-provider-config=/etc/kubernetes/etcd/<configFile.yaml>

рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ volumeMounts рдореЗрдВ:

- mountPath: /etc/kubernetes/etcd
name: etcd
readOnly: true

рдиреАрдЪреЗ volumeMounts рдореЗрдВ hostPath рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ:

- hostPath:
path: /etc/kubernetes/etcd
type: DirectoryOrCreate
name: etcd

рдбреЗрдЯрд╛ рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╣реЛрдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛

рдбреЗрдЯрд╛ рдХреЛ etcd рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╕рдордп рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрдиреЗ kube-apiserver рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЛрдИ рднреА рдирдпрд╛ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реАрдХреНрд░реЗрдЯ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╕рдордп рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╕реАрдХреНрд░реЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП etcdctl рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  1. default рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ secret1 рдирд╛рдордХ рдПрдХ рдирдпрд╛ рд╕реАрдХреНрд░реЗрдЯ рдмрдирд╛рдПрдВ:

kubectl create secret generic secret1 -n default --from-literal=mykey=mydata
  1. etcdctl рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрд╕ рд╕реАрдХреНрд░реЗрдЯ рдХреЛ etcd рд╕реЗ рдкрдврд╝реЗрдВ:

ETCDCTL_API=3 etcdctl get /registry/secrets/default/secret1 [...] | hexdump -C

рдЬрд╣рд╛рдВ [...] рдЖрджрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред 3. рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реАрдХреНрд░реЗрдЯ k8s:enc:aescbc:v1: рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ aescbc рдкреНрд░рджрд╛рддрд╛ рдиреЗ рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рд╣реИред 4. рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рд╕реАрдХреНрд░реЗрдЯ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

kubectl describe secret secret1 -n default

рдХреЛ mykey: bXlkYXRh рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, mydata рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реАрдХреНрд░реЗрдЯ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдХреНрд░реЗрдЯ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

рдЪреВрдВрдХрд┐ рд╕реАрдХреНрд░реЗрдЯ рд▓рд┐рдЦрдиреЗ рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕реАрдХреНрд░реЗрдЯ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЙрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдЧрд╛:

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

рдЕрдВрддрд┐рдо рд╕реБрдЭрд╛рд╡:

рд╕рдВрджрд░реНрдн

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Last updated