рдпрд╣ рд╕рд╣реА рд╣реИ, рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рдж
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рдЪрд░рдг рджрд░ рдЪрд░рдг рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ
╨Ю╨▒╨╖╨╛╤А
рдЕрдЧрд░ рд╣рдо рдЬрд╛рддреЗ рд╣реИрдВ
рдЪрд┐рддреНрд░ 1: рдХреМрдВрд╕рд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЕрд╡рд▓реЛрдХрди
рдЖрдЗрдП рдЕрдВрджрд░ рджреЗрдЦреЗрдВ
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд╣рд╛рдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕ рдкрд░ рдХреЛрдИ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдирд╣реАрдВ рд╣реИред рддреЛ, рдХрд┐рд╕реА рднреА рд╕рдордЭрджрд╛рд░ рд╡реНрдпрдХреНрддрд┐ рдХреА рддрд░рд╣, рдЖрдк рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдЦрдВрдЧрд╛рд▓рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░... рдЖрдк рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ.
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдкрдирд╛ рдкреАрдУрд╕реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдЖрдЗрдП рдХреМрдВрд╕рд▓ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддрд░реАрдХреЛрдВ (рдЪрд┐рддреНрд░ 1) рдХреЗ рдЕрд╡рд▓реЛрдХрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░реЗрдВред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдорд╢реАрди рдкрд░ рдПрдХ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд╕реНрдерд╛рдкрд┐рдд рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░реЗрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдкреЙрдб рдореЗрдВ рдЕрдкрдирд╛ рдбрдореА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЕрдкрдиреЗ рдХреЙрдиреНрд╕рд▓ рдХреБрдВрдЬреА/рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд┐рддреНрд░ рдЙрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рддрд░реНрдХ рднреА, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрд░реЗрдЦ 2: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдЕрд╡рд▓реЛрдХрди
рдПрдХ рддреНрд╡рд░рд┐рдд рдиреЛрдЯ: рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдмрд╛рд╣рд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рд╡рд╣ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдФрд░ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рддреЛ, рдХреЙрдиреНрд╕рд▓ рдЕрд╡рд▓реЛрдХрди рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 1) рд▓реЗрдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 2) рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрд░реНрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдкреНрд░рддреНрдпреЗрдХ рдкреЙрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдФрд░ рдЬреНрдЮрд╛рдд рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдЯреЛрдХрди рд╣реЛрдЧрд╛ред рдпрд╣ рдЯреЛрдХрди рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреЙрдб рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдкреЙрдб рдХреЗ рдЕрдВрджрд░ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд╕реЗрд╡рд╛ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЙрдЧрд┐рди рдХрдорд╛рдВрдб рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЯреЛрдХрди рдФрд░ рдирд╛рдо рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ (рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рдХрд╛рд░)ред рдпрд╣ рдЪрд░рдг #2 рдХреЙрдиреНрд╕рд▓ рдЖрд░реЗрдЦ (рдпреЛрдЬрдирд╛ 1) рдХреЗ рдЪрд░рдг 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
- рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред
- рдЬрд╛рджреВ! рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреБрд░реЛрдз рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдПрдХ рдФрд░ рдЪрд┐рддреНрд░ рд╣реИред рдпрд╣ рдЪрд░рдг рдХреЙрдиреНрд╕рд▓ рдЕрд╡рд▓реЛрдХрди рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 3) рдХреЗ рдЪрд░рдг 4, 5 рдФрд░ 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
- рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рдорд╛рд░реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдирд┐рдпрдореЛрдВ (рдЬреЛ рд╣рдордиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрдиреНрд╕рд▓ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдЙрд╕ рдЯреЛрдХрди рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬ рджреЗрдЧрд╛ред рдпрд╣ рдХреЙрдиреНрд╕рд▓ рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 6) рдХреЗ рдЪрд░рдг 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
- рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд╕реЗрд╡рд╛ рдХреЛ рдЯреЛрдХрди рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд╕реЗрд╡рд╛ рдЕрдм рд╣рдорд╛рд░реЗ рдХреЙрдиреНрд╕рд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреЙрдиреНрд╕рд▓ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЯреЛрдХрди рдХреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЬрд╛рджреВ рдЙрдЬрд╛рдЧрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ!
рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЯреЛрдкреА рдореЗрдВ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдЦрд░рдЧреЛрд╢ рд╕реЗ рдЦреБрд╢ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ... рдЖрдЗрдП рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рддрдиреА рдЧрд╣рд░рд╛рдИ рддрдХ рдЦрд╝рд░рдЧреЛрд╢ рдХрд╛ рдмрд┐рд▓'.
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░рд╛ "рдЬрд╛рджреБрдИ" рдХрджрдо (рдЪрд┐рддреНрд░ 2: рдЪрд░рдг 4) рд╡рд╣ рд╣реИ рдЬрд╣рд╛рдВ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕реА рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд┐рдпрдореЛрдВ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЪрд░рдг рдХреЙрдиреНрд╕рд▓ рдЕрд╡рд▓реЛрдХрди рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 3) рдХреЗ рдЪрд░рдг 4, 5 рдФрд░ 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рдПрдХ рдЖрд░реЗрдЦ (рдЖрд░реЗрдЦ 3) рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ред
рдЪрд┐рддреНрд░ 3: рдЬрд╛рджреВ рдкреНрд░рдХрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ!
- рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЦрд╛рддрд╛ рдЯреЛрдХрди рдФрд░ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЪрд░рдг рдкрд┐рдЫрд▓реЗ рд╕рд░реНрдХрд┐рдЯ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореЗрдВ рдЪрд░рдг 3 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
- рдЕрдм рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ (рдпрд╛ рд▓реАрдбрд░) рдХреЛ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ (рдХрдВрд╕рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд░реЗрдЧрд╛ рдФрд░, рдЙрдЪрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдЯреЛрдХрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдпрд╣ рдХрд┐рд╕рдХрд╛ рд╣реИред
- рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдз рдлрд┐рд░ рдХреЙрдиреНрд╕рд▓ рд▓реАрдбрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЙрдиреНрд╕рд▓ рд╕рд░реНрд╡рд░ рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдз (рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рдХрд╛рд░) рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред
- рдХреМрдВрд╕рд▓ рдиреЗрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирд┐рдпрдореЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдкрд╣рдЪрд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдХрд░рддрд╛ рд╣реИред
- рдЯреАрдП-рджрд╣! рдЖрдЗрдП рдкрд┐рдЫрд▓реЗ рд╕рд░реНрдХрд┐рдЯ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореЗрдВ рдЪрд░рдг 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
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рдЯреЛрдХрди рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ (рдкреНрд░рддрд┐ рдирд┐рдпрдо рдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐) рдФрд░ рдЯреАрдЯреАрдПрд▓ рдЬреЛрдбрд╝реЗрдВред
рддрдм рддрдХ, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рддрд░реНрдХ рдореЗрдВ рд▓реЙрдЧрдЖрдЙрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
https://www.consul.io/api/acl/acl.html#logout-from-auth-method https://www.consul.io/docs/acl/acl-auth-methods.html#overall-login-process
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рднреА рдкрдврд╝реЗрдВ:
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд┐рдирд╛ ClickHouse рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде ClickHouse рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕реЗ рдХреНрдпрд╛ рд╣реБрдЖ? GitLab CI/CD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрд╛рдзрд┐рдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ рдбреЙрдХрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рд┐рдХреЛрдбрд╝рдиреЗ рдХреА рддреАрди рд╕рд░рд▓ рддрд░рдХреАрдмреЗрдВ K8S рдХреЗ рд▓рд┐рдП рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреНрд░реИрдлрд╝рд┐рдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рд╡рд┐рдз рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдмреИрдХрдЕрдк Redmine рдХреЗ рд▓рд┐рдП рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯред рдЕрдкрдиреЗ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?
рд╕реНрд░реЛрдд: www.habr.com