Kubernetes Dashboard β ΠΏΡΠΎΡΡΠΎΠΉ Π² ΡΠ°Π±ΠΎΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠΌ. ΠΠ°ΡΠΈΠ½Π°Π΅ΡΡ Π΅Π³ΠΎ ΡΠ΅Π½ΠΈΡΡ Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ Π½ΡΠΆΠ΅Π½ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌ/DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ°ΠΌ, Π½ΠΎ ΠΈ ΡΠ΅ΠΌ, ΠΊΡΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΡΠΈΠ²ΡΠΊ ΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈ/ΠΈΠ»ΠΈ Π½Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠΎΠ½ΠΊΠΎΡΡΡΠΌΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ kubectl ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ. Π’Π°ΠΊ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΈ Ρ Π½Π°Ρ: ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π·Π°Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±ΡΡΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Kubernetes, Π° ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ GitLab, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΡΠΎΡΠΈΠ»ΠΎΡΡ ΡΠ°ΠΌΠΎ ΡΠΎΠ±ΠΎΠΉ.
ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ?
ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ΅ Π²ΡΠΎΠ΄Π΅ K8s Dashboard Π΄Π»Ρ Π·Π°Π΄Π°Ρ ΠΏΠΎ ΠΎΡΠ»Π°Π΄ΠΊΠ΅. ΠΠ½ΠΎΠ³Π΄Π° Ρ
ΠΎΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π»ΠΎΠ³ΠΈ ΠΈ ΡΠ΅ΡΡΡΡΡ, Π° ΠΏΠΎΡΠΎΠΉ ΠΈ ΡΠ±ΠΈΠ²Π°ΡΡ podβΡ, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ Deployments/StatefulSets ΠΈ Π΄Π°ΠΆΠ΅ Π·Π°Ρ
ΠΎΠ΄ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² (ΡΠ»ΡΡΠ°ΡΡΡΡ ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ
, Π²ΠΏΡΠΎΡΠ΅ΠΌ, Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΡΡ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π·
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ ΠΈ ΠΏΡΠΈΡ ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Ρ ΠΎΡΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅Ρ β ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Β«Π²ΡΡ Π·Π΅Π»Π΅Π½Π΅Π½ΡΠΊΠΎΠ΅Β», ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ, ΡΡΠΎ Β«Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΒ» (ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π²Π΅ΡΡΠΌΠ° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎβ¦ Π½ΠΎ ΡΡΠΎ ΡΠΆΠ΅ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΡΠ°ΡΡΠΈ).
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ CI-ΡΠΈΡΡΠ΅ΠΌΡ Ρ Π½Π°Ρ
Π’Π°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ NGINX Ingress. ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ
ΠΡΠΎΠ±ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Dashboard
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΡΠ°Π³ΠΈ, ΡΠΎ β Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π»ΠΈΡΠ½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉΒ β ΡΠ½Π°ΡΠ°Π»Π° Π΄ΠΎΡΠΈΡΠ°ΠΉΡΠ΅ Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π°ΠΌΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΉ, ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ. ΠΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ Π²
Π‘ΠΊΡΠΈΠΏΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Dashboard Π² ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ 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: Admin area β Applications β ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅ΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ. ΠΠ°Π·ΠΎΠ²ΡΠΌ Π΅Π³ΠΎ Β«kubernetes dashboardΒ»:
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ 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
Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠ°Π·Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ! ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌ ΠΎΠ±ΡΠ°Π·Π΅ (ΡΠΈΡΡΠ°ΡΠΈΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ°Π·Π°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°) Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΡΠΎΡΠ΅ΡΡ Π»ΠΎΠ²Π»ΠΈ ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡΠ° Π² callback. ΠΡΠΎ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ oauth ΡΡΠΈΡΠ°Π΅Ρ cookie, ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΌ ΠΆΠ΅ (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
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΎΠ±ΡΠ°Π·Π° ΠΈ Π·Π°βpushβΠΈΡΡ Π΅Π³ΠΎ Π² Π½Π°Ρ ΠΆΠ΅ GitLab. ΠΠ°Π»Π΅Π΅ Π² manifests/kube-dashboard-oauth2-proxy.yaml
ΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° (Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° ΡΠ²ΠΎΠΉ):
image: docker.io/colemickens/oauth2_proxy:latest
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π·Π°ΠΊΡΡΡΡΠΉ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ registry β Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΠ° Π΄Π»Ρ pullβΠ° ΠΎΠ±ΡΠ°Π·ΠΎΠ²:
imagePullSecrets:
- name: gitlab-registry
β¦ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°ΠΌ ΡΠ΅ΠΊΡΠ΅Ρ Π΄Π»Ρ 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 Π±ΡΠ΄Π΅Ρ pullβΠΈΡΡ ΠΎΠ±ΡΠ°Π· ΠΈΠ· registry.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ (Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΡΡ) ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΡ Dashboard ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ ./ctl.sh -d
β¦ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΡ Π·Π°Π½ΠΎΠ²ΠΎ:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e⦠--oauth2-secret 6b79168f⦠--dashboard-url dashboard.example.com
ΠΠ°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΉΡΠΈ Π² Dashboard ΠΈ Π½Π°ΠΉΡΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π°ΡΡ Π°ΠΈΡΠ½ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ:
ΠΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° Π½Π΅Ρ Π½Π°Ρ Π²ΡΡΡΠ΅ΡΠΈΡ GitLab, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ (ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠ°ΠΌ):
ΠΠ²ΡΠΎΡΠΈΠ·ΡΠ΅ΠΌΡΡ Ρ ΡΡΡΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ GitLab β ΠΈ Π²ΡΡ ΡΠ²Π΅ΡΡΠΈΠ»ΠΎΡΡ:
Π Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Dashboard
ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π» Ρ Kubernetes, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ ΠΏΡΠ΅ΠΆΠ΄Π΅ Ρ Dashboard β ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ Β«Π²ΡΡ Π·Π΅Π»Π΅Π½Π΅Π½ΡΠΊΠΎΠ΅Β»:
ΠΠΎ podβΠ°ΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, Π²ΡΠΊΠ°ΡΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π·, Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π·Π°ΠΏΡΡΠΊΠ°, ΠΈΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅:
Π£ deploymentβΠΎΠ² Π²ΠΈΠ΄Π½Ρ ΡΡΠ°ΡΡΡΡ:
β¦ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ:
β¦ Π° ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ deployment:
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
Π‘ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠΈΡ
ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΡΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ
Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠ°ΡΡΠΈ, β ΠΏΡΠΎΡΠΌΠΎΡΡ Π»ΠΎΠ³ΠΎΠ²:
β¦ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²Ρ
ΠΎΠ΄Π° Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ podβΠ°:
ΠΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈ limitβΡ/requestβΡ Π½Π° ΡΠ·Π»Π°Ρ
:
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ, Π½ΠΎ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈ Dashboard
Π ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ°. Π‘ Π½Π΅ΠΉ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΡΡΡΠΏ ΠΊ GitLab, ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ Π² Dashboard. ΠΠΎΡΡΡΠΏ Π² ΡΠ°ΠΌΠΎΠΌ Dashboard Ρ Π½ΠΈΡ
ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠ°Π²Π°ΠΌ ΡΠ°ΠΌΠΎΠΉ Dashboard, ΠΊΠΎΡΠΎΡΡΠ΅
ΠΠ· Π·Π°ΠΌΠ΅ΡΠ½ΡΡ ΠΌΠΈΠ½ΡΡΠΎΠ² Π² ΡΠ°ΠΌΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Dashboard ΠΎΡΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
- Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ init-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°;
- Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Deployments ΠΈ StatefulSets, Ρ ΠΎΡΡ ΡΡΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌΠΎ Π² ClusterRole;
- ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Dashboard Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Kubernetes ΠΈ Π±ΡΠ΄ΡΡΠ΅Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΠΎΠΏΡΠΎΡΡ.
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ.
Π‘ΡΠ°ΡΡΡ ΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Dashboard
Π’Π°Π±Π»ΠΈΡΠ° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Dashboard Ρ ΡΠ΅Π»ΠΈΠ·Π°ΠΌΠΈ Kubernetes, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° (
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ (ΡΠΆΠ΅ ΠΏΡΠΈΠ½ΡΡΡΠΉ Π² ΡΠ½Π²Π°ΡΠ΅)
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Ρ Dashboard ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ. Π‘ΡΠ΅Π΄ΠΈ Π½ΠΈΡ :
-
K8Dash β ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ Π΄Π°ΡΠΈΡΡΡΡΡΡ ΠΌΠ°ΡΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°), ΡΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠΈΠΉ Π½Π΅ΠΏΠ»ΠΎΡ ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΡΠ°ΡΡΡΠ° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. ΠΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Β«ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈΒ», Ρ.ΠΊ. Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π½Π΅ ΡΡΠ΅Π±ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅. -
OpenShift Console β Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΡ Red Hat OpenShift, ΠΊΠΎΡΠΎΡΡΠΉ, Π²ΠΏΡΠΎΡΠ΅ΠΌ, ΠΏΡΠΈΠ½Π΅ΡΡΡ Π² Π²Π°Ρ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π½Π°ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ. -
Kubernator β ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ (ΡΠ΅ΠΌ Dashboard) ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ Π²ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ, ΡΡΠΎ Π΅Π³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ»Π°ΡΡ. -
Polaris β Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π½Π° Π΄Π½ΡΡΠ°Π½ΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ (ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, Π½ΠΎ Π½Π΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ) ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Β«Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π»ΡΡΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΒ» (ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠ΅Ρ Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ Π² Π½ΡΠΌ Deployments).
ΠΠΌΠ΅ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΎΠ²
Dashboard β ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² Kubernetes, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅ΠΌ. ΠΠ³ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ GitLab ΡΠΎΠΆΠ΅ ΡΡΠ°Π»Π° ΡΠ°ΡΡΡΡ Π½Π°ΡΠ΅ΠΉ Β«ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡΒ», ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°Π΄Ρ ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π½ΠΈΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Ρ ΡΡΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΡΡ.
Π£ Kubernetes Dashboard ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΎΡ Open Source-ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° (ΠΈ ΠΌΡ ΡΠ°Π΄Ρ ΠΈΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ), ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΎΡΡΠ°ΡΠΌΡΡ Ρ ΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
P.S.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«
kubebox ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π΄Π»Ρ Kubernetes Β»; - Β«
ΠΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ CI/CD Ρ Kubernetes ΠΈ GitLab (ΠΎΠ±Π·ΠΎΡ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°) Β»; - Β«
Π‘Π±ΠΎΡΠΊΠ° ΠΈ Π΄eΠΏΠ»ΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Kubernetes Ρ ΠΏΠΎΠΌΠΎΡΡΡ dapp ΠΈ GitLab CI Β»; - Β«
GitLab CI Π΄Π»Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Π² production. Π§Π°ΡΡΡ 1: Π½Π°Ρ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com