
рдпрд╣ рд╕рд╣реА рд╣реИ, рдХрдВрд╕рд▓ рдореЗрдВ рдордИ 2019 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ 1.5.0 рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рдж, рдЖрдк рджреЗрд╢реА рд░реВрдк рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдХрджрдо рд╕реЗ рдХрджрдо рдПрдХ POC (рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╕рдмреВрдд, PoC - рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг] рдмрдирд╛рдПрдВрдЧреЗ - рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рд╣реИрд╢рд┐рдХреЙрд░реНрдк рдХреЗ рдХрдВрд╕реВрд▓ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рдЖрдкрд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдпрд╛ рдСрди-рдкреНрд░рд┐рдорд╛рдЗрд╕реЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рд╣рдо Google рдХреЗ рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди
рдпрджрд┐ рд╣рдо рдЗрд╕рдХреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдкрд░ рдХреМрдВрд╕реБрд▓ рдкреНрд░рд▓реЗрдЦрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди рдорд┐рд▓реЗрдЧрд╛, рд╕рд╛рде рд╣реА рдХреБрдЫ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдФрд░ рддрд░реНрдХ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд▓реЛрдХрди рднреА рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрдм рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЪрдмрд╛рдКрдВрдЧрд╛ред

рдЪрд┐рддреНрд░ 1: рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡рд╛рдгрд┐рдЬреНрдп рджреВрддрд╛рд╡рд╛рд╕ рд╡рд┐рдзрд┐ рдЕрд╡рд▓реЛрдХрди
рдЖрдЗрдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдмреЗрд╢рдХ, рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рдХреЛрдИ рдЧрд╛рдЗрдб рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рд╕рдордЭрджрд╛рд░ рд╡реНрдпрдХреНрддрд┐ рдХреА рддрд░рд╣, рдЖрдк рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ ... рдкрд░рд╛рдЬрд┐рдд рд╣реЛред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред рдЪрд▓реЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдкрдирд╛ рдкреАрдУрд╕реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдЖрдЗрдП рд╡рд╛рдгрд┐рдЬреНрдп рджреВрддрд╛рд╡рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрд╡рд▓реЛрдХрди (рдЪрд┐рддреНрд░ 1) рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░реЗрдВред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдорд╢реАрди рдкрд░ рдПрдХ рдХреЙрдиреНрд╕реБрд▓ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рд╕реНрдерд╛рдкрд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдЪреВрд▓реНрд╣рд╛ рдореЗрдВ рдЕрдкрдирд╛ рдбрдореА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдХрдВрд╕реЙрд▓ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХрд╛ рддрд░реНрдХ рднреА рдмрддрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

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

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

- рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдХреЙрдиреНрд╕реБрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреЙрдиреНрд╕рд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ [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
- рдЖрдкрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ "... ACL рджреНрд╡рд╛рд░рд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛" рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдФрд░ рдкреЛрд░реНрдЯ 8500 рдкрд░ рдЗрд╕ рдЖрдИрдкреА рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпреВрдЖрдИ рдЦреБрд▓рддрд╛ рд╣реИред
- рдПрдХ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдХреЛрдИ рдЧрд▓рддреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ ACL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХрд╛ рдЦрдВрдбрди рдХрд┐рдпрд╛ рд╣реИред
- рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрдиреЗ рд╢реЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд░реНрдЬ рдХрд░реЗрдВ:
consul acl bootstrap
- рдорд╛рди "рдЧреБрдкреНрдд" рдвреВрдВрдвреЗрдВ рдФрд░ рд╡рд╛рдкрд╕ рдпреВрдЖрдИ рдкрд░ рдЬрд╛рдПрдВред ACL рдЯреИрдм рдкрд░, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдЯреЛрдХрди рдХреЗ рдЧреБрдкреНрдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рджрд░реНрдЬ рдХрд░реЗрдВред SecretID рдХреЛ рдХрд╣реАрдВ рдФрд░ рдХреЙрдкреА рдХрд░реЗрдВ, рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
- рдЕрдм рдПрдХ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ POC рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ: рдХреБрдВрдЬреА: "custom-ns / test_key", рдореВрд▓реНрдп: "рдореИрдВ рдХрд╕реНрдЯрдо-ns рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реВрдБ!"
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдбреЗрдореЛрдВрд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
- K8s рдХреНрд▓рд╕реНрдЯрд░ (Kubernetes) рдмрдирд╛рдПрдБред рд╣рдо рдЗрд╕реЗ рдЙрд╕реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд╣рд╛рдВ рддреЗрдЬреА рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрдВрддрд░рд┐рдХ рдЖрдИрдкреА рдкрддреЗ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рди рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдмрдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ Skywiz-app-with-consul-client-poc рдХрд╣реЗрдВрдЧреЗред

- рдПрдХ рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдХреМрдВрд╕рд▓ рдХрдиреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдкреАрдУрд╕реА рдХрдВрд╕рд▓ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрдпрд╛ рдерд╛ред
- рд╣рдо рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
- рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░рдг:
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
- рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддреЛ рдЪрд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
- рдХреНрд▓рд╕реНрдЯрд░ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рд╕реНрдерд┐рдд "рдкреЙрдб рдПрдбреНрд░реЗрд╕ рд░реЗрдВрдЬ" рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдФрд░ рд╕реНрдХрд╛рдИрд╡рд┐рдЬрд╝-рдХреЙрдиреНрд╕реБрд▓-рд╕рд░реНрд╡рд░-рдкреЛрдХ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдирд┐рдпрдо рдкрд░ рд▓реМрдЯреЗрдВред
- IPA рдХреЗ рд▓рд┐рдП рдкрддрд╛ рд╕реАрдорд╛ рдХреЛ IP рдкрддреЗ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ 8301 рдФрд░ 8300 рдЦреЛрд▓реЗрдВред

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

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреМрдВрд╕реБрд▓ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
- рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд╢реЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВ рдФрд░ рдЯреЛрдХрди рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдмрдЪрд╛рдпрд╛ рдерд╛:
export CONSUL_HTTP_TOKEN=<SecretID>
- рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдореВрд╣ рд╕реЗ рдПрдХ рд╕реВрдЪрдирд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- Kubernetes рдореЗрдЬрдмрд╛рди
kubectl get endpoints | grep kubernetes
- 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 рдореЗрдВ рдЗрдирдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ [ рд▓рд┐рдВрдХ ]
- Kubernetes-ca-рдкреНрд░рдорд╛рдгрдкрддреНрд░
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>" \ -kubernetes-ca-cert=@ca.crt \ -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
- рдлрд┐рд░ configmap [ рд▓рд┐рдВрдХ ] рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
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
рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐
рдЕрдм рдЖрдЗрдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЬрд╛рджреВ рдХреЛ рджреЗрдЦреЗрдВ!
- рд╕рдорд╛рди рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдХреБрдВрдЬреА (рдпрд╛рдиреА <new_folder> / 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
- рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдХрдо рд╕реЗ рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рд╕реАрдХреНрд░реЗрдЯ рдХреЛ рд▓реЗрдВ рдФрд░ рдЙрд╕ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣реБрдБрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
curl \ consul-ds-client.default.svc.cluster.local/v1/kv/custom-ns/test_key --header тАЬX-Consul-Token: <SecretID_from_prev_response>тАЭ
- рдЖрдк "рдорд╛рди" рдмреЗрд╕ 64 рдХреЛ рдбреАрдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ UI рдореЗрдВ рдХрд╕реНрдЯрдо-ns / test_key рдореЗрдВ рдореВрд▓реНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рдорд╛рди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдПрдиреНрдХреЛрдбреЗрдб рдорд╛рди IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi рд╣реЛрдЧрд╛ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдкрд░реАрдХреНрд╖рдг:
- рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб [ рд▓рд┐рдВрдХ ] рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо ServiceAccount рдмрдирд╛рдПрдБред
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
- рдЕрдиреБрдорддрд┐ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдУрд╣, рд╣рдо рдЙрдЪрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдзреНрдпрдХрд╛рд░реА рдПрдХ рдирдпрд╛ рдирд┐рдпрдо рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдП рд╣реИрдВ, рдЕрдм рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдкрд┐рдЫрд▓реЗ рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ:
рдХ) рдЙрдкрд╕рд░реНрдЧ "рдХрд╕реНрдЯрдо-рд╕рд╛ /" рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдиреАрддрд┐ рдмрдирд╛рдПрдВред
рдмреА) рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдБ, рдЗрд╕реЗ "рдХрд╕реНрдЯрдо-рд╕рд╛-рднреВрдорд┐рдХрд╛" рдирд╛рдо рджреЗрдВ
c) рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкреЙрд▓рд┐рд╕реА рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред
- рдПрдХ рдирд┐рдпрдо-рдмрдВрдзрди (рдХреЗрд╡рд▓ 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 рдХрдВрдЯреЗрдирд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рд╣реИ - рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рджреВрд╕рд░реЗ рдирд┐рдпрдо-рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
- рдкрд┐рдЫрд▓реЗ рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ:
рдХ) рдкреНрд░рдореБрдЦ рдЙрдкрд╕рд░реНрдЧ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ /" рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдиреАрддрд┐ рдмрдирд╛рдПрдВред
рдмреА) рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдБ, рдЗрд╕реЗ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рдПрдирдПрд╕-рднреВрдорд┐рдХрд╛" рдирд╛рдо рджреЗрдВ
c) рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкреЙрд▓рд┐рд╕реА рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред - рдирд┐рдпрдо-рдмрдВрдзрди рдмрдирд╛рдПрдБ (рдХреЗрд╡рд▓ 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 рдкрде рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
- рдЕрдиреБрдорддрд┐ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред
рдЖрдк ACL> рдЯреЛрдХрди рдХреЗ рддрд╣рдд UI рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдЯреЛрдХрди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ "рдХрд╕реНрдЯрдо-рд╕рд╛-рднреВрдорд┐рдХрд╛" рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рддрдм рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рд╣рдо рд▓реЙрдЧрд┐рди рд╣реБрдП рдереЗ, рдФрд░ рддрдм рдХреЗрд╡рд▓ рдПрдХ рдирд┐рдпрдо-рдмрдВрдзрди рдерд╛, рдЬреЛ рддрдм рдореЗрд▓ рдЦрд╛рддреА рдереАред рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдирдП рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк "рдХрд╕реНрдЯрдо-рд╕рд╛ /" рдФрд░ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ /" рдХреЗрд╡реА рдкрде рджреЛрдиреЛрдВ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдлрд▓рддрд╛!
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ poc-ubuntu-custom-sa рдХрд╕реНрдЯрдо-sa рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ-ns рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
TTL рдЯреЛрдХрди рдПрдордЬреАрдПрдордЯреА?
рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЗрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдЯреАрдЯреАрдПрд▓ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдПрдХреАрдХреГрдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЙрдиреНрд╕реБрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрд╡рдЪрд╛рд▓рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ред
TTL рдХреЗ рд╕рд╛рде рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯреЛрдХрди рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ (рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП) рдФрд░ TTL рдЬреЛрдбрд╝реЗрдВред
рддрдм рддрдХ, рдпрд╣ рдЖрдкрдХреЗ рддрд░реНрдХ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рднреА рдкрдврд╝реЗрдВ: