Kubernetes Dashboard แแ แแก แแแแแแแ แแแแแกแแงแแแแแแแ แแแกแขแ แฃแแแแขแ แแฅแแแแ แแแจแแแแฃแแ แแแแกแขแแ แแก แจแแกแแฎแแ แแแแแฎแแแแฃแแ แแแคแแ แแแชแแแก แแแกแแฆแแแแ แแ แแแแแแแแฃแ แ แซแแแแกแฎแแแแแ แแแกแ แแแ แแแแกแแแแก. แแฅแแแ แฃแคแ แ แแแขแแ แแฌแงแแแ แแแก แจแแคแแกแแแแก, แ แแแแกแแช แแ แจแแกแแซแแแแแแแแแแ แฌแแแแแ แกแญแแ แแแแแ แแ แ แแฎแแแแ แแแแแแแกแขแ แแขแแ แแแก/DevOps แแแแแแ แแแก, แแ แแแแ แแแแแช, แแแแช แแแแแแแแ แแ แแก แแแฉแแแฃแแ แแแแกแแแก แแ/แแ แแ แแแแ แแแก แแแฃแแแแแแแแก kubectl-แแแ แแ แแแขแแ แแฅแชแแแก แงแแแแ แกแแ แแฃแแแก. แกแฎแแ แแแแฃแแแแฃแ แ แกแแจแฃแแแแแแแ. แแก แแแฎแแ แฉแแแแแแ: แแแแแแแแแ แแแก แกแฃแ แแแ แกแฌแ แแคแ แฌแแแแแ Kubernetes แแแ แแแขแแ แคแแแกแแ แแ แ แแแแแ แฉแแแ แแแงแแแแแ GitLab-แก, แแแแแกแแแแแ แแฃแแแแ แแแแ.
แฒ แแขแแ แแ แแก แแก?
แแแ แแแแแ แ แแแแแแแแแ แแแ แจแแแซแแแแ แแแแแขแแ แแกแแแแ แแกแแแ แแแกแขแ แฃแแแแขแแ, แ แแแแ แแชแแ K8s Dashboard แแแแชแแแแแแก แแแแแ แแแแกแแแแก. แฎแแแแแฎแแ แแกแฃแ แ แแฎแแแแ แแฃแ แแแแแแ แแ แ แแกแฃแ แกแแแ, แฎแแแแแฎแแ แแแแแแ แแแแแแ, แแแแคแแ แแแแแ Deployments/StatefulSets แแ แแแแแฎแแแแแ แแแแขแแแแแ แแก แแแแกแแแแแช (แแกแแแ แแ แแก แแแแฎแแแแแแ, แ แแแแแแแแแแกแแช, แแฃแแชแ, แแ แกแแแแแก แกแฎแแ แแแ - แแแแแแแแแ, แแแจแแแแแแ
แแแ แแ แแแแกแ, แแแแแฏแแ แแแก แแฅแแ แคแกแแฅแแแแแแฃแ แ แแแแแแขแ, แ แแชแ แกแฃแ แ แแแแกแขแแ แก แจแแฎแแแแ - แแแแแแฎแแ, แ แแ โแงแแแแแคแแ แ แแฌแแแแแโ แแ แแแแ แแแแแจแแแแแ แแแแ, แ แแ โแงแแแแแคแแ แ แแฃแจแแแแกโ (แ แแช, แ แ แแฅแแ แฃแแแ, แซแแแแแ แคแแ แแแแแแแ... แแแแ แแ แแก แกแชแแแแแแ แกแขแแขแแแก แคแแ แแแแแก).
แ แแแแ แช แกแขแแแแแ แขแฃแแ CI แกแแกแขแแแ แแแแฅแแก
แแ แแกแแแ แแฆแแแแจแแแ, แ แแ แฉแแแ แแแงแแแแแ NGINX Ingress. แแฃ แกแฎแแแแแแ แแฃแจแแแแ
แแแขแแแ แแชแแแก แแชแแแแแแ
แแแคแแก แแแงแแแแแ
แงแฃแ แแแฆแแแ: แแฃ แแฅแแแ แแแแ แแแ แแแแแแแ แแ แฅแแแแแ แแแชแแแฃแแ แแแแแฏแแแ, แแแจแแ - แแแแแแขแ แแแแ แแชแแแแแก แแแแแแแ แแกแแชแแแแแแแ - แฏแแ แฌแแแแแแฎแแ แจแแแแแแ แฅแแแกแแแแฃแ แ.
แแแแแแแแ แฉแแแ แแแงแแแแแ แแ แแแขแแแ แแชแแแก แแแแ แแแกแขแแแแชแแแจแ, แฉแแแ แแแแแฎแแแแแ แแแกแ แแแกแขแแแแชแแแก แแแขแแแแขแแแแชแแ. แแแแกแแแแก แกแแญแแ แ แฌแงแแ แแแแ แแแแแฅแแแงแแแแฃแแแ แฅ
แกแแ แแแขแ แแงแแแแแก 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 - แแ แแแแแแขแแ แแฎแแแ แแแแแแแชแแ แแแแแแแแ แแแแแแแกแแแแก. แแแแแ แแฃแฌแแแแ แแแก "แแฃแแแ แแแขแแก แแแคแ":
แแแกแ แแแแแขแแแแก แจแแแแแแ, 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
แงแฃแ แแแฆแแแแแแ แแแแแฎแแแแ แแแแแแฎแแแก, โโแ แแ แแ แซแแแ แกแขแ แแฅแแแ แแแแแ แแ แแก 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
แแ แแ แแแแแฎแแแแแ Dashboard-แแ แแ แแแแแแ แกแแแแแแ แแ แฅแแฃแแ แจแแกแแแแก แฆแแแแแ:
แแแกแแ แแแฌแแแแฃแแแแแก แจแแแแแ, GitLab แแแแแแกแแแแแแ แแ แแแแแแแแแแก แจแแฎแแแแแ แฉแแแฃแแแแ แแ แแแแ แแแ (แ แ แแฅแแ แฃแแแ, แแฃ แแฅแแแแ แแ แแแ แ แจแแกแฃแแ):
แฉแแแ แจแแแแแแแ แ GitLab แกแแ แแแคแแแแขแแแแ - แแ แงแแแแแคแแ แ แแแแแแแ:
แแแคแแก แแแฎแแกแแแแแแแแแแก แจแแกแแฎแแ
แแฃ แแฅแแแ แฎแแ แ แแแแแแแแแ แ, แ แแแแแแช แแแ แ แแ แฃแแฃแจแแแแ Kubernetes-แแแ, แแ แฃแแ แแแแ แ แแแแ แแแแแแแ แแ แจแแฎแแแแ แแแ Dashboard-แก, แแ แแแฃแกแขแ แแ แแแแก แแแแแแแแแ แแแก แแแแแแ แ แจแแกแแซแแแแแแแแแแ.
แแแ แแแ แ แแแจแ, แแฅแแแ แฎแแแแแ, แ แแ "แงแแแแแคแแ แ แแฌแแแแแ":
แฃแคแ แ แแแขแแแฃแ แ แแแแแชแแแแแ แแกแแแ แฎแแแแแกแแฌแแแแแแ แแแแแแแกแแแแก, แ แแแแ แแชแแ แแแ แแแแก แชแแแแแแแ, แแแแแแฌแแ แแแ แกแฃแ แแแ, แแแจแแแแแก แแ แแฃแแแแขแแแ แแ แแแแ แแแแแแแ แแแแ:
แแแแแแแแแแก แแฅแแก แฎแแแฃแแ แกแขแแขแฃแกแแแ:
...แแ แกแฎแแ แแแขแแแแแ:
... แแ แแกแแแ แแ แแก แแแแแแแแแแก แแแกแจแขแแแแก แจแแกแแซแแแแแแแ:
แแ แแแแ แแชแแแก แจแแแแแ:
แกแขแแขแแแก แแแกแแฌแงแแกแจแ แฃแแแ แแแฎแกแแแแแ แกแฎแแ แกแแกแแ แแแแแ แคแฃแแฅแชแแแแก แจแแ แแก แแ แแก แแฃแ แแแแแแแก แแแฎแแ:
... แแ แแ แฉแแฃแแ แแแแแก แแแแขแแแแแ แแก แแแแกแแแจแ แจแแกแแแแก แคแฃแแฅแชแแ:
แแแแแแแแแ, แแฅแแแ แแกแแแ แจแแแแซแแแแ แแแฎแแ แแแแแซแแแแก แแแแแขแแแ/แแแแฎแแแแแแ:
แ แ แแฅแแ แฃแแแ, แแก แแ แแ แแก แแแแแแแก แงแแแแ แจแแกแแซแแแแแแแ, แแแแ แแ แแแแแ แแแฅแแก, แ แแ แแฅแแแ แแแแฆแแแ แแแแแ แแแแแก.
แแแขแแแ แแชแแแก แแ Dashboard-แแก แแแแแแแแแแแแแ
แแฆแฌแแ แแ แแแขแแแ แแชแแแจแ แแ แแ แกแแแแแก แฌแแแแแแก แแแแขแ แแแ. แแแกแแแ แแ แแแ, GitLab-แแ แแแแแกแแแแ แ แฌแแแแแแก แแฅแแแ แแแแฎแแแ แแแแแ แแฆแแแก แฌแแแแแแก Dashboard-แแ. แแแ แแฅแแ แแแแแ แฌแแแแแ แแแแแ Dashboard-แจแ, แ แแช แจแแแกแแแแแแแ แแแแแ Dashboard-แแก แฃแคแแแแแแก, แ แแช
แแแแแ Dashboard-แแก แจแแกแแแฉแแแ แแแแแแแแแแแแแก แจแแ แแก แแ แแฆแแแแจแแแ แจแแแแแแก:
- แจแแฃแซแแแแแแแ แกแแฌแงแแก แแแแขแแแแแ แแก แแแแกแแแจแ แแแฎแแแแ แ;
- แจแแฃแซแแแแแแแ Deployments แแ StatefulSets-แแก แ แแแแฅแขแแ แแแ, แแฃแแชแ แแแแก แแแคแแฅแกแแ แแแ แจแแกแแซแแแแแแแ ClusterRole-แจแ;
- Dashboard-แแก แแแแกแแแแแแแ Kubernetes-แแก แฃแแฎแแแก แแแ แกแแแแแแ แแ แแ แแแฅแขแแก แแแแแแแแ แแฉแแแก แแแแฎแแแแก.
แแแแ แแ แแแแแแ แแแแกแแแฃแแ แแแฃแ แงแฃแ แแแฆแแแแก แแแกแแฎแฃแ แแแก.
แแแคแแก แกแขแแขแฃแกแ แแ แแแขแแ แแแขแแแแแ
Dashboard แแแแกแแแแแแแแก แชแฎแ แแแ Kubernetes-แแก แแแแแจแแแแแแแแ, แฌแแ แแแแแแแแแแ แแ แแแฅแขแแก แฃแแฎแแแก แแแ แกแแแจแ (
แแแแก แแแฃแฎแแแแแแ, แแ แกแแแแแก (แฃแแแ แแแฆแแแฃแแ แแแแแแ แจแ)
แแแแแแแก, แแ แกแแแแแก Dashboard-แแก แแแขแแ แแแขแแแแแ. แฒแแ แจแแ แแก:
-
K8Dash โ แแฎแแแแแแ แแ แแแขแแ แคแแแกแ (แแแ แแแแ แจแแแแแฎแแแแแแ แแแ แแฆแแแแ แแแแแแแแ แ แฌแแแก แแแ แขแจแ), แ แแแแแแช แฃแแแ แแแแแแแแแแก แแแ แ แคแฃแแฅแชแแแแก, แ แแแแ แแชแแ แแแแกแขแแ แแก แแแแแแแแแแแ แกแขแแขแฃแกแแก แแแแฃแแแฃแ แ แฌแแ แแแแแแแ แแ แแแกแ แแแแแฅแขแแแแก แแแ แแแ. แแแแแแแแแฃแแแ แ แแแแ แช "แ แแแแฃแ แแ แแจแ แแแขแแ แคแแแกแ", แ แแแแแ แแแขแแแแขแฃแ แแ แแแแแแฎแแแแก แแแฉแแแแแแ แแแแแชแแแแแแก แแ แแฃแแแ แจแ แแแแ แแแก แแแแแฎแแแแแก แแแแฎแแแแแก แแแ แแจแ. -
OpenShift แแแแกแแแ - แแแ แแแขแแ แคแแแกแ Red Hat OpenShift-แแกแแแ, แ แแแแแแช, แแฃแแชแ, แแฅแแแแก แแแแกแขแแ แจแ แจแแแแแขแแแก แแ แแแฅแขแแก แกแฎแแ แแแแแแแแ แแแแก, แ แแแแแแช แงแแแแแกแแแแก แจแแกแแคแแ แแกแ แแ แแ แแก. -
แแฃแแแ แแแขแแ แ แแ แแก แกแแแแขแแ แแกแ แแ แแแฅแขแ, แจแแฅแแแแแ แ แแแแ แช แฅแแแแ แแแแแก (แแแคแแแ) แแแขแแ แคแแแกแ แงแแแแ แแแแกแขแแ แฃแแ แแแแแฅแขแแก แแแฎแแแก แจแแกแแซแแแแแแแแ. แแฃแแชแ, แ แแแแ แช แฉแแแก, แแแกแ แแแแแแแแ แแแ แจแแฉแแ แแแฃแแแ. -
Polaris - แแฎแแแแ แแแแ แ แแฆแแกแแแแแแชแฎแแแ แแ แแแฅแขแ, แ แแแแแแช แแแ แแแแแแแก แแแแแแแก แคแฃแแฅแชแแแแก (แแแแฉแแแแแแก แแแแกแขแแ แแก แแแแแแแแแแ แแแแแแแ แแแแแก, แแแแ แแ แแ แแแ แแแแก แแแก แแแแแฅแขแแแก) แแ แแแขแแแแขแฃแ โแกแแฃแแแแแกแ แแ แแฅแขแแแแก แจแแแแฌแแแแแกโ (แแแแฌแแแแก แแแแกแขแแ แก แแแกแจแ แแแจแแแแฃแแ Deployments-แแก แแแแคแแแฃแ แแชแแแก แกแแกแฌแแ แแกแแแแก).
แแแกแแแแแแแก แแแชแแแแ
Dashboard แแ แแก แกแขแแแแแ แขแฃแแ แแแกแขแ แฃแแแแขแ Kubernetes แแแแกแขแแ แแแแกแแแแก, แ แแแแแแกแแช แฉแแแ แแแแกแแฎแฃแ แแแแ. GitLab-แแแ แแแกแ แแแขแแแ แแชแแ แแกแแแ แแแฎแแ แฉแแแแ แแแแฃแแแกแฎแแแแ แแแกแขแแแแชแแแก แแแฌแแแ, แ แแแแแ แแแแ แ แแแแแแแแแ แ แแฆแคแ แแแแแแแแฃแแแ แแ แแแแแแแก แจแแกแแซแแแแแแแแแแ.
Kubernetes Dashboard-แก แแแ แแแแฃแแแ แแฅแแก แแแขแแ แแแขแแแแแ แฆแแ แแแแแก แกแแแแแแแแแแแกแแแ (แแ แฉแแแ แกแแแแแแแแแแ แแแแแแฎแแแแแ แแแ), แแแแ แแ แแ แแขแแแแ แฉแแแ แแ แฉแแแแ แแ แแแแแฌแงแแแขแแแ.
PS
แแกแแแ แฌแแแแแแฎแแ แฉแแแแก แแแแแแ:
- ยซ
kubebox แแ แกแฎแแ แญแฃแ แแแแ Kubernetes-แแกแแแแก "; - ยซ
แกแแฃแแแแแกแ CI/CD แแ แแฅแขแแแ Kubernetes-แแแ แแ GitLab-แแแ (แแแแแฎแแแแ แแ แแแแแ แแแแแ แแจแ) "; - ยซ
แจแแฅแแแแแ แแ แแแแแแแแกแแ แแแแแแแชแแแแ Kubernetes-แจแ dapp-แแกแ แแ GitLab CI-แแก แแแแแงแแแแแแ "; - ยซ
GitLab CI แฌแแ แแแแแแจแ แฃแฌแงแแแขแ แแแขแแแ แแชแแแกแ แแ แแแฌแแแแแแกแแแแก. แแแฌแแแ 1: แฉแแแแ แแแแกแแแแแ ".
แฌแงแแ แ: www.habr.com