ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

Kubernetes Dashboard ืื™ื– ืึทืŸ ื’ืจื™ื ื’-ืฆื•-ื ื•ืฆืŸ ื’ืขืฆื™ื™ึทื’ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ื™ืŸ ืคืœื™ืกื ื“ื™ืง ืงื ื•ื™ืœ ืื•ืŸ ืคื™ืจืŸ ืขืก ืžื™ื˜ ืžื™ื ื™ืžืึทืœ ืžื™. ืื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืฆื• ืึธืคึผืฉืึทืฆืŸ ืขืก ืืคื™ืœื• ืžืขืจ ื•ื•ืขืŸ ืึทืงืกืขืก ืฆื• ื“ื™ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืื™ื– ื“ืืจืฃ ื ื™ื˜ ื‘ืœื•ื™ื– ื“ื•ืจืš ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจืก / ื“ืขื•ื•ืึธืคึผืก ืขื ื“ื–ืฉืึทื ื™ืจื–, ืึธื‘ืขืจ ืื•ื™ืš ื“ื•ืจืš ื™ืขื ืข ื•ื•ืึธืก ื–ืขื ืขืŸ ื•ื•ื™ื™ื ื™ืงืขืจ ืฆื•ื’ืขื•ื•ื•ื™ื ื˜ ืฆื• ื“ื™ ืงืึทื ืกืึธื•ืœ ืื•ืŸ / ืึธื“ืขืจ ื˜ืึธืŸ ื ื™ื˜ ื‘ื“ืขื” ืฆื• ื”ืึทื ื“ืœืขืŸ ืžื™ื˜ ืึทืœืข ื“ื™ ื™ื ื˜ืจืึทืงืึทืกื™ื– ืคื•ืŸ ื™ื ื˜ืขืจืึทืงื˜ื™ื ื’ ืžื™ื˜ kubectl ืื•ืŸ ืื ื“ืขืจืข ื™ื•ื˜ื™ืœืึทื˜ื™ื–. ื“ืึธืก ืื™ื– ื’ืขืฉืขืŸ ืžื™ื˜ ืื•ื ื“ื–: ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื’ืขื•ื•ืืœื˜ ืฉื ืขืœ ืึทืงืกืขืก ืฆื• ื“ื™ Kubernetes ื•ื•ืขื‘ ืฆื•ื‘ื™ื ื“, ืื•ืŸ ื–ื™ื ื˜ ืžื™ืจ ื ื•ืฆืŸ GitLab, ื“ื™ ืœื™ื™ื–ื•ื ื’ ื’ืขืงื•ืžืขืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš.

ืคืืจื•ื•ืืก ืื™ื– ื“ืึธืก?

ื“ื™ืจืขืงื˜ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืงืขืŸ ื–ื™ื™ืŸ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ืึท ื’ืขืฆื™ื™ึทื’ ื•ื•ื™ K8s ื“ืึทืฉื‘ืึธืจื“ ืคึฟืึทืจ ื“ื™ื‘ืึทื’ื™ื ื’ ื˜ืึทืกืงืก. ืžืืœ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื–ืขืŸ ืœืึธื’ืก ืื•ืŸ ืจืขืกื•ืจืกืŸ, ืื•ืŸ ืžืืœ ื˜ื™ื™ื˜ืŸ ืคึผืึธื“ืก, ื•ื•ืึธื’ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ / ืกื˜ื™ื™ื˜ืคื•ืœืกืขืฅ, ืื•ืŸ ืืคื™ืœื• ื’ื™ื™ืŸ ืฆื• ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ืงืึทื ืกืึธื•ืœ (ืขืก ื–ืขื ืขืŸ ืื•ื™ืš ืจื™ืงื•ื•ืขืก ืคึฟืึทืจ ื•ื•ืึธืก, ืึธื‘ืขืจ, ืขืก ืื™ื– ืืŸ ืื ื“ืขืจ ื•ื•ืขื’ - ืœืžืฉืœ, ื“ื•ืจืš kubectl-debug).

ืื™ืŸ ื“ืขืจืฆื•, ืขืก ืื™ื– ืึท ืคืกื™ื›ืืœืื’ื™ืฉืŸ ืžืึธืžืขื ื˜ ืคึฟืึทืจ ืžืึทื ืึทื“ื–ืฉืขืจื– ื•ื•ืขืŸ ื–ื™ื™ ื•ื•ื™ืœืŸ ืฆื• ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืงื ื•ื™ืœ - ืฆื• ื–ืขืŸ ืึทื– "ืึทืœืฅ ืื™ื– ื’ืจื™ืŸ", ืื•ืŸ ืึทื–ื•ื™ ืคืึทืจื–ื™ื›ืขืจืŸ ื–ื™ืš ืึทื– "ืึทืœืฅ ืึทืจื‘ืขื˜" (ื•ื•ืึธืก, ืคื•ืŸ ืงื•ืจืก, ืื™ื– ื–ื™ื™ืขืจ ืจืขืœืึทื˜ื™ื•ื• ... ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ื•ื•ื™ื™ึทื˜ืขืจ ืคื•ืŸ ื“ื™ ืคืึทืจื ืขื ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ).

ื•ื•ื™ ืึท ื ืึธืจืžืึทืœ ืกื™ ืกื™ืกื˜ืขื ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขื•ื•ืขื ื“ื˜ GitLab: ืึทืœืข ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื ื•ืฆืŸ ืขืก ืื•ื™ืš. ื“ืขืจื™ื‘ืขืจ, ืฆื• ืฆื•ืฉื˜ืขืœืŸ ื–ื™ื™ ืึทืงืกืขืก, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืœืึทื“ื–ืฉื™ืงืึทืœ ืฆื• ื•ื™ืกืฉื˜ื™ืžืขืŸ ื“ืึทืฉื‘ืึธืจื“ ืžื™ื˜ GitLab ืึทืงืึทื•ื ืฅ.

ืื™ืš ื•ื•ืขืœ ืื•ื™ืš ื˜ืึธืŸ ืึทื– ืžื™ืจ ื ื•ืฆืŸ NGINX Ingress. ืื•ื™ื‘ ืื™ืจ ืึทืจื‘ืขื˜ ืžื™ื˜ ืื ื“ืขืจืข ื™ื ื’ืจืขืกืก ืกืึทืœื•ืฉืึทื ื–, ืื™ืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ืฆื• ื™ื ื“ื™ืคึผืขื ื“ืึทื ื˜ืœื™ ื’ืขืคึฟื™ื ืขืŸ ืึทื ืึทืœืึธื’ื•ืขืก ืคื•ืŸ ืึทื ืึทื˜ื™ื™ืฉืึทื ื– ืคึฟืึทืจ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ.

ื˜ืจื™ื™ื ื’ ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ

ื“ืึทืฉื‘ืึธืจื“ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’

ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜: ืื•ื™ื‘ ืื™ืจ ื–ืขื ืขืŸ ื’ืขื’ืื ื’ืขืŸ ืฆื• ืื™ื‘ืขืจื—ื–ืจืŸ ื“ื™ ืกื˜ืขืคึผืก ืื•ื ื˜ืŸ, ื“ืขืžืึธืœื˜ - ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ ื•ืžื ื™ื™ื˜ื™ืง ืึทืคึผืขืจื™ื™ืฉืึทื ื– - ืขืจืฉื˜ืขืจ ืœื™ื™ืขื ืขืŸ ืฆื• ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืกืึทื‘ื›ืขื“ื™ื ื’.

ื–ื™ื ื˜ ืžื™ืจ ื ื•ืฆืŸ ื“ืขื ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ืื™ืŸ ืคื™ืœืข ื™ื ืกื˜ืึทืœื™ื™ืฉืึทื ื–, ืžื™ืจ ื”ืึธื‘ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื“ื™ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’. ื“ื™ ืžืงื•ืจื™ื ื“ืืจืฃ ืคึฟืึทืจ ื“ืขื ื–ืขื ืขืŸ ืืจื•ื™ืก ืื™ืŸ ืกืคึผืขืฆื™ืขืœืข 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: ืึทื“ืžื™ืŸ ื’ืขื’ื ื˜ โ†’ ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธื ืก - ืื•ืŸ ืœื™ื™ื’ืŸ ืึท ื ื™ื™ึทืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึฟืึทืจ ื“ื™ ืฆื•ืงื•ื ืคึฟื˜ ื˜ืึทืคืœื™ืข. ื–ืืœ ืก ืจื•ืคืŸ ืขืก "kubernetes ื“ืึทืฉื‘ืึธืจื“":

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืึทื“ื™ื ื’ ืขืก, GitLab ื•ื•ืขื˜ ืฆื•ืฉื˜ืขืœืŸ ื“ื™ ื”ืึทืฉืขืก:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ 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 ื–ื™ืš ื’ื™ื˜ ืฆื• ืื•ื ื“ื– ...

ื“ื™ ืคึผืจืึธื‘ืœืขื ืื™ื– ืกืึทืœื•ื•ื“ ื“ื•ืจืš ื‘ื•ื™ืขืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืึธืึทื•ื˜ ื‘ื™ืœื“ ืžื™ื˜ ืึท ืœืึทื˜ืข.

ืคึผืึทื˜ืฉ ืึธืึทื•ื˜ ืื•ืŸ ืจื™ื™ื ืกื˜ืึทืœ

ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ื“ื™ ืคืืœื’ืขื ื“ืข 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

ื“ืขืจ ืึทื˜ืขื ื˜ื™ื•ื• ืœื™ื™ืขื ืขืจ ื•ื•ืขื˜ ื–ืขืŸ ืึทื– ื“ื™ ืœืึทื ื’ ืฉื˜ืจื™ืงืœ ืื•ื™ื‘ืŸ ืื™ื– base64 ืคึฟื•ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ:

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

ื“ืึธืก ืื™ื– ื“ื™ ื‘ืึทื ื™ืฆืขืจ ื“ืึทื˜ืŸ ืื™ืŸ GitLab, ื“ื™ Kubernetes ืงืึธื“ ื•ื•ืขื˜ ืฆื™ืขืŸ ื“ื™ ื‘ื™ืœื“ ืคึฟื•ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™.

ื ืึธืš ืึทืœืฅ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜, ืื™ืจ ืงืขื ืขืŸ ืึทืจืึธืคึผื ืขืžืขืŸ ื“ื™ ืงืจืึทื ื˜ (ื ื™ื˜ ืืจื‘ืขื˜ืŸ ืจื™ื›ื˜ื™ืง) ื“ืึทืฉื‘ืึธืจื“ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืžื™ื˜ ื“ื™ ื‘ืึทืคึฟืขืœ:

$ ./ctl.sh -d

... ืื•ืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ืึทืœืฅ ื•ื•ื™ื“ืขืจ:

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769eโ€ฆ --oauth2-secret 6b79168fโ€ฆ --dashboard-url dashboard.example.com

ืขืก ืื™ื– ืฆื™ื™ื˜ ืฆื• ื’ื™ื™ืŸ ืฆื• ื“ื™ ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ ื’ืขืคึฟื™ื ืขืŸ ืึท ื’ืึทื ืฅ ืึทืจื˜ืฉืึทื™ืง ืœืึธื’ื™ืŸ ืงื ืขืคึผืœ:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ื ืึธืš ืงืœื™ืงื™ื ื’ ืื•ื™ืฃ ืขืก, GitLab ื•ื•ืขื˜ ื‘ืึทื’ืจื™ืกืŸ ืื•ื ื“ื–, ืคืึธืจืฉืœืึธื’ืŸ ืฆื• ืงืœืึธืฅ ืื™ืŸ ืฆื• ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ื‘ืœืึทื˜ (ืคื•ืŸ ืงื•ืจืก, ืื•ื™ื‘ ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืคืจื™ืขืจ ืœืึธื’ื“ ืื™ืŸ ื“ืึธืจื˜):

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ืžื™ืจ ืงืœืึธืฅ ืื™ืŸ ืžื™ื˜ GitLab ืงืจืึทื“ืขื ื˜ืฉืึทืœื– - ืื•ืŸ ืึทืœืฅ ืื™ื– ื’ืขื˜ืืŸ:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ื•ื•ืขื’ืŸ ื“ืึทืฉื‘ืึธืจื“ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ

ืื•ื™ื‘ ืื™ืจ ื–ืขื ื˜ ืึท ื“ืขื•ื•ืขืœืึธืคึผืขืจ ื•ื•ืึธืก ื”ืื˜ ื ื™ืฉื˜ ื’ืขืืจื‘ืขื˜ ืžื™ื˜ Kubernetes ืคืจื™ืขืจ, ืึธื“ืขืจ ืคืฉื•ื˜ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ื‘ื” ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื’ืขืคึผืœืึธื ื˜ืขืจื˜ ื“ืึทืฉื‘ืึธืจื“ ืคืจื™ืขืจ, ืื™ืš ื•ื•ืขืœ ืื™ืœื•ืกื˜ืจื™ืจืŸ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื–ื™ื™ึทืŸ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื–.

ืขืจืฉื˜ืขืจ, ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืึทื– "ืึทืœืฅ ืื™ื– ื’ืจื™ืŸ":

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืื•ื™ืš ื‘ื ื™ืžืฆื ืคึฟืึทืจ ืคึผืึธื“ืก, ืึทื–ืึท ื•ื•ื™ ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื•ื•ืขืจื™ืึทื‘ืึทืœื–, ื“ืึทื•ื ืœืึธื•ื“ื™ื“ ื‘ื™ืœื“, ืงืึทื˜ืขืจ ืึทืจื’ื•ืžืขื ื˜ืŸ ืื•ืŸ ื–ื™ื™ืขืจ ืฉื˜ืึทื˜:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ื”ืึธื‘ืŸ ืงืขื ื˜ื™ืง ืกื˜ืึทื˜ื•ืกืขืก:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

... ืื•ืŸ ืื ื“ืขืจืข ืคืจื˜ื™ื:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

... ืื•ืŸ ืขืก ืื™ื– ืื•ื™ืš ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืคืึทืจืงืœืขื ืขืจืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ืขื ืึธืคึผืขืจืึทืฆื™ืข:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ืฆื•ื•ื™ืฉืŸ ืื ื“ืขืจืข ื ื•ืฆื™ืง ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืฉื•ื™ืŸ ื“ืขืจืžืื ื˜ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ื– ื•ื•ื™ื•ื™ื ื’ ืœืึธื’ืก:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

... ืื•ืŸ ื“ื™ ืคื•ื ืงืฆื™ืข ืฆื• ืงืœืึธืฅ ืื™ืŸ ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ืงืึทื ืกืึธื•ืœ ืคื•ืŸ ื“ื™ ืื•ื™ืกื’ืขืงืœื™ื‘ืŸ ืคึผืึธื“:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืจ ืงืขื ืขืŸ ืื•ื™ืš ืงื•ืง ืื™ืŸ ื“ื™ ืœื™ืžืึทืฅ / ืจื™ืงื•ื•ืขืก ืื•ื™ืฃ ื ืึธื•ื“ื–:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ืคื•ืŸ ืงื•ืจืก, ื“ืึธืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ืึทืœืข ื“ื™ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืคื•ืŸ ื“ื™ ื˜ืึทืคืœื™ืข, ืึธื‘ืขืจ ืื™ืš ื”ืึธืคึฟืŸ ืึทื– ืื™ืจ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืึทืœื’ืขืžื™ื™ื ืข ื’ืขื“ืึทื ืง.

ื“ื™ืกืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืคื•ืŸ ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืื•ืŸ ื“ืึทืฉื‘ืึธืจื“

ืื™ืŸ ื“ื™ ื“ื™ืกืงืจื™ื™ื‘ื“ ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืขืก ืื™ื– ื ื™ื˜ ืฆื•ื˜ืจื™ื˜ ืงืึธื ื˜ืจืึธืœ. ืžื™ื˜ ืขืก, ืึทืœืข ื™ื•ื–ืขืจื– ืžื™ื˜ ืงื™ื™ืŸ ืึทืงืกืขืก ืฆื• GitLab ื‘ืึทืงื•ืžืขืŸ ืึทืงืกืขืก ืฆื• ื“ื™ ื“ืึทืฉื‘ืึธืจื“. ื–ื™ื™ ื”ืึธื‘ืŸ ื“ื™ ื–ืขืœื‘ืข ืึทืงืกืขืก ืื™ืŸ ื“ื™ ื“ืึทืฉื‘ืึธืจื“ ื–ื™ืš, ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืฆื• ื“ื™ ืจืขื›ื˜ ืคื•ืŸ ื“ื™ ื“ืึทืฉื‘ืึธืจื“ ื–ื™ืš, ื•ื•ืึธืก ื–ืขื ืขืŸ ื“ื™ืคื™ื™ื ื“ ืื™ืŸ RBAC. ื“ืึธืš, ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืึทืœืขืžืขืŸ, ืึธื‘ืขืจ ืคึฟืึทืจ ืื•ื ื“ื–ืขืจ ืคืึทืœ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขื ื•ื’.

ืฆื•ื•ื™ืฉืŸ ื“ื™ ื‘ืืžืขืจืงื˜ ื“ื™ืกืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืื™ืŸ ื“ื™ ื“ืึทืฉื‘ืึธืจื“ ื–ื™ืš, ืื™ืš ื˜ืึธืŸ ื“ื™ ืคืืœื’ืขื ื“ืข:

  • ืขืก ืื™ื– ืื•ืžืžืขื’ืœืขืš ืฆื• ื‘ืึทืงื•ืžืขืŸ ืื™ืŸ ื“ื™ ืงืึทื ืกืึธื•ืœ ืคื•ืŸ ื“ื™ ื™ื ื™ื˜ ืงืึทื ื˜ื™ื™ื ืขืจ;
  • ืขืก ืื™ื– ืื•ืžืžืขื’ืœืขืš ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ืื•ืŸ ืกื˜ืขื™ื˜ืคื•ืœืกืขืฅ, ื›ืึธื˜ืฉ ื“ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืคืึทืจืคืขืกื˜ื™ืงื˜ ืื™ืŸ ClusterRole;
  • ื“ื™ ืงืึทืžืคึผืึทื˜ืึทื‘ื™ืœืึทื˜ื™ ืคื•ืŸ ื“ืึทืฉื‘ืึธืจื“ ืžื™ื˜ ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ Kubernetes ืื•ืŸ ื“ื™ ืฆื•ืงื•ื ืคึฟื˜ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืจื™ื™ื–ืึทื– ืคึฟืจืื’ืŸ.

ื“ื™ ืœืขืฆื˜ืข ืคึผืจืึธื‘ืœืขื ืคืืจื“ื™ื ื˜ ืกืคึผืขืฆื™ืขืœ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜.

ื“ืึทืฉื‘ืึธืจื“ ืกื˜ืึทื˜ื•ืก ืื•ืŸ ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืก

ื“ืึทืฉื‘ืึธืจื“ ืงืึทืžืคึผืึทื˜ืึทื‘ื™ืœืึทื˜ื™ ื˜ื™ืฉ ืžื™ื˜ Kubernetes ืจื™ืœื™ืกื™ื–, ื“ืขืจืœืื ื’ื˜ ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืคึผืจื•ื™ืขืงื˜ (ื•ื•ืงืกื ื•ืžืงืก), ื ื™ื˜ ื–ื™ื™ืขืจ ืฆื•ืคืจื™ื“ืŸ:

ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืคื•ืŸ Kubernetes ื“ืึทืฉื‘ืึธืจื“ ืื•ืŸ GitLab ื™ื•ื–ืขืจื–

ื˜ืจืึธืฅ ื“ืขื, ืขืก ืื™ื– (ืฉื•ื™ืŸ ืื ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื™ืื ื•ืืจ) ืคึผืจ #3476, ื•ื•ืึธืก ืึทื ืึทื•ื ืกื™ื– ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ K8s 1.13. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ืฆื•ื•ื™ืฉืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื™ืฉื•ื– ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืฆื• ื™ื•ื–ืขืจื– ื•ื•ืึธืก ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ื˜ืึทืคืœื™ืข ืื™ืŸ K8s 1.14. ืฆื•ื ืกื•ืฃ, ืงืึทืžื™ืฅ ืื™ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืก ืงืึธื“ ื‘ืึทื–ืข ื˜ืึธืŸ ื ื™ื˜ ื”ืึทืœื˜ืŸ. ืึทื–ื•ื™ (ืœืคึผื—ื•ืช!) ื“ื™ ืคืึทืงื˜ื™ืฉ ืกื˜ืึทื˜ื•ืก ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืื™ื– ื ื™ืฉื˜ ืึทื–ื•ื™ ืฉืœืขื›ื˜ ื•ื•ื™ ืขืก ืงืขืŸ ื–ื™ื™ืŸ ืขืจืฉื˜ืขืจ ืคื•ืŸ ื“ืขืจ ื‘ืึทืึทืžื˜ืขืจ ืงืึทืžืคึผืึทื˜ืึทื‘ื™ืœืึทื˜ื™ ื˜ื™ืฉ.

ืฆื•ื ืกื•ืฃ, ืขืก ื–ืขื ืขืŸ ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืก ืฆื• ื“ืึทืฉื‘ืึธืจื“. ืฆื•ื•ื™ืฉืŸ ื–ื™ื™:

  1. K8Dash - ืึท ื™ื•ื ื’ ืฆื•ื‘ื™ื ื“ (ื“ืขืจ ืขืจืฉื˜ืขืจ ืงืึทืžื™ืฅ ื“ืึทื˜ืข ืฆื•ืจื™ืง ืฆื• ืžืึทืจืฅ ืคื•ืŸ ื“ืขื ื™ืึธืจ), ื•ื•ืึธืก ืฉื•ื™ืŸ ืึธืคืคืขืจืก ื’ื•ื˜ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ, ืึทื–ืึท ื•ื•ื™ ืึท ื•ื•ื™ื–ืฉืึทื•ื•ืึทืœ ืคืึทืจื˜ืจืขื˜ื•ื ื’ ืคื•ืŸ ื“ื™ ืงืจืึทื ื˜ ืกื˜ืึทื˜ื•ืก ืคื•ืŸ ื“ืขื ืงื ื•ื™ืœ ืื•ืŸ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืคื•ืŸ ื–ื™ื™ึทืŸ ืึทื‘ื“ื–ืฉืขืงืฅ. ืคึผืึทื–ื™ืฉืึทื ื“ ื•ื•ื™ ืึท "ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ืฆื•ื‘ื™ื ื“", ื•ื•ื™ื™ึทืœ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ื“ื™ ื’ืขื•ื•ื™ื–ืŸ ื“ืึทื˜ืŸ ืึธืŸ ืจื™ืงื•ื•ื™ื™ืจื™ื ื’ ืื™ืจ ืฆื• ื“ืขืจืคืจื™ืฉืŸ ื“ืขื ื‘ืœืึทื˜ ืื™ืŸ ื“ืขื ื‘ืœืขื˜ืขืจืขืจ.
  2. OpenShift ืงืึทื ืกืึธื•ืœ - ืึท ื•ื•ืขื‘ ืฆื•ื‘ื™ื ื“ ืคื•ืŸ Red Hat OpenShift, ื•ื•ืึธืก, ืึธื‘ืขืจ, ื•ื•ืขื˜ ื‘ืจืขื ื’ืขืŸ ืื ื“ืขืจืข ื“ื™ื•ื•ืขืœืึทืคึผืžืึทื ืฅ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืฆื• ื“ื™ื™ืŸ ืงื ื•ื™ืœ, ื•ื•ืึธืก ืื™ื– ื ื™ืฉื˜ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืึทืœืขืžืขืŸ.
  3. ืงื•ื‘ืขืจื ืื˜ืืจ ืื™ื– ืึท ื˜ืฉื™ืงืึทื•ื•ืข ืคึผืจื•ื™ืขืงื˜, ื‘ืืฉืืคืŸ ื•ื•ื™ ืึท ื ื™ื“ืขืจื™ืงืขืจ-ืžื“ืจื’ื” (ื•ื•ื™ ื“ืึทืฉื‘ืึธืจื“) ืฆื•ื‘ื™ื ื“ ืžื™ื˜ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื–ืขืŸ ืึทืœืข ืงื ื•ื™ืœ ืึทื‘ื“ื–ืฉืขืงืฅ. ืึธื‘ืขืจ, ืขืก ืงื•ืงื˜ ื•ื•ื™ ื–ื™ื™ึทืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื”ืื˜ ืคืืจืฉื˜ืืคื˜.
  4. ืคึผืึธืœืึทืจื™ืก - ื ืึธืจ ื“ื™ ืื ื“ืขืจืข ื˜ืึธื’ ืžื•ื“ื™ืข ืึท ืคึผืจื•ื™ืขืงื˜ ื•ื•ืึธืก ืงืึทืžื‘ื™ื™ื ื– ื“ื™ ืคืึทื ื’ืงืฉืึทื ื– ืคื•ืŸ ืึท ื˜ืึทืคืœื™ืข (ื•ื•ื™ื™ึทื–ื˜ ื“ื™ ืงืจืึทื ื˜ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืงื ื•ื™ืœ, ืึธื‘ืขืจ ื˜ื•ื˜ ื ื™ืฉื˜ ืคื™ืจืŸ ื–ื™ื™ึทืŸ ืึทื‘ื“ื–ืฉืขืงืฅ) ืื•ืŸ ืึธื˜ืึทืžืึทื˜ื™ืง "ื•ื•ืึทืœืึทื“ื™ื™ืฉืึทืŸ ืคื•ืŸ ื‘ืขืกื˜ืขืจ ืคึผืจืึทืงื˜ื™ืกื™ื–" (ื˜ืฉืขืงืก ื“ื™ ืงื ื•ื™ืœ ืคึฟืึทืจ ื“ื™ ืจื™ื›ื˜ื™ืง ืคื•ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– ืคื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ืขืก).

ืึทื ืฉื˜ืึธื˜ ืงืึทื ืงืœื•ื–ืฉืึทื ื–

ื“ืึทืฉื‘ืึธืจื“ ืื™ื– ืึท ื ืึธืจืžืึทืœ ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ื“ื™ Kubernetes ืงืœืึทืกื˜ืขืจื– ื•ื•ืึธืก ืžื™ืจ ื“ื™ื ืขืŸ. ื“ื™ ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ GitLab ืื™ื– ืื•ื™ืš ื’ืขื•ื•ืืจืŸ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืคืขืœื™ืงื™ื™ึทื˜ ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’, ื•ื•ื™ื™ึทืœ ืคื™ืœืข ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื–ืขื ืขืŸ ื™ืงืกื™ื™ื˜ืึทื“ ื•ื•ืขื’ืŸ ื“ื™ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ื–ื™ื™ ื”ืึธื‘ืŸ ืžื™ื˜ ื“ืขื ื˜ืึทืคืœื™ืข.

Kubernetes Dashboard ืคึผื™ืจื™ืึทื“ื™ืงืœื™ ื”ืื˜ ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืก ืคื•ืŸ ื“ื™ ืขืคึฟืŸ ืžืงื•ืจ ืงื”ืœ (ืื•ืŸ ืžื™ืจ ื–ืขื ืขืŸ ืฆื•ืคืจื™ื“ืŸ ืฆื• ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื–ื™ื™), ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ื‘ื™ื ืข ืžื™ืจ ื‘ืœื™ื™ื‘ืŸ ืžื™ื˜ ื“ืขื ืœื™ื™ื–ื•ื ื’.

ืคึผืก

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’