рдпрд╣ рдлреБрдЯрдкрд╛рде рдХрдВрдЯреЗрдирд░ рдпрд╣рд╛рдБ [рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░] рдХреИрд╕реЗ рдорд┐рд▓рд╛?

рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред : рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде, рдбреЙрд╡ рдЬреЛрдиреНрд╕ рдХреЗ рдПрдХ рдЗрдВрдЬреАрдирд┐рдпрд░ рд╕реНрдХреЙрдЯ рд░рд╛рд╣рдирд░ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд, рд╣рдо рдХрдИ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдореВрд▓ рдШрдЯрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рд░ рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рд╣реБрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдиреЛрдЯ рд╣реИ, рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ "рдмрд╣рд╛рдиреЗ рдкрд░" рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


(рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдорд┐рд▓реА рдЧреЙрд░реНрдбрди рдПред рдореИрдХреНрд╕рд╡реЗрд▓ рдХреА рдлреЛрдЯреЛред)

рдЬрдм рдореИрдВрдиреЗ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХрдВрдЯреЗрдирд░ рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдореЗрд╖ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдХрд┐ рдкреНрд░рдореБрдЦ рддрдВрддреНрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдПрдХ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХрдВрдЯреЗрдирд░ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдореНрдорд┐рд▓рдиред рджрд░рдЕрд╕рд▓, рдЗрд╕реНрддрд┐рдпреЛ рдпрд╛ рдХрдВрд╕реВрд▓ рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ Envoy рдХрдВрдЯреЗрдирд░ рдЕрдЪрд╛рдирдХ рдЗрд╕рдХреА рдлрд▓реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ (рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ Conduit рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╡рд░реНрд╖ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ - рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред) ред рдХреНрдпрд╛? рдХреИрд╕реЗ? рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рд╢реЛрдз рд╢реБрд░реВ рд╣реБрдЖ ...

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

рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЕрдкрдиреА рдЙрдореНрдореАрджреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдбреЙрдХрд░, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдЖрджрд┐ рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реИред рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдпрд╛, рдХрдо рд╕реЗ рдХрдо, рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдкрдврд╝ рдЪреБрдХреЗ рд╣реИрдВред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдбреЙрдХрд░ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ https://docs.docker.com/docker-for-windows/kubernetes/ (рдПрдХ рд╡рд┐рдВрдбреЛрдЬрд╝ рдореИрдиреБрдЕрд▓ рдЬреЛ рдореИрдХ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред (рдиреЛрдЯ perev .: рд▓рд┐рдирдХреНрд╕ рдФрд░ * рдирд┐рдХреНрд╕-рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдорд┐рдирд┐рдХреНрдпреВрдм рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред)

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рддрд╕реНрд╡реАрд░


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреБрдмреЗрд░рдиреЗрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:


рдХреНрдпреВрдм рдЖрд░реНрдХ рдХреЛ CC рдмрд╛рдп 4.0 рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рджрд┐рдпрд╛ рдЧрдпрд╛

рдЬрдм рдЖрдк рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрдпреВрдм-рдЕрдкреАрдЬрд╝рд░ рдкрд░ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рддрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдПрдХ YAML рдлрд╝рд╛рдЗрд▓ рдХреЛ kubectl рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, API рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рд╡реЙрд░реНрдб рдореЗрдВ рд░рдЦрдиреЗ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ:



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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЗ рд╣реБрдХ рдмрдирд╛рдиреЗ рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрддрдиреА рд╕рд░рд▓ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рдХреМрдВрд╕рд▓ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рджрд┐рди рдмрд┐рддрд╛рдиреЗ рдкрдбрд╝реЗред рдФрд░ рдЬрдм рдпрд╣ рдХреБрдЫ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рдЖрдпрд╛, рддреЛ рдореИрдВрдиреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХрд░рддреЗ рд╣реБрдП рдХрдо рд╕реЗ рдХрдо рдЖрдзрд╛ рджрд┐рди рдмрд┐рддрд╛рдпрд╛ред

рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рднреА рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд░рд▓ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд╣реИред

рдХреЛрдб


рдирд╛рдо webhook рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ HTTP рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИ рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдПрдХ API рд╕рд░реНрд╡рд░ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ Kubernetes Deployments рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣рд╛рдВ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рд┐рд░реНрдл рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рдЕрдиреНрдп рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдХреЛрдб рдмреЗрд╕ рдХреЗ рдмреАрдЪ рдореЗрдВ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВ ... рдФрд░ рд╕рднреА рдЧреЛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдХрд┐рдлрд╛рдпрддреА рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ - Node.js:

const app = express(); app.use(bodyParser.json()); app.post('/mutate', (req, res) => { console.log(req.body) console.log(req.body.request.object) let adminResp = {response:{ allowed: true, patch: Buffer.from("[{ \"op\": \"add\", \"path\": \"/metadata/labels/foo\", \"value\": \"bar\" }]").toString('base64'), patchType: "JSONPatch", }} console.log(adminResp) res.send(adminResp) }) const server = https.createServer(options, app); 

( index.js )

рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ /mutate - рдордирдорд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рджрд┐рдП рдЧрдП YAML рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд JSON рдХреЛ рджреЗрдЦрдирд╛ рдФрд░ рд╕рдордЭрдирд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо JSON рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдо JSON рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдЪреАрдЬреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ:

  1. JSON рдкреИрдЪ рдЬрд╛рдиреЗрдВ рдФрд░ рд╕рдордЭреЗрдВред
  2. рдмреЗрд╕ 64 рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ JSON рдкреИрдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред

рдПрдХ рдмрд╛рд░ рдпрд╣ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╣реА рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рд╕реЗ рд╣реЛред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрд┐рд╕реА рднреА рдкреЙрдб рдореЗрдВ рд▓реЗрдмрд▓ foo=bar рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрддрд╛ рд╣реИред

рддреИрдирд╛рддреА


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

 FROM node:8 USER node WORKDIR /home/node COPY index.js . COPY package.json . RUN npm install #       TLS CMD node index.js 

( рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ )

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдиреЛрдб рд╕реЗ рд╕рдореБрджрд╛рдп рдХреА рдЫрд╡рд┐ рд▓реЗрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдХреЛрдб рдбреНрд░реЙрдк рдХрд░реЗрдВред рдЕрдм рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рднрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 docker build . -t localserver 

рдЕрдЧрд▓рд╛ рдХрджрдо рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рддреИрдирд╛рддреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ:

 apiVersion: apps/v1 kind: Deployment metadata: name: webhook-server spec: replicas: 1 selector: matchLabels: component: webhook-server template: metadata: labels: component: webhook-server spec: containers: - name: webhook-server imagePullPolicy: Never image: localserver 

( рддреИрдирд╛рддреАред рд╢реНрдпрд╛рдорд▓ )

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд┐рд╕ рдЫрд╡рд┐ рдХреЛ рд╣рдордиреЗ рдЕрднреА рдмрдирд╛рдпрд╛ рд╣реИ, рд╣рдо рдЙрд╕рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝реЗ? рдпрд╣ рдмрд╕ рдПрдХ рдлрд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдХреБрдЫ рдФрд░ рдЬрд┐рд╕реЗ рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

 apiVersion: v1 kind: Service metadata: name: webhook-service spec: ports: - port: 443 targetPort: 8443 selector: component: webhook-server 

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

 apiVersion: admissionregistration.k8s.io/v1beta1 kind: MutatingWebhookConfiguration metadata: name: webhook webhooks: - name: webhook-service.default.svc failurePolicy: Fail clientConfig: service: name: webhook-service namespace: default path: "/mutate" #    base64-  rootCA.crt #    `cat rootCA.crt | base64 | tr -d '\n'` #    .  caBundle: "==" rules: - operations: [ "CREATE" ] apiGroups: [""] apiVersions: ["v1"] resources: ["pods"] 
( рд╣реБрдХ.рдпрд╛рдорд▓ )

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

рд╡рд╣ рд╕рдм рд╣реИ! рдЗрддрдирд╛ рд╕рд░рд▓ ... рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЖрд░рдмреАрдПрд╕реА рдПрдХ рдРрд╕рд╛ рдкрд╣рд▓реВ рд╣реИ рдЬреЛ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд┐рдирд┐рдХреНрдпреВрдм рдпрд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ / рдореИрдХ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред Kubernetes API рд╕рд░реНрд╡рд░ HTTPS рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдкрдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рд░реВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╛рдзрд┐рдХрд╛рд░реА рдХреМрди рд╣реИред

рдЯреАрдПрд▓рдПрд╕


рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП (!!!), рдореИрдВрдиреЗ рд░реВрдЯ CA рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Dockerfile рдХреБрдЫ рдХреЛрдб рдЬреЛрдбрд╝рд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛:

 RUN openssl genrsa -out rootCA.key 4096 RUN openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt \ -subj "/C=US/ST=New Jersey/L=Princeton /O=Dow Jones/OU=PIB/CN=*.default.svc/emailAddress=scott.rahner@dowjones.com" RUN openssl genrsa -out webhook.key 4096 RUN openssl req -new -key webhook.key -out webhook.csr \ -subj "/C=US/ST=New Jersey/L=Princeton /O=Dow Jones/OU=PIB/CN=webhook-service.default.svc/emailAddress=scott.rahner@dowjones.com" RUN openssl x509 -req -in webhook.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out webhook.crt -days 1024 -sha256 RUN cat rootCA.crt | base64 | tr -d '\n' 

( рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ )

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдЕрдВрддрд┐рдо рдЪрд░рдг рдореВрд▓ CA рдХреЗ рд╕рд╛рде рдПрдХрд▓ рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ base64 рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣реБрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдЖрдЧреЗ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ caBundle рдлрд╝рд╛рдЗрд▓ рдХреЗ caBundle рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред Dockerfile рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд╕реАрдзреЗ Dockerfile рдлреЗрдВрдХ WORKDIR , рдЗрд╕рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

 const privateKey = fs.readFileSync('webhook.key').toString(); const certificate = fs.readFileSync('webhook.crt').toString(); //тАж const options = {key: privateKey, cert: certificate}; const server = https.createServer(options, app); 

рдЕрдм рдХреЛрдб HTTPS рд▓реЙрдиреНрдЪ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдпрд╣ рднреА рдмрддрд╛рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдХрд╣рд╛рдВ рдвреВрдВрдврдирд╛ рд╣реИ рдФрд░ рдХреМрди рд╕реЗ рдЯреНрд░рд╕реНрдЯ рдХреЛ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЗрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реА рд░рд╣рддрд╛ рд╣реИ:

 kubectl create -f deployment.yaml kubectl create -f service.yaml kubectl create -f hook.yaml 

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛


  • Deployment.yaml рдПрдХ рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдЬреЛ HTTPS рдкрд░ рд╣реБрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JSON рдкреИрдЪ рджреЗрддрд╛ рд╣реИред
  • Service.yaml рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - webhook-service.default.svc ред
  • Hook.yaml рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд╣рд╛рдВ рдЦреЛрдЬрдирд╛ рд╣реИ: https://webhook-service.default.svc/mutate ред

рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реЛ!


рд╕рдм рдХреБрдЫ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рддреИрдирд╛рдд рд╣реИ - рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХреЛрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдирдИ рдлрд▓реА / рддреИрдирд╛рддреА рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣реБрдХ рдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЗрдмрд▓ foo рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

 apiVersion: apps/v1 kind: Deployment metadata: name: test spec: replicas: 1 selector: matchLabels: component: test template: metadata: labels: component: test spec: containers: - name: test image: node:8 command: [ "/bin/sh", "-c", "--" ] args: [ "while true; do sleep 30; done;" ] 

( test.yaml )

 kubectl create -f test.yaml 

рдареАрдХ рд╣реИ, рд╣рдордиреЗ deployment.apps test created рджреЗрдЦрд╛ рд╣реИред deployment.apps test created ... рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛?

 kubectl describe pods test Name: test-6f79f9f8bd-r7tbd Namespace: default Node: docker-for-desktop/192.168.65.3 Start Time: Sat, 10 Nov 2018 16:08:47 -0500 Labels: component=test foo=bar 

рдЕрджреНрднреБрдд! рдпрджреНрдпрдкрд┐ test.yaml рдХреЛ рдПрдХ рдПрдХрд▓ рд▓реЗрдмрд▓ ( component ) рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд▓реА рдХреЛ рджреЛ: component рдФрд░ foo ред

рдШрд░ рдХрд╛ рдкрд╛рда


рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП! рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреБрдЯрдкрд╛рде рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИ рдХрд┐ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕реАрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП ... рдФрд░ рдЕрдм, рдЬреНрдЮрд╛рди рдФрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде: https://github.com/dowjones/k8s-webhook - рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдП рдЧрдП рдХреИрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдмрд╕ рд╕рд╣реА JSON рдкреИрдЪ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрдЯреЗрдирд░ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рд╣реИрдкреНрдкреА рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди!

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕.


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

Source: https://habr.com/ru/post/hi431252/


All Articles