рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

рдпрд╣ рд╕рд╣реА рд╣реИ, рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рдж рд╣рд╛рд╢рд┐рдХреЛрд░реНрдк рдХреМрдВрд╕рд▓ 1.5.0 рдордИ 2019 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдХреЙрдиреНрд╕рд▓ рдореЗрдВ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рдЪрд░рдг рджрд░ рдЪрд░рдг рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ POC (рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг, рдкреАрдУрд╕реА) рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрдкрд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рд╣реИрд╢рд┐рдХреЙрд░реНрдк рдХреЗ рдХрдВрд╕рд▓ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЬрдмрдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдпрд╛ рдСрди-рдкреНрд░рд┐рдорд╛рдЗрд╕реЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо Google рдХреЗ рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

╨Ю╨▒╨╖╨╛╤А

рдЕрдЧрд░ рд╣рдо рдЬрд╛рддреЗ рд╣реИрдВ рдЗрд╕рдХреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдкрд░ рдХреМрдВрд╕рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рд╣рдо рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдХреБрдЫ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдФрд░ рддрд░реНрдХ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд▓реЛрдХрди рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдФрд░ рдЪрдмрд╛рдКрдВрдЧрд╛ред

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

рдЪрд┐рддреНрд░ 1: рдХреМрдВрд╕рд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЕрд╡рд▓реЛрдХрди

рдЖрдЗрдП рдЕрдВрджрд░ рджреЗрдЦреЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг.

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд╣рд╛рдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕ рдкрд░ рдХреЛрдИ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдирд╣реАрдВ рд╣реИред рддреЛ, рдХрд┐рд╕реА рднреА рд╕рдордЭрджрд╛рд░ рд╡реНрдпрдХреНрддрд┐ рдХреА рддрд░рд╣, рдЖрдк рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдЦрдВрдЧрд╛рд▓рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░... рдЖрдк рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ.

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдкрдирд╛ рдкреАрдУрд╕реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдЖрдЗрдП рдХреМрдВрд╕рд▓ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддрд░реАрдХреЛрдВ (рдЪрд┐рддреНрд░ 1) рдХреЗ рдЕрд╡рд▓реЛрдХрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░реЗрдВред

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдорд╢реАрди рдкрд░ рдПрдХ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд╕реНрдерд╛рдкрд┐рдд рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░реЗрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдкреЙрдб рдореЗрдВ рдЕрдкрдирд╛ рдбрдореА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЕрдкрдиреЗ рдХреЙрдиреНрд╕рд▓ рдХреБрдВрдЬреА/рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд┐рддреНрд░ рдЙрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рддрд░реНрдХ рднреА, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

рдЖрд░реЗрдЦ 2: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдЕрд╡рд▓реЛрдХрди

рдПрдХ рддреНрд╡рд░рд┐рдд рдиреЛрдЯ: рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдмрд╛рд╣рд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рд╡рд╣ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдФрд░ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рддреЛ, рдХреЙрдиреНрд╕рд▓ рдЕрд╡рд▓реЛрдХрди рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 1) рд▓реЗрдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 2) рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрд░реНрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  1. рдкреНрд░рддреНрдпреЗрдХ рдкреЙрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдФрд░ рдЬреНрдЮрд╛рдд рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдЯреЛрдХрди рд╣реЛрдЧрд╛ред рдпрд╣ рдЯреЛрдХрди рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреЙрдб рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдкреЙрдб рдХреЗ рдЕрдВрджрд░ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд╕реЗрд╡рд╛ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЙрдЧрд┐рди рдХрдорд╛рдВрдб рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЯреЛрдХрди рдФрд░ рдирд╛рдо рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ (рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рдХрд╛рд░)ред рдпрд╣ рдЪрд░рдг #2 рдХреЙрдиреНрд╕рд▓ рдЖрд░реЗрдЦ (рдпреЛрдЬрдирд╛ 1) рдХреЗ рдЪрд░рдг 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
  3. рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред
  4. рдЬрд╛рджреВ! рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреБрд░реЛрдз рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдПрдХ рдФрд░ рдЪрд┐рддреНрд░ рд╣реИред рдпрд╣ рдЪрд░рдг рдХреЙрдиреНрд╕рд▓ рдЕрд╡рд▓реЛрдХрди рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 3) рдХреЗ рдЪрд░рдг 4, 5 рдФрд░ 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
  5. рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рдорд╛рд░реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдирд┐рдпрдореЛрдВ (рдЬреЛ рд╣рдордиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрдиреНрд╕рд▓ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдЙрд╕ рдЯреЛрдХрди рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬ рджреЗрдЧрд╛ред рдпрд╣ рдХреЙрдиреНрд╕рд▓ рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 6) рдХреЗ рдЪрд░рдг 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
  6. рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд╕реЗрд╡рд╛ рдХреЛ рдЯреЛрдХрди рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

рдЬрд╛рджреВ рдЙрдЬрд╛рдЧрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ!

рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЯреЛрдкреА рдореЗрдВ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдЦрд░рдЧреЛрд╢ рд╕реЗ рдЦреБрд╢ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ... рдЖрдЗрдП рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рддрдиреА рдЧрд╣рд░рд╛рдИ рддрдХ рдЦрд╝рд░рдЧреЛрд╢ рдХрд╛ рдмрд┐рд▓'.

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░рд╛ "рдЬрд╛рджреБрдИ" рдХрджрдо (рдЪрд┐рддреНрд░ 2: рдЪрд░рдг 4) рд╡рд╣ рд╣реИ рдЬрд╣рд╛рдВ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕реА рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд┐рдпрдореЛрдВ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЪрд░рдг рдХреЙрдиреНрд╕рд▓ рдЕрд╡рд▓реЛрдХрди рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 3) рдХреЗ рдЪрд░рдг 4, 5 рдФрд░ 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рдПрдХ рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 3) рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ред

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

рдЪрд┐рддреНрд░ 3: рдЬрд╛рджреВ рдкреНрд░рдХрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ!

  1. рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЦрд╛рддрд╛ рдЯреЛрдХрди рдФрд░ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЪрд░рдг рдкрд┐рдЫрд▓реЗ рд╕рд░реНрдХрд┐рдЯ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореЗрдВ рдЪрд░рдг 3 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
  2. рдЕрдм рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ (рдпрд╛ рд▓реАрдбрд░) рдХреЛ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ (рдХрдВрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд░реЗрдЧрд╛ рдФрд░, рдЙрдЪрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдЯреЛрдХрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдпрд╣ рдХрд┐рд╕рдХрд╛ рд╣реИред
  3. рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдз рдлрд┐рд░ рдХреЙрдиреНрд╕рд▓ рд▓реАрдбрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдз (рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рдХрд╛рд░) рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред
  4. рдХреМрдВрд╕рд▓ рдиреЗрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирд┐рдпрдореЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдкрд╣рдЪрд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдХрд░рддрд╛ рд╣реИред
  5. рдЯреАрдП-рджрд╣! рдЖрдЗрдП рдкрд┐рдЫрд▓реЗ рд╕рд░реНрдХрд┐рдЯ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореЗрдВ рдЪрд░рдг 5 рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред

рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдХреЙрдиреНрд╕рд▓-рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдБ

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

  • рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (рдЗрдВрд╕реНрдЯреЗрдВрд╕/рд╕рд░реНрд╡рд░) рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

  • рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдмрдирд╛рдПрдВ (AWS рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣):
  • рдореИрдВ рдирд┐рдпрдо рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдЧ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╣реА рдорд╢реАрди рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ "рд╕реНрдХрд╛рдИрд╡рд┐рдЬрд╝-рдХрдВрд╕рд▓-рд╕рд░реНрд╡рд░-рдкреЛрдХ"ред
  • рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рдвреВрдВрдвреЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдЖрдИрдкреА рдкрддреЗ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗрдВред
  • рдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ 8500 рдЦреЛрд▓реЗрдВред рдмрдирд╛рдПрдБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рд╣рдо рдЬрд▓реНрдж рд╣реА рдЗрд╕ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ [рд▓рд┐рдВрдХ].
  • рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВред рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рд╡реАрдПрдо рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдЧ рдлрд╝реАрд▓реНрдб рдореЗрдВ "рд╕реНрдХрд╛рдИрд╡рд┐рдЬрд╝-рдХрдВрд╕рд▓-рд╕рд░реНрд╡рд░-рдкреЛрдХ" рдЬреЛрдбрд╝реЗрдВред рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

  • рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдХреЙрдиреНрд╕рд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рдпрд╣рд╛рдВ рдЬрд╛рдВрдЪреЗрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдЖрдкрдХреЛ рдХреЙрдиреНрд╕рд▓ рд╕рдВрд╕реНрдХрд░рдг тЙе 1.5 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ [рд▓рд┐рдВрдХ]
  • рдЖрдЗрдП рдПрдХ рдПрдХрд▓ рдиреЛрдб рдХреЙрдиреНрд╕рд▓ рдмрдирд╛рдПрдВ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред

groupadd --system consul
useradd -s /sbin/nologin --system -g consul consul
mkdir -p /var/lib/consul
chown -R consul:consul /var/lib/consul
chmod -R 775 /var/lib/consul
mkdir /etc/consul.d
chown -R consul:consul /etc/consul.d

  • рдХреЙрдиреНрд╕рд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ 3 рдиреЛрдбреНрд╕ рдХрд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдпрд╣рд╛рдВ.
  • рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ /etc/consul.d/agent.json рдмрдирд╛рдПрдВ [рд▓рд┐рдВрдХ]:

### /etc/consul.d/agent.json
{
 "acl" : {
 "enabled": true,
 "default_policy": "deny",
 "enable_token_persistence": true
 }
}

  • рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ:

consul agent 
-server 
-ui 
-client 0.0.0.0 
-data-dir=/var/lib/consul 
-bootstrap-expect=1 
-config-dir=/etc/consul.d

  • рдЖрдкрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдВрдд рдореЗрдВ "...рдПрд╕реАрдПрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрджреНрдпрддрди рдЕрд╡рд░реБрджреНрдз" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХрд╛ рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддрд╛ рдвреВрдВрдвреЗрдВ рдФрд░ рдкреЛрд░реНрдЯ 8500 рдкрд░ рдЗрд╕ рдЖрдИрдкреА рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпреВрдЖрдИ рдЦреБрд▓рддрд╛ рд╣реИред
  • рдПрдХ рдХреБрдВрдЬреА/рдорд╛рди рдЬреЛрдбрд╝реА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд▓рдЧрддрд╛ рд╣реИ рдХреЛрдИ рдЧрдбрд╝рдмрдбрд╝ рд╣реБрдИ рд╣реИ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЛ ACL рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИред
  • рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрдиреЗ рд╢реЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд░реНрдЬ рдХрд░реЗрдВ:

consul acl bootstrap

  • "рд╕реАрдХреНрд░реЗрдЯрдЖрдИрдбреА" рдорд╛рди рдвреВрдВрдвреЗрдВ рдФрд░ рдпреВрдЖрдИ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред рдПрд╕реАрдПрд▓ рдЯреИрдм рдореЗрдВ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрднреА рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдЯреЛрдХрди рдХреА рдЧреБрдкреНрдд рдЖрдИрдбреА рджрд░реНрдЬ рдХрд░реЗрдВред SecretID рдХреЛ рдХрд╣реАрдВ рдФрд░ рдХреЙрдкреА рдХрд░реЗрдВ, рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  • рдЕрдм рдПрдХ рдХреБрдВрдЬреА/рдореВрд▓реНрдп рдпреБрдЧреНрдо рдЬреЛрдбрд╝реЗрдВ. рдЗрд╕ рдкреАрдУрд╕реА рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ: рдХреБрдВрдЬреА: "рдХрд╕реНрдЯрдо-рдПрдирдПрд╕/рдЯреЗрд╕реНрдЯ_рдХреА", рдорд╛рди: "рдореИрдВ рдХрд╕реНрдЯрдо-рдПрдирдПрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реВрдВ!"

рдбреЗрдореЛрдирд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛

  • рдПрдХ K8s (рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕) рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдПрдВред рд╣рдо рдЗрд╕реЗ рддреЗрдЬ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдорд╛рди рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрдВрддрд░рд┐рдХ рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рд╕рдмрдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ "рд╕реНрдХрд╛рдИрд╡рд┐рдЬрд╝-рдРрдк-рд╡рд┐рдж-рдХрдВрд╕рд▓-рдХреНрд▓рд╛рдЗрдВрдЯ-рдкреЛрдХ" рдХрд╣реЗрдВрдЧреЗред

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

  • рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдХреЙрдиреНрд╕рд▓ рдХрдиреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдкреАрдУрд╕реА рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдорд┐рд▓рд╛ред
  • рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
  • рд╣реЗрд▓реНрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░рдг:

kubectl create serviceaccount tiller --namespace kube-system
kubectl create clusterrolebinding tiller-admin-binding 
   --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
./helm init --service-account=tiller
./helm update

  • рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ: https://www.consul.io/docs/platform/k8s/helm.html
  • рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ):

### poc-helm-consul-values.yaml
global:
 enabled: false
 image: "consul:latest"
# Expose the Consul UI through this LoadBalancer
ui:
 enabled: false
# Allow Consul to inject the Connect proxy into Kubernetes containers
connectInject:
 enabled: false
# Configure a Consul client on Kubernetes nodes. GRPC listener is required for Connect.
client:
 enabled: true
 join: ["<PRIVATE_IP_CONSUL_SERVER>"]
 extraConfig: |
{
  "acl" : {
 "enabled": true,   
 "default_policy": "deny",   
 "enable_token_persistence": true 
  }
}
# Minimal Consul configuration. Not suitable for production.
server:
 enabled: false
# Sync Kubernetes and Consul services
syncCatalog:
 enabled: false

  • рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

./helm install -f poc-helm-consul-values.yaml ./consul-helm - name skywiz-app-with-consul-client-poc

  • рдЬрдм рдпрд╣ рдЪрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддреЛ рдЪрд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
  • рдХреНрд▓рд╕реНрдЯрд░ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рд╕реНрдерд┐рдд "рдкреЙрдб рдПрдбреНрд░реЗрд╕ рд░реЗрдВрдЬ" рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ "рд╕реНрдХрд╛рдИрд╡рд┐рдЬрд╝-рдХрдВрд╕реБрд▓-рд╕рд░реНрд╡рд░-рдкреЛрдХ" рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдирд┐рдпрдо рдХреЛ рд╡рд╛рдкрд╕ рджреЗрдЦреЗрдВред
  • рдкреЙрдб рдХреЗ рд▓рд┐рдП рдкрддрд╛ рд╢реНрд░реЗрдгреА рдХреЛ рдЖрдИрдкреА рдкрддреЗ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкреЛрд░реНрдЯ 8301 рдФрд░ 8300 рдЦреЛрд▓реЗрдВред

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

  • рдХреЙрдиреНрд╕рд▓ рдпреВрдЖрдИ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рдмрд╛рдж рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕ рдЯреИрдм рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреМрдВрд╕рд▓ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдХреЗ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

  • рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рд╢реЗрд▓ рдкрд░ рд▓реМрдЯреЗрдВ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдЯреЛрдХрди рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ:

export CONSUL_HTTP_TOKEN=<SecretID>

  • рдСрде рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕-рдореЗрдЬрдмрд╛рди

kubectl get endpoints | grep kubernetes

  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕-рд╕реЗрд╡рд╛-рдЦрд╛рддрд╛-рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА

kubectl get sa <helm_deployment_name>-consul-client -o yaml | grep "- name:"
kubectl get secret <secret_name_from_prev_command> -o yaml | grep token:

  • рдЯреЛрдХрди рдмреЗрд╕64 рдПрдиреНрдХреЛрдбреЗрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ [рд▓рд┐рдВрдХ]
  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕-рд╕реАрдП-рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ

kubectl get secret <secret_name_from_prev_command> -o yaml | grep ca.crt:

  • "ca.crt" рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд▓реЗрдВ (рдмреЗрд╕64 рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж) рдФрд░ рдЗрд╕реЗ "ca.crt" рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
  • рдЕрдм рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░реЗрдВред

consul acl auth-method create 
-type "kubernetes" 
-name "auth-method-skywiz-consul-poc" 
-description "This is an auth method using kubernetes for the cluster skywiz-app-with-consul-client-poc" 
-kubernetes-host "<k8s_endpoint_retrieved earlier>" 
[email protected] 
-kubernetes-service-account-
jwt="<decoded_token_retrieved_earlier>"

  • рдЖрдЧреЗ рд╣рдореЗрдВ рдПрдХ рдирд┐рдпрдо рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдирдИ рднреВрдорд┐рдХрд╛ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреЙрдиреНрд╕рд▓ рдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
  • рдПрдХ рдирд┐рдпрдо рд▓рд┐рдЦреЗрдВ

### kv-custom-ns-policy.hcl
key_prefix "custom-ns/" {
 policy = "write"
}

  • рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░реЗрдВ

consul acl policy create 
-name kv-custom-ns-policy 
-description "This is an example policy for kv at custom-ns/" 
-rules @kv-custom-ns-policy.hcl

  • рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрднреА рдмрдирд╛рдП рдЧрдП рдирд┐рдпрдо рдХреА рдЖрдИрдбреА рдвреВрдВрдвреЗрдВред
  • рдирдП рдирд┐рдпрдо рдХреЗ рд╕рд╛рде рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдБ.

consul acl role create 
-name "custom-ns-role" 
-description "This is an example role for custom-ns namespace" 
-policy-id <policy_id>

  • рдЕрдм рд╣рдо рдЕрдкрдиреА рдирдИ рднреВрдорд┐рдХрд╛ рдХреЛ рдСрде рд╡рд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "рдЪрдпрдирдХрд░реНрддрд╛" рдзреНрд╡рдЬ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдз рдХреЛ рдпрд╣ рднреВрдорд┐рдХрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА рдпрд╛ рдирд╣реАрдВред рдЕрдиреНрдп рдЪрдпрдирдХрд░реНрддрд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://www.consul.io/docs/acl/auth-methods/kubernetes.html#trusted-identity-attributes

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='custom-ns-role' 
-selector='serviceaccount.namespace=="custom-ns"'

рдЕрдВрдд рдореЗрдВ рд╡рд┐рдиреНрдпрд╛рд╕

рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░

  • рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛рдПрдВ. рд╣рдореЗрдВ K8s рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЯреЛрдХрди рдХреА рдкрд╣рдЪрд╛рди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрдВрд╕рд▓ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  • рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ [рдЬреЛрдбрд╝рдирд╛]:

###skywiz-poc-consul-server_rbac.yaml
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: review-tokens
 namespace: default
subjects:
- kind: ServiceAccount
 name: skywiz-app-with-consul-client-poc-consul-client
 namespace: default
roleRef:
 kind: ClusterRole
 name: system:auth-delegator
 apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: service-account-getter
 namespace: default
rules:
- apiGroups: [""]
 resources: ["serviceaccounts"]
 verbs: ["get"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: get-service-accounts
 namespace: default
subjects:
- kind: ServiceAccount
 name: skywiz-app-with-consul-client-poc-consul-client
 namespace: default
roleRef:
 kind: ClusterRole
 name: service-account-getter
 apiGroup: rbac.authorization.k8s.io

  • рдЖрдЗрдпреЗ рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛рдПрдБ

kubectl create -f skywiz-poc-consul-server_rbac.yaml

рдХреМрдВрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ

  • рдЬреИрд╕рд╛ рджреЗрдЦрд╛ рдЧрдпрд╛ # рдЬреИрд╕рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдпрд╣рд╛рдВрдбреЗрдореЙрдирд╕реЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ:
  • рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдЧреВ рдХрд░реЗрдВ [рд▓рд┐рдВрдХ].

### poc-consul-client-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
 name: consul-ds-client
spec:
 selector:
   app: consul
   chart: consul-helm
   component: client
   hasDNS: "true"
   release: skywiz-app-with-consul-client-poc
 ports:
 - protocol: TCP
   port: 80
   targetPort: 8500

  • рдлрд┐рд░ рдХреЙрдиреНрдлрд┐рдЧрдореИрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ [рд▓рд┐рдВрдХ]. рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ рдмрджрд▓ рджреЗрдВред

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
 labels:
   addonmanager.kubernetes.io/mode: EnsureExists
 name: kube-dns
 namespace: kube-system
data:
 stubDomains: |
   {"consul": ["$(kubectl get svc consul-ds-client -o jsonpath='{.spec.clusterIP}')"]}
EOF

рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рдЖрдЗрдП рдЕрдм рдЬрд╛рджреВ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ рджреЗрдЦреЗрдВ!

  • рд╕рдорд╛рди рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдХреБрдВрдЬреА (рдЕрд░реНрдерд╛рдд) рдХреЗ рд╕рд╛рде рдХрдИ рдФрд░ рдХреБрдВрдЬреА рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВред /sample_key) рдФрд░ рдЖрдкрдХреА рдкрд╕рдВрдж рдХрд╛ рдПрдХ рдорд╛рдиред рдирдП рдкреНрд░рдореБрдЦ рдкрдереЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдиреАрддрд┐рдпрд╛рдВ рдФрд░ рднреВрдорд┐рдХрд╛рдПрдБ рдмрдирд╛рдПрдБред рд╣рдо рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрд╛рдж рдореЗрдВ рдХрд░реЗрдВрдЧреЗред

рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп

рдХрд╕реНрдЯрдо рдиреЗрдорд╕реНрдкреЗрд╕ рдкрд░реАрдХреНрд╖рдг:

  • рдЖрдЗрдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирд╛рдорд╕реНрдерд╛рди рдмрдирд╛рдПрдВ:

kubectl create namespace custom-ns

  • рдЖрдЗрдП рдЕрдкрдиреЗ рдирдП рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдПрдХ рдкреЙрдб рдмрдирд╛рдПрдВред рдкреЙрдб рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦреЗрдВ.

###poc-ubuntu-custom-ns.yaml
apiVersion: v1
kind: Pod
metadata:
 name: poc-ubuntu-custom-ns
 namespace: custom-ns
spec:
 containers:
 - name: poc-ubuntu-custom-ns
   image: ubuntu
   command: ["/bin/bash", "-ec", "sleep infinity"]
 restartPolicy: Never

  • рдЗрд╕рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдмрдирд╛рдПрдВ:

kubectl create -f poc-ubuntu-custom-ns.yaml

  • рдПрдХ рдмрд╛рд░ рдЬрдм рдХрдВрдЯреЗрдирд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ, рддреЛ рд╡рд╣рд╛рдВ рдЬрд╛рдПрдВ рдФрд░ рдХрд░реНрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

kubectl exec poc-ubuntu-custom-ns -n custom-ns -it /bin/bash
apt-get update && apt-get install curl -y

  • рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рдмрдирд╛рдИ рдЧрдИ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреМрдВрд╕рд▓ рдХреЛ рдПрдХ рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВрдЧреЗ [рд▓рд┐рдВрдХ].
  • рдЕрдкрдиреЗ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рд╕реЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЯреЛрдХрди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП:

cat /run/secrets/kubernetes.io/serviceaccount/token

  • рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:

### payload.json
{
 "AuthMethod": "auth-method-test",
 "BearerToken": "<jwt_token>"
}

  • рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ!

curl 
--request POST 
--data @payload.json 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • рдЙрдкрд░реЛрдХреНрдд рдЪрд░рдгреЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЪреВрдВрдХрд┐ рд╣рдо рдХрдИ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВрдЧреЗ), рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

echo "{ 
"AuthMethod": "auth-method-skywiz-consul-poc", 
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)" 
}" 
| curl 
--request POST 
--data @- 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рдЕрдм SecretID рд▓реЗрдВ рдФрд░ рдЙрд╕ рдХреБрдВрдЬреА/рдорд╛рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рд╕ рддрдХ рд╣рдорд╛рд░реА рдкрд╣реБрдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

curl 
consul-ds-client.default.svc.cluster.local/v1/kv/custom-ns/test_key --header тАЬX-Consul-Token: <SecretID_from_prev_response>тАЭ

  • рдЖрдк рдмреЗрд╕64 "рд╡реИрд▓реНрдпреВ" рдХреЛ рдбрд┐рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдпреВрдЖрдИ рдореЗрдВ рдХрд╕реНрдЯрдо-рдПрдирдПрд╕/рдЯреЗрд╕реНрдЯ_рдХреА рдореЗрдВ рдорд╛рди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдПрдиреНрдХреЛрдбреЗрдб рдорд╛рди IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi рд╣реЛрдЧрд╛ред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдкрд░реАрдХреНрд╖рдг:

  • рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд┐рд╕рдЕрдХрд╛рдЙрдВрдЯ рдмрдирд╛рдПрдВ [рд▓рд┐рдВрдХ].

kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
 name: custom-sa
EOF

  • рдкреЙрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рд╢реНрд░рдо рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реНрд▓ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ :)

###poc-ubuntu-custom-sa.yaml
apiVersion: v1
kind: Pod
metadata:
 name: poc-ubuntu-custom-sa
 namespace: default
spec:
 serviceAccountName: custom-sa
 containers:
 - name: poc-ubuntu-custom-sa
   image: ubuntu
   command: ["/bin/bash","-ec"]
   args: ["apt-get update && apt-get install curl -y; sleep infinity"]
 restartPolicy: Never

  • рдЗрд╕рдХреЗ рдмрд╛рдж рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╢реЗрд▓ рдЪрд▓рд╛ рджреЗрдВ.

kubectl exec -it poc-ubuntu-custom-sa /bin/bash

  • рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ!

echo "{ 
"AuthMethod": "auth-method-skywiz-consul-poc", 
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)" 
}" 
| curl 
--request POST 
--data @- 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред рдУрд╣, рд╣рдо рдЙрдЪрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирдП рдирд┐рдпрдо рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдП, рдЖрдЗрдП рдЕрдм рдРрд╕рд╛ рдХрд░реЗрдВред

рдЙрдкрд░реЛрдХреНрдд рдкрд┐рдЫрд▓реЗ рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдБ:
рдП) рдЙрдкрд╕рд░реНрдЧ "рдХрд╕реНрдЯрдо-рд╕рд╛/" рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдиреАрддрд┐ рдмрдирд╛рдПрдВред
рдмреА) рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ "рдХрд╕реНрдЯрдо-рд╕рд╛-рд░реЛрд▓" рдХрд╣реЗрдВ
рдЧ) рдиреАрддрд┐ рдХреЛ рднреВрдорд┐рдХрд╛ рд╕реЗ рдЬреЛрдбрд╝реЗрдВред

  • рдПрдХ рдирд┐рдпрдо-рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрдирд╛рдПрдБ (рдХреЗрд╡рд▓ cli/api рд╕реЗ рд╕рдВрднрд╡)ред рдЪрдпрдирдХрд░реНрддрд╛ рдзреНрд╡рдЬ рдХреЗ рднрд┐рдиреНрди рдЕрд░реНрде рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='custom-sa-role' 
-selector='serviceaccount.name=="custom-sa"'

  • "poc-ubuntu-custom-sa" рдХрдВрдЯреЗрдирд░ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░реЗрдВред рд╕рдлрд▓рддрд╛!
  • рдХрд╕реНрдЯрдо-рдПрд╕рдП/рдХреБрдВрдЬреА рдкрде рддрдХ рд╣рдорд╛рд░реА рдкрд╣реБрдВрдЪ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

curl 
consul-ds-client.default.svc.cluster.local/v1/kv/custom-sa/test_key --header тАЬX-Consul-Token: <SecretID>тАЭ

  • рдЖрдк рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЯреЛрдХрди "рдХрд╕реНрдЯрдо-рдПрдирдПрд╕/" рдореЗрдВ рдХреЗрд╡реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред "рдХрд╕реНрдЯрдо-рдПрд╕рдП" рдХреЛ рдЙрдкрд╕рд░реНрдЧ "рдХрд╕реНрдЯрдо-рдПрдирдПрд╕" рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдмрд╕ рдЙрдкрд░реЛрдХреНрдд рдЖрджреЗрд╢ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
    рдЕрдиреБрдорддрд┐ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред

рдУрд╡рд░рд▓реЗ рдЙрджрд╛рд╣рд░рдг:

  • рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рднреА рдирд┐рдпрдо-рдмрд╛рдзреНрдпрдХрд╛рд░реА рдореИрдкрд┐рдВрдЧ рдХреЛ рдЗрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЯреЛрдХрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
  • рд╣рдорд╛рд░рд╛ рдХрдВрдЯреЗрдирд░ "poc-ubuntu-custom-sa" рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╣реИ - рддреЛ рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдирд┐рдпрдо-рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рджреЛрд╣рд░рд╛рдПрдБ:
    рдП) "рдбрд┐рдлрд╝реЙрд▓реНрдЯ/" рдХреБрдВрдЬреА рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдиреАрддрд┐ рдмрдирд╛рдПрдВред
    рдмреА) рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рдПрдирдПрд╕-рднреВрдорд┐рдХрд╛" рдирд╛рдо рджреЗрдВ
    рдЧ) рдиреАрддрд┐ рдХреЛ рднреВрдорд┐рдХрд╛ рд╕реЗ рдЬреЛрдбрд╝реЗрдВред
  • рдПрдХ рдирд┐рдпрдо-рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрдирд╛рдПрдБ (рдХреЗрд╡рд▓ cli/api рд╕реЗ рд╕рдВрднрд╡)

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='default-ns-role' 
-selector='serviceaccount.namespace=="default"'

  • рд╣рдорд╛рд░реЗ "poc-ubuntu-custom-sa" рдХрдВрдЯреЗрдирд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ/" kv рдкрде рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
  • рдЕрдиреБрдорддрд┐ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред
    рдЖрдк рдПрд╕реАрдПрд▓ > рдЯреЛрдХрди рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдпреВрдЖрдИ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдЯреЛрдХрди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ "рдХрд╕реНрдЯрдо-рд╕рд╛-рднреВрдорд┐рдХрд╛" рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рддрдм рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдерд╛ рдЬрдм рд╣рдордиреЗ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рддрдм рдХреЗрд╡рд▓ рдПрдХ рдирд┐рдпрдо-рдмрд╛рдзреНрдпрдХрд╛рд░реА рдерд╛ рдЬреЛ рдореЗрд▓ рдЦрд╛рддрд╛ рдерд╛ред рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдирдП рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк "рдХрд╕реНрдЯрдо-рдПрд╕рдП/" рдФрд░ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ/" рдХреЗрд╡реА рдкрде рджреЛрдиреЛрдВ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
    рд╕рдлрд▓рддрд╛!
    рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ "рдкреЛрдХ-рдЙрдмрдВрдЯреВ-рдХрд╕реНрдЯрдо-рд╕рд╛" "рдХрд╕реНрдЯрдо-рд╕рд╛" рдФрд░ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рдПрдирдПрд╕" рдирд┐рдпрдо рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЯреАрдЯреАрдПрд▓ рдЯреЛрдХрди рдПрдордЬреАрдПрдордЯреА?

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

рдЯреАрдЯреАрдПрд▓ рдХреЗ рд╕рд╛рде рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯреЛрдХрди рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ:

  • https://www.consul.io/docs/acl/acl-system.html#acl-tokens
    рд╕рдорд╛рдкреНрддрд┐ рд╕рдордп - рд╡рд╣ рд╕рдордп рдЬрдм рдпрд╣ рдЯреЛрдХрди рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред (рд╡реИрдХрд▓реНрдкрд┐рдХ; рдХреМрдВрд╕рд▓ 1.5.0 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛)
  • рдХреЗрд╡рд▓ рдореИрдиреНрдпреБрдЕрд▓ рдирд┐рд░реНрдорд╛рдг/рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ https://www.consul.io/api/acl/tokens.html#expirationtime

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рдЯреЛрдХрди рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ (рдкреНрд░рддрд┐ рдирд┐рдпрдо рдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐) рдФрд░ рдЯреАрдЯреАрдПрд▓ рдЬреЛрдбрд╝реЗрдВред

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

рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рднреА рдкрдврд╝реЗрдВ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ