рд╕рд╛рдЗрдмрд░рдиреЗрдЯрд┐рдХ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░рд╛ред рдХреНрд▓рд╛рдЙрдб рдореЗрдВ .NET рдХреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди

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



рдиреЛрдЯ: рд╣рдо рд╣реИрдХрд░ рдкрддреНрд░рд┐рдХрд╛ рд╕реЗ рд▓реЗрдЦреЛрдВ рдХреЗ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд▓реЗрдЦрдХ рдХреА рд╡рд░реНрддрдиреА рдФрд░ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рд╕рд╣реЗрдЬреЗ рдЧрдПред


AKS рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ


рд╣рдо рдПрдЬрд╝реНрдпреЛрд░ рдкреЛрд░реНрдЯрд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ , "рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдБ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗрд╡рд╛ рдирд╛рдордХ рдПрдХ рд╕реЗрд╡рд╛ рдЦреЛрдЬреЗрдВред


рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдирд╛рдо рдФрд░ рдЙрдкрд╕рд░реНрдЧ DNS рдЪреБрдиреЗрдВред рдирд╛рдо рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЙрдкрд╕рд░реНрдЧ рдЗрд╕рдХреЗ FQDN рдкрддреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред



рд╕рдмрд╕реЗ рд╕рд╕реНрддреА рдЖрднрд╛рд╕реА рдорд╢реАрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ $ 30 рдкреНрд░рддрд┐ рдорд╛рд╣ рдЦрд░реНрдЪ рдХрд░рддреА рд╣реИред


рджреВрд╕рд░рд╛ рдХрджрдо рд╕рд░реНрд╡рд┐рд╕ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдмрдирд╛рдирд╛ рд╣реИред рд╕реЗрд╡рд╛ рдкреНрд░рдзрд╛рди рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЦрд╛рддреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рд╕реАрдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдРрд╕реЗ рдХрд┐рд╕реА рднреА рдЦрд╛рддреЗ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрдмрдХрд┐ рдирд┐рдпрдорд┐рдд рдЦрд╛рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ)ред рдЖрдк рдРрдк рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмреАрдЪ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╕реЗрд╡рд╛ рдкреНрд░рдореБрдЦ рдЦрд╛рддреЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред



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



рдлрд┐рд▓рд╣рд╛рд▓, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рдЧрднрдЧ 20 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧрд╛рдЗрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
рдкреЛрд░реНрдЯрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ AKS рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдПрдВ
рд╕реАрдПрд▓рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдХреЗрдПрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдирд╛


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


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдЯреЗрдирд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ - рдбреЙрдХрд░ред docker.hub рдЖрдкрдХреЛ рдореБрдлреНрдд рдореЗрдВ рдПрдХ рдирд┐рдЬреА docker рдЫрд╡рд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреИрд╕реЗ рдХреЗ рд▓рд┐рдП рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкреИрд╕реЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдЬреА рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдХреЛ рдПрдЬрд╝реНрдпреЛрд░ рдХрдВрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдХреАрдорддреЗрдВ $ 5 рдкреНрд░рддрд┐ рдорд╛рд╣ (рдореВрд▓ SKU рдХреЗ рд▓рд┐рдП) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред


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



рддрдм рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛:


docker login myservice.azurecr.io 

рдкреЛрд░реНрдЯрд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо (myservice) рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдбрд╛рд▓реЗрдВ (PJSeyO9 = lCMRDI7dGkz68wjhFGRGxSY3)


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


 docker build -t myservice.azurecr.io/myservice . docker push myservice.azurecr.io/myservice 

рд░рд╛рдЬ, рд░рд╣рд╕реНрдп ... рд╣рдо рдЫрд╡рд┐ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред


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


 az aks get-credentials --resource-group KubernetesGroup --name verycoolcluster 

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


рдПрдХ рдЧреБрдкреНрдд рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдлрд╝реЙрд░реНрдо рдХреА рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреА рд╣реЛрдЧреА:


 kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email> 

рдпрджрд┐ рдЖрдкрдХреА рдЫрд╡рд┐ docker рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ, рддреЛ <your-рд░рдЬрд┐рд╕реНрдЯреНрд░реА-рд╕рд░реНрд╡рд░> рдХрд╛ рдорд╛рди https://index.docker.io/v1/ рд╣реЛрдЧрд╛


рдПрдЬрд╝реНрдпреЛрд░ рдХрдВрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд▓рд┐рдП, FQDN <рд░рдЬрд┐рд╕реНрдЯреНрд░реА-рдирд╛рдо> .azurecr.io рд╣реЛрдЧрд╛


рдпрд╣реА рд╣реИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрд┐рдпрд╛:


 kubectl create secret docker-registry regcred --docker-server="myservice.azurecr.io" --docker-username="myservice" --docker-password="PJSeyO9=lCMRDI7dGkz68wjhFGRGxSY3" --docker-email="asommer@yandex.ru" 

рдЕрдм рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рдЧреБрдкреНрдд рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 kubectl get secret regcred --output=yaml 

рдЬрд╛рдирдХрд╛рд░реА


рдпрджрд┐ рдЖрдк AKS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЧреБрдкреНрдд рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди AKS рд╕реЗрд╡рд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ - рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдЖрдк рдЗрд╕реЗ рдирд┐рдореНрди рдкреГрд╖реНрда рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:


Azure рдХрдВрдЯреЗрдирд░ рд╕реЗрд╡рд╛ рд╕реЗ Azure рдХрдВрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг


 #!/bin/bash AKS_RESOURCE_GROUP=KubernetesGroup AKS_CLUSTER_NAME=verycoolcluster ACR_RESOURCE_GROUP=MyACRGroup ACR_NAME=myservice # Get the id of the service principal configured for AKS CLIENT_ID=$(az aks show --resource-group $AKS_RESOURCE_GROUP --name $AKS_CLUSTER_NAME --query "servicePrincipalProfile.clientId" --output tsv) # Get the ACR registry resource id ACR_ID=$(az acr show --name $ACR_NAME --resource-group $ACR_RESOURCE_GROUP --query "id" --output tsv) # Create role assignment az role assignment create --assignee $CLIENT_ID --role Reader --scope $ACR_ID 

рдЖрдк рдХреЗрд╡рд▓ AKS * рдФрд░ ACR * рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ Azure CLI рдпрд╛ рдХреНрд▓рд╛рдЙрдб рд╢реЗрд▓ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕реНрдЯреЛрд░ рд╣реИред рдпрд╣реА рд╣реИ, рдЖрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рд╣рд░ рд╕реЗ рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧреАред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд░реЗрдбрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрд╡реЗрджрди рдореЗрдВ рдРрд╕реА рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ (рдХреНрдпрд╛ рдпрд╣ рд╕рдЪ рд╣реИ?), рддреЛ рдЖрдк рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ vi рдХрдорд╛рдВрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


 vi < > 

рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛ рдпрджрд┐ рд╡рд╣ рдЧрд╛рдпрдм рд╣реИ рдпрд╛ рдПрдХ рдореМрдЬреВрджрд╛ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ


рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП ESC рдФрд░ рдлрд┐рд░ ZZ рджрдмрд╛рдПрдВ


рдХреЗрд╡рд▓ ESC рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдХреНрд░рдо рдореЗрдВ: q!


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


рддреЛ, рдПрдЬрд╝реНрдпреЛрд░ рдХреНрд▓рд╛рдЙрдб рд╢реЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдПрдХ рдордирдорд╛рдирд╛ рдирд╛рдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, appsettings.json) рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред рдЖрдЗрдП рдорд╛рдирддреЗ рд╣реИрдВ:


 { "ConnectionString": "some secret string goes there" } 

рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж:


 kubectl create secret generic secret-appsettings --from-file=/home/youraccount/appsettings.json 

рдпрд╣ рдХрдорд╛рдВрдб рдЧреБрдкреНрдд-рдПрдкрд╕реЗрдЯрд┐рдВрдЧ рдирд╛рдордХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛рдПрдЧрд╛
рдЖрдк рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рд░рд╛рд╕реНрддреЗ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП / рдШрд░ / youraccount рдХреЗ рд╕рд╛рде pwd рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде


рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдмрдирд╛рдПрдБ


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


 apiVersion: apps/v1beta1 kind: Deployment metadata: name: mydeployment spec: replicas: 3 minReadySeconds: 10 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: metadata: labels: app: myapp spec: containers: - name: app image: myservice.azurecr.io/myservice:latest ports: - containerPort: 80 name: http protocol: TCP imagePullPolicy: Always env: - name: "ASPNETCORE_ENVIRONMENT" value: "Production" volumeMounts: - name: secrets mountPath: /app/secrets readOnly: true imagePullSecrets: - name: regcred volumes: - name: secrets secret: secretName: secret-appsettings 

рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╢реБрд░реБрдЖрдд рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрджреНрдпрддрди рд░рдгрдиреАрддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред рддрдм рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рдПрдХ рдирд╛рдо (myapp) рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдВрдЯреЗрдирд░ рдЫрд╡рд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреЛрд░реНрдЯ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред 80 http рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреЛрд░реНрдЯ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж ASP.NET рдХреЛрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдлрд┐рд░ рдирд┐рдЬреА рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдЧреБрдкреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд╢реНрд░реЗрдп рдореБрд╣рд┐рдо рд╢реБрд░реВ рдХреА рдЧрдИред


  strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 

рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдЕрдкрдЧреНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред maxSurge - рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдкрд░ (рдЗрдХрд╛рдЗрдпреЛрдВ рдпрд╛ рдкреНрд░рддрд┐рд╢рдд рдореЗрдВ) рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрдирд╛рдП рдЧрдПред рдЕрдзрд┐рдХрддрдордЙрдкрд▓рдмреНрдз - рдЕрджреНрдпрддрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЕрдиреБрдкрд▓рдмреНрдз рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЪреВрд▓реНрд╣реЗред
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдирд╛рддреА рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ:


 kubectl apply -f deploy.yaml 

рдЗрдирдЧреНрд░реЗрд╕ рд╕реЗ рдорд┐рд▓рд┐рдП


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


 helm init 

рдереЛрдбрд╝рд╛ рд░реБрдХреЛ рдФрд░ рдЕрдорд▓ рдХрд░реЛ:


 helm install stable/nginx-ingress --namespace kube-system --set rbac.create=false 

LetsEncrypt рдХреЗ рд╕рд╛рде SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдирд╛рдирд╛


рдЪреВрдВрдХрд┐ SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреБрдЫ рдбреЛрдореЗрди рдирд╛рдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдирд╛ DNS рд╕рдВрд╕рд╛рдзрди рдирд╛рдо рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред


рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ рдФрд░ рдмрд╛рд╣рд░реА IP рд▓реЗрдВ


 kubectl get service -l app=nginx-ingress --namespace kube-system 

рд╕рдмреНрд╕реНрдЯреАрдЯреНрдпреВрдЯ рдЖрдИрдкреА рдФрд░ рдирд╛рдо рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдерд╛


 #!/bin/bash # Public IP address of your ingress controller IP="168.63.19.2" # Name to associate with public IP address DNSNAME="myservice-ingress" # Get the resource-id of the public ip PUBLICIPID=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$IP')].[id]" --output tsv) # Update public ip address with DNS name az network public-ip update --ids $PUBLICIPID --dns-name $DNSNAME 

рд╣рдо рдмрд╕ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрдбреЛрдореЗрди рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА "рдореВрд▓" рдирд╛рдо рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ - myservice-ingress


рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░рдХреЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдмрдВрдзрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрд╣рд╛рдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


 helm install \ --name cert-manager \ --namespace kube-system \ stable/cert-manager \ --set ingressShim.defaultIssuerName=letsencrypt-prod \ --set ingressShim.defaultIssuerKind=ClusterIssuer \ --set rbac.create=false \ --set serviceAccount.create=false 

рдЬрд╛рдирдХрд╛рд░реА


рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрд░рдмреАрдПрд╕реА рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд▓рдЧ рд╣реЛрдЧреАред


 helm install stable/cert-manager --set ingressShim.defaultIssuerName=letsencrypt-staging --set ingressShim.defaultIssuerKind=ClusterIssuer 

рдпрджрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдлрд╝рд╛рдЗрд▓ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:


 kubectl create secret tls tls-secret --cert CERT.crt --key KEY-FOR-CERT.key 

рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд CA рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдирдЦрд░реЗ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдиреГрддреНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо LetsEncrypt рдирд╛рдордХ рдПрдХ рдореБрдлреНрдд рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ CA рдмрдирд╛рдПрдВрдЧреЗ ред LetsEncrypt рдПрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реИ рдЬреЛ рдореБрдлрд╝реНрдд рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдкрд░реЛрдкрдХрд╛рд░реА рд╕рдВрдЧрдарди, рдЬрд┐рд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред


рддреЛ, рдХреНрд▓рд╕реНрдЯрд░-рдЬрд╛рд░реАрдХрд░реНрддрд╛.рдЗрдорд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдпрд╣ рдЙрд╕ рд╕рдВрдЧрдарди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдерд╛ред


 apiVersion: certmanager.k8s.io/v1alpha1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: youeemail@yourdomain.ru privateKeySecretRef: name: letsencrypt-prod http01: {} 

рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдИ-рдореЗрд▓ рдХреЛ рдЕрдкрдиреЗ рдкрддреЗ рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 kubectl apply -f cluster-issuer.yaml 

рдлрд┐рд░ рд╣рдо рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рддреНрдпрдо рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдлрд╛рдЗрд▓, рдЬреЛ рдХрд┐ ClusterIssuer рдХреЗ рдирд╛рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдбреЛрдореЗрди рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ - myservice-ingress.westeurope.cloudapp.azure.com


 apiVersion: certmanager.k8s.io/v1alpha1 kind: Certificate metadata: name: tls-prod-secret spec: secretName: tls-prod-secret dnsNames: - myservice-ingress.westeurope.cloudapp.azure.com acme: config: - http01: ingressClass: nginx domains: - myservice-ingress.westeurope.cloudapp.azure.com issuerRef: name: letsencrypt-prod kind: ClusterIssuer 

рд╣рдо рдмрд╛рд╣рд░ рд▓реЗ:


 kubectl apply -f certificate.yaml 

рд╕реЗрд╡рд╛ рд╕реГрдЬрди рдФрд░ рдЙрдиреНрдирддрд┐


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЪрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реЗрд╡рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрд╡рд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╣реИред рдЗрд╕ рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рдЖрдИрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ рд╕рдВрднрд╡ рд╣реИред


NodePort рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗрд╡рд╛ рдмрдирд╛рддрд╛ рд╣реИред NodePort рддрдХ рдкрд╣реБрдВрдЪ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рд░реНрдЧ рд╕реЗ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ:

LoadBalancer рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ NodePort рдФрд░ ClusterIP рд╕реЗрд╡рд╛рдПрдБ рдмрдирд╛рддреЗ рд╣реБрдП, рдмрд╛рд╣рд░ рд╕реЗ рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рдмрд╛рд╣рд░реА рдирд╛рдо рд╕реЗрд╡рд╛ рдХреЛ рдмрд╛рд╣рд░реА рдирд╛рдо рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред


рдореВрд▓ рд╕реЗрд╡рд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:


 apiVersion: v1 kind: Service metadata: name: myservice spec: type: ClusterIP ports: - port: 80 name: http targetPort: http selector: app: myapp 

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


 kubectl apply -f service.yaml 

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


 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: myingress annotations: kubernetes.io/ingress.class: nginx certmanager.k8s.io/cluster-issuer: letsencrypt-prod nginx.ingress.kubernetes.io/rewrite-target: / spec: tls: - hosts: - myservice-ingress.westeurope.cloudapp.azure.com secretName: tls-prod-secret rules: - host: myservice-ingress.westeurope.cloudapp.azure.com http: paths: - path: / backend: serviceName: myservice servicePort: 80 

рдПрдХ рд╣реА рдХреБрдмреЗрдЯреЗрд▓ рд▓рд╛рдЧреВ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛ https: // myservice-ingress.westeurope.cloudapp.azure.com рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Https рдХреЗ рдЖрдЧреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рд▓реЙрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдорд╛рдиреНрдп рд╣реИ рдФрд░ CA рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред




рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣реИрдХрд░ рдкрддреНрд░рд┐рдХрд╛ рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдЗрд╕рдХреЗ рд▓реЗрдЦрдХ рдПрд▓реЗрдХреНрд╕реА рд╕реЛрдорд░ рд╣реИрдВ ред

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


All Articles