рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

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

рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ?

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдордиреЛрд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХреНрд╖рдг рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ "рд╕рдм рдХреБрдЫ рд╣рд░рд╛ рд╣реИ", рдФрд░ рдЗрд╕ рддрд░рд╣ рдЦреБрдж рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░реЗрдВ рдХрд┐ "рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ" (рдЬреЛ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИ... рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ)ред

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

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

рдПрдХреАрдХрд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

рдбреИрд╢рдмреЛрд░реНрдб рд╕реНрдерд╛рдкрдирд╛

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

рдЪреВрдБрдХрд┐ рд╣рдо рдЗрд╕ рдПрдХреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рд╕рдВрд╕реНрдерд╛рдкрдиреЛрдВ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд┐рд╢реЗрд╖ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА. рд╡реЗ рдереЛрдбрд╝реЗ рд╕рдВрд╢реЛрдзрд┐рдд YAML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреИрд╢рдмреЛрд░реНрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рд╕рд╛рде рд╣реА рддреНрд╡рд░рд┐рдд рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдбреИрд╢рдмреЛрд░реНрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ GitLab рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреА рд╣реИ:

$ ./ctl.sh  
Usage: ctl.sh [OPTION]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Install kubernetes-dashboard to Kubernetes cluster.
Mandatory arguments:
 -i, --install                install into 'kube-system' namespace
 -u, --upgrade                upgrade existing installation, will reuse password and host names
 -d, --delete                 remove everything, including the namespace
     --gitlab-url             set gitlab url with schema (https://gitlab.example.com)
     --oauth2-id              set OAUTH2_PROXY_CLIENT_ID from gitlab
     --oauth2-secret          set OAUTH2_PROXY_CLIENT_SECRET from gitlab
     --dashboard-url          set dashboard url without schema (dashboard.example.com)
Optional arguments:
 -h, --help                   output this message

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ GitLab: рдПрдбрдорд┐рди рдПрд░рд┐рдпрд╛ тЖТ рдПрдкреНрд▓рд┐рдХреЗрд╢рди - рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреИрдирд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдЗрдП рдЗрд╕реЗ "рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб" рдХрд╣реЗрдВ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, GitLab рд╣реИрд╢ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

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

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769eтАж --oauth2-secret 6b79168fтАж --dashboard-url dashboard.example.com

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рд╣реБрдЖ:

$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp   1/1       Running   0          14s
oauth2-proxy-5586ccf95c-czp2v           1/1       Running   0          14s

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

рдПрдХ рдкреИрдЪ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА OAuth рдЫрд╡рд┐ рдмрдирд╛рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Oauth рдХреЛ рдкреИрдЪ рдХрд░реЗрдВ рдФрд░ рдкреБрдирдГ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Dockerfile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

FROM golang:1.9-alpine3.7
WORKDIR /go/src/github.com/bitly/oauth2_proxy

RUN apk --update add make git build-base curl bash ca-certificates wget 
&& update-ca-certificates 
&& curl -sSO https://raw.githubusercontent.com/pote/gpm/v1.4.0/bin/gpm 
&& chmod +x gpm 
&& mv gpm /usr/local/bin
RUN git clone https://github.com/bitly/oauth2_proxy.git . 
&& git checkout bfda078caa55958cc37dcba39e57fc37f6a3c842  
ADD rd.patch .
RUN patch -p1 < rd.patch 
&& ./dist.sh

FROM alpine:3.7
RUN apk --update add curl bash  ca-certificates && update-ca-certificates
COPY --from=0 /go/src/github.com/bitly/oauth2_proxy/dist/ /bin/

EXPOSE 8080 4180
ENTRYPOINT [ "/bin/oauth2_proxy" ]
CMD [ "--upstream=http://0.0.0.0:8080/", "--http-address=0.0.0.0:4180" ]

рдФрд░ рдпрд╣рд╛рдБ rd.patch рдкреИрдЪ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

diff --git a/dist.sh b/dist.sh
index a00318b..92990d4 100755
--- a/dist.sh
+++ b/dist.sh
@@ -14,25 +14,13 @@ goversion=$(go version | awk '{print $3}')
sha256sum=()
 
echo "... running tests"
-./test.sh
+#./test.sh
 
-for os in windows linux darwin; do
-    echo "... building v$version for $os/$arch"
-    EXT=
-    if [ $os = windows ]; then
-        EXT=".exe"
-    fi
-    BUILD=$(mktemp -d ${TMPDIR:-/tmp}/oauth2_proxy.XXXXXX)
-    TARGET="oauth2_proxy-$version.$os-$arch.$goversion"
-    FILENAME="oauth2_proxy-$version.$os-$arch$EXT"
-    GOOS=$os GOARCH=$arch CGO_ENABLED=0 
-        go build -ldflags="-s -w" -o $BUILD/$TARGET/$FILENAME || exit 1
-    pushd $BUILD/$TARGET
-    sha256sum+=("$(shasum -a 256 $FILENAME || exit 1)")
-    cd .. && tar czvf $TARGET.tar.gz $TARGET
-    mv $TARGET.tar.gz $DIR/dist
-    popd
-done
+os='linux'
+echo "... building v$version for $os/$arch"
+TARGET="oauth2_proxy-$version.$os-$arch.$goversion"
+GOOS=$os GOARCH=$arch CGO_ENABLED=0 
+    go build -ldflags="-s -w" -o ./dist/oauth2_proxy || exit 1
  
checksum_file="sha256sum.txt"
cd $DIR/dists
diff --git a/oauthproxy.go b/oauthproxy.go
index 21e5dfc..df9101a 100644
--- a/oauthproxy.go
+++ b/oauthproxy.go
@@ -381,7 +381,9 @@ func (p *OAuthProxy) SignInPage(rw http.ResponseWriter, req *http.Request, code
       if redirect_url == p.SignInPath {
               redirect_url = "/"
       }
-
+       if req.FormValue("rd") != "" {
+               redirect_url = req.FormValue("rd")
+       }
       t := struct {
               ProviderName  string
               SignInMessage string

рдЕрдм рдЖрдк рдЫрд╡рд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рд╣рдорд╛рд░реЗ GitLab рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓реЗ рдореЗрдВ manifests/kube-dashboard-oauth2-proxy.yaml рд╡рд╛рдВрдЫрд┐рдд рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ (рдЗрд╕реЗ рдЕрдкрдиреА рдЫрд╡рд┐ рд╕реЗ рдмрджрд▓реЗрдВ):

 image: docker.io/colemickens/oauth2_proxy:latest

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

      imagePullSecrets:
     - name: gitlab-registry

...рдФрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд▓рд┐рдП рд░рд╣рд╕реНрдп рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝реЗрдВ:

---
apiVersion: v1
data:
 .dockercfg: eyJyZWdpc3RyeS5jb21wYW55LmNvbSI6IHsKICJ1c2VybmFtZSI6ICJvYXV0aDIiLAogInBhc3N3b3JkIjogIlBBU1NXT1JEIiwKICJhdXRoIjogIkFVVEhfVE9LRU4iLAogImVtYWlsIjogIm1haWxAY29tcGFueS5jb20iCn0KfQoK
=
kind: Secret
metadata:
 annotations:
 name: gitlab-registry
 namespace: kube-system
type: kubernetes.io/dockercfg

рдЪреМрдХрд╕ рдкрд╛рдардХ рджреЗрдЦреЗрдЧрд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд▓рдВрдмреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдмреЗрд╕ 64 рд╣реИ:

{"registry.company.com": {
 "username": "oauth2",
 "password": "PASSWORD",
 "auth": "AUTH_TOKEN",
 "email": "[email protected]"
}
}

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

рд╕рдм рдХреБрдЫ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди (рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ) рдбреИрд╢рдмреЛрд░реНрдб рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

$ ./ctl.sh -d

... рдФрд░ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769eтАж --oauth2-secret 6b79168fтАж --dashboard-url dashboard.example.com

рдЕрдм рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдПрдХ рдкреБрд░рд╛рддрди рд▓реЙрдЧрд┐рди рдмрдЯрди рдвреВрдВрдврдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, GitLab рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрда рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реБрдП рд╕реНрд╡рд╛рдЧрдд рдХрд░реЗрдЧрд╛ (рдмреЗрд╢рдХ, рдЕрдЧрд░ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╡рд╣рд╛рдВ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ):

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рд╣рдо GitLab рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ - рдФрд░ рд╕рдм рдХреБрдЫ рд╣реЛ рдЧрдпрд╛:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдбреИрд╢рдмреЛрд░реНрдб рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рд╕рдм рдХреБрдЫ рд╣рд░рд╛ рд╣реИ":

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдкреЙрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдбреЗрдЯрд╛ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреИрд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░, рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐, рд▓реЙрдиреНрдЪ рддрд░реНрдХ рдФрд░ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреА рджреГрд╢реНрдпрдорд╛рди рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реИрдВ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

...рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╡рд░рдг:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

...рдФрд░ рддреИрдирд╛рддреА рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд▓реЙрдЧ рджреЗрдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

... рдФрд░ рдЪрдпрдирд┐рдд рдкреЙрдб рдХреЗ рдХрдВрдЯреЗрдирд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдиреЛрдбреНрд╕ рдкрд░ рд╕реАрдорд╛рдПрдВ/рдЕрдиреБрд░реЛрдз рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

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

рдПрдХреАрдХрд░рдг рдФрд░ рдбреИрд╢рдмреЛрд░реНрдб рдХреЗ рдиреБрдХрд╕рд╛рди

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

рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдХрдорд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ:

  • init рдХрдВрдЯреЗрдирд░ рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЬрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ;
  • рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕реЗ ClusterRole рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдбреИрд╢рдмреЛрд░реНрдб рдХреА рдЕрдиреБрдХреВрд▓рддрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рднрд╡рд┐рд╖реНрдп рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдарддреЗ рд╣реИрдВред

рдЖрдЦрд┐рд░реА рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рдбреИрд╢рдмреЛрд░реНрдб рд╕реНрдерд┐рддрд┐ рдФрд░ рд╡рд┐рдХрд▓реНрдк

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рдбреИрд╢рдмреЛрд░реНрдб рд╕рдВрдЧрддрддрд╛ рддрд╛рд▓рд┐рдХрд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ (v1.10.1), рдмрд╣реБрдд рдЦреБрд╢ рдирд╣реАрдВ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг

рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, (рдЬрдирд╡рд░реА рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ) рдкреАрдЖрд░ # 3476, рдЬреЛ K8s 1.13 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореБрджреНрджреЛрдВ рдХреЗ рдмреАрдЪ рдЖрдк K8s 1.14 рдореЗрдВ рдкреИрдирд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдХрд░рддрд╛ рд╣реИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рди рд░реБрдХреЗрдВред рддреЛ (рдХрдо рд╕реЗ рдХрдо!) рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдЙрддрдиреА рдмреБрд░реА рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдиреА рдкрд╣рд▓реА рдмрд╛рд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдВрдЧрддрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд▓рдЧ рд╕рдХрддреА рд╣реИред

рдЕрдВрддрддрдГ, рдбреИрд╢рдмреЛрд░реНрдб рдХреЗ рд╡рд┐рдХрд▓реНрдк рдореМрдЬреВрдж рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ:

  1. K8рдбреИрд╢ - рдПрдХ рдпреБрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдкрд╣рд▓рд╛ рдХрдорд┐рдЯ рдЗрд╕ рд╕рд╛рд▓ рдорд╛рд░реНрдЪ рдореЗрдВ рд╣реБрдЖ рдерд╛), рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рдЙрд╕рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХрд╛ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
  2. рдУрдкрдирд╢рд┐рдлреНрдЯ рдХрдВрд╕реЛрд▓ - Red Hat OpenShift рдХрд╛ рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреНрдп рд╡рд┐рдХрд╛рд╕реЛрдВ рдХреЛ рдЖрдкрдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд▓рд╛рдПрдЧрд╛, рдЬреЛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред
  3. рдХреБрдмреЗрд░рдиреЗрдЯрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдЬреЛ рд╕рднреА рдХреНрд▓рд╕реНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ (рдбреИрд╢рдмреЛрд░реНрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд░реБрдХ рдЧрдпрд╛ рд╣реИред
  4. рдкреЛрд▓рд░рд┐рд╕ - рдЕрднреА рджреВрд╕рд░реЗ рджрд┐рди рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬреЛ рдПрдХ рдкреИрдирд▓ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ (рдХреНрд▓рд╕реНрдЯрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ) рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд "рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрди" (рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рддреИрдирд╛рддреА рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ)ред

рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп

рдбреИрд╢рдмреЛрд░реНрдб рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рд╣реИред GitLab рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдПрдХреАрдХрд░рдг рднреА рд╣рдорд╛рд░реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдкреИрдирд▓ рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓реЗрдХрд░ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реИрдВред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕рдореБрджрд╛рдп рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдЖрддреЗ рд╣реИрдВ (рдФрд░ рд╣рдо рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдХреЗ рдЦреБрд╢ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдо рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдмрдиреЗ рд╣реБрдП рд╣реИрдВред

рдкреБрдирд╢реНрдЪ

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

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

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