Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

Kubernetes ๋Œ€์‹œ๋ณด๋“œ๋Š” ์‹คํ–‰ ์ค‘์ธ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ตœ์‹  ์ •๋ณด๋ฅผ ์–ป๊ณ  ์ด๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž/DevOps ์—”์ง€๋‹ˆ์–ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ˜์†”์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ kubectl ๋ฐ DevOps ์—”์ง€๋‹ˆ์–ด์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ชจ๋“  ๋ณต์žกํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์˜๋„๊ฐ€ ์—†๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•  ๋•Œ ๋”์šฑ ๊ฐ์‚ฌํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐํƒ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ. ์šฐ๋ฆฌ์—๊ฒŒ๋„ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ Kubernetes ์›น ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋น ๋ฅธ ์•ก์„ธ์Šค๋ฅผ ์›ํ–ˆ๊ณ  GitLab์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์†”๋ฃจ์…˜์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

์™œ ์ด๋ž˜?

์ง์ ‘ ๊ฐœ๋ฐœ์ž๋Š” ๋””๋ฒ„๊น… ์ž‘์—…์„ ์œ„ํ•ด K8s ๋Œ€์‹œ๋ณด๋“œ์™€ ๊ฐ™์€ ๋„๊ตฌ์— ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ๋กœ๊ทธ์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด๊ณ  ์‹ถ๊ณ , ๋•Œ๋กœ๋Š” Pod๋ฅผ ์ข…๋ฃŒํ•˜๊ณ , ๋ฐฐํฌ/StatefulSet๋ฅผ ํ™•์žฅํ•˜๊ณ , ์‹ฌ์ง€์–ด ์ปจํ…Œ์ด๋„ˆ ์ฝ˜์†”๋กœ ์ด๋™ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์š”์ฒญ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ํ†ตํ•ด) kubectl-๋””๋ฒ„๊ทธ).

๋˜ํ•œ ๊ด€๋ฆฌ์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ "๋ชจ๋“  ๊ฒƒ์ด ๋…น์ƒ‰"์ž„์„ ํ™•์ธํ•˜๊ณ  "๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๊ณ  ์žˆ๋‹ค"๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ฌ๋ฆฌ์  ์ˆœ๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก  ์ด๋Š” ๋งค์šฐ ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค... ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๊ธฐ์‚ฌ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค.)

์šฐ๋ฆฌ๋Š” ํ‘œ์ค€ CI ์‹œ์Šคํ…œ์œผ๋กœ ์ ์šฉ๋œ GitLab: ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋“ค์—๊ฒŒ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด Dashboard๋ฅผ GitLab ๊ณ„์ •๊ณผ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ NGINX Ingress๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ๋„ ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ผํ•œ๋‹ค๋ฉด ์ง„์ž… ์†”๋ฃจ์…˜, ์ธ์ฆ์„ ์œ„ํ•ด ์ฃผ์„ ์œ ์‚ฌ ํ•ญ๋ชฉ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ์‹œ๋„

๋Œ€์‹œ๋ณด๋“œ ์„ค์น˜

์ฃผ์˜: ์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด - ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด - ๋จผ์ € ๋‹ค์Œ ๋ถ€์ œ๋ชฉ์„ ์ฝ์–ด ๋ณด์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” ๋งŽ์€ ์„ค์น˜์—์„œ ์ด ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„ค์น˜๋ฅผ ์ž๋™ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ํ•„์š”ํ•œ ์†Œ์Šค๋Š” ๋‹ค์Œ์— ๊ฒŒ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ˆ˜ GitHub ์ €์žฅ์†Œ. ์ด๋Š” ์•ฝ๊ฐ„ ์ˆ˜์ •๋œ YAML ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋Œ€์‹œ๋ณด๋“œ ์ €์žฅ์†Œ, ๋น ๋ฅธ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ Bash ์Šคํฌ๋ฆฝํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜ํ•˜๊ณ  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๊ฐ€ ์‚ญ์ œํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

ํŒจ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด 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๋ฅผ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์—†๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ์–ด๋–ค ์ด์œ ๋กœ Dashboard๋ฅผ ์ ‘ํ•ด ๋ณธ ์ ์ด ์—†๋Š” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๊ทธ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ €, "๋ชจ๋“  ๊ฒƒ์ด ๋…น์ƒ‰"์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ๋‹ค์šด๋กœ๋“œํ•œ ์ด๋ฏธ์ง€, ์‹คํ–‰ ์ธ์ˆ˜ ๋ฐ ํ•ด๋‹น ์ƒํƒœ์™€ ๊ฐ™์€ ํฌ๋“œ์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋ฐ์ดํ„ฐ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

๋ฐฐํฌ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

...๋ฐ ๊ธฐํƒ€ ์„ธ๋ถ€์ •๋ณด:

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

... ๋ฐฐํฌ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

์ด ์ž‘์—…์˜ ๊ฒฐ๊ณผ:

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

๊ธฐ์‚ฌ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ๋‹ค๋ฅธ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ ์ค‘์—๋Š” ๋กœ๊ทธ ๋ณด๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

... ๊ทธ๋ฆฌ๊ณ  ์„ ํƒํ•œ ํฌ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ ์ฝ˜์†”์— ๋กœ๊ทธ์ธํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

์˜ˆ๋ฅผ ๋“ค์–ด ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ œํ•œ/์š”์ฒญ์„ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

๋ฌผ๋ก  ์ด๊ฒƒ์ด ํŒจ๋„์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ์•„๋‹ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ์•„์ด๋””์–ด๋ฅผ ์–ป์œผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํ†ตํ•ฉ๊ณผ ๋Œ€์‹œ๋ณด๋“œ์˜ ๋‹จ์ 

์„ค๋ช…๋œ ํ†ตํ•ฉ์—๋Š” ๋‹ค์Œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ์ œ์–ด. ์ด๋ฅผ ํ†ตํ•ด GitLab์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ๋Œ€์‹œ๋ณด๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ ์ž์ฒด์˜ ๊ถŒํ•œ์— ๋”ฐ๋ผ ๋Œ€์‹œ๋ณด๋“œ ์ž์ฒด์—๋„ ๋™์ผํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. RBAC์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.. ๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‹œ๋ณด๋“œ ์ž์ฒด์˜ ๋ˆˆ์— ๋„๋Š” ๋‹จ์  ์ค‘ ๋‹ค์Œ ์‚ฌํ•ญ์— ์ฃผ๋ชฉํ•ฉ๋‹ˆ๋‹ค.

  • init ์ปจํ…Œ์ด๋„ˆ์˜ ์ฝ˜์†”์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ClusterRole์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐฐํฌ ๋ฐ StatefulSet๋ฅผ ํŽธ์ง‘ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์‹  ๋ฒ„์ „์˜ Kubernetes์™€ ๋Œ€์‹œ๋ณด๋“œ์˜ ํ˜ธํ™˜์„ฑ ๋ฐ ํ”„๋กœ์ ํŠธ์˜ ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ์˜๋ฌธ์ด ์ œ๊ธฐ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๋ฌธ์ œ๋Š” ํŠน๋ณ„ํ•œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‹œ๋ณด๋“œ ์ƒํƒœ ๋ฐ ๋Œ€์•ˆ

ํ”„๋กœ์ ํŠธ์˜ ์ตœ์‹  ๋ฒ„์ „์— ์ œ์‹œ๋œ Kubernetes ๋ฆด๋ฆฌ์Šค์™€์˜ ๋Œ€์‹œ๋ณด๋“œ ํ˜ธํ™˜์„ฑ ํ‘œ(v1.10.1) ๋ณ„๋กœ ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์™€ GitLab ์‚ฌ์šฉ์ž์˜ ํ†ตํ•ฉ

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  (์ด๋ฏธ XNUMX์›”์— ์ฑ„ํƒ๋จ) PR # 3476, K8s 1.13์— ๋Œ€ํ•œ ์ง€์›์„ ๋ฐœํ‘œํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์ ํŠธ ์ด์Šˆ ์ค‘์—์„œ K8s 1.14์˜ ํŒจ๋„๋กœ ์ž‘์—…ํ•˜๋Š” ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ปค๋ฐ‹ํ•˜๋‹ค ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ ๋ฒ ์ด์Šค์— ๋ฉˆ์ถ”์ง€ ๋งˆ์„ธ์š”. ๋”ฐ๋ผ์„œ (์ ์–ด๋„!) ํ”„๋กœ์ ํŠธ์˜ ์‹ค์ œ ์ƒํƒœ๋Š” ๊ณต์‹ ํ˜ธํ™˜์„ฑ ํ‘œ์—์„œ ์ฒ˜์Œ ๋ณด์ด๋Š” ๊ฒƒ๋งŒํผ ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋Œ€์‹œ๋ณด๋“œ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘์—๋Š”:

  1. K8๋Œ€์‹œ โ€” ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์‹œ๊ฐ์  ํ‘œํ˜„ ๋ฐ ๊ฐœ์ฒด ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ์ข‹์€ ๊ธฐ๋Šฅ์„ ์ด๋ฏธ ์ œ๊ณตํ•˜๋Š” ์ Š์€ ์ธํ„ฐํŽ˜์ด์Šค(์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹ ๋‚ ์งœ๋Š” ์˜ฌํ•ด XNUMX์›”๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค). "์‹ค์‹œ๊ฐ„ ์ธํ„ฐํŽ˜์ด์Šค"๋กœ ํฌ์ง€์…”๋‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์น  ํ•„์š” ์—†์ด ํ‘œ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜คํ”ˆ์‹œํ”„ํŠธ ์ฝ˜์†” - Red Hat OpenShift์˜ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์„ ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฐ€์ ธ์˜ค์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  3. ์ฟ ๋ฒ„๋„ค์ดํ„ฐ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ๊ฐœ์ฒด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ํ•˜์œ„ ์ˆ˜์ค€(๋Œ€์‹œ๋ณด๋“œ๋ณด๋‹ค) ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ƒ์„ฑ๋œ ํฅ๋ฏธ๋กœ์šด ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ์ด ์ค‘๋‹จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  4. ํด๋ผ๋ฆฌ์Šค - ์ €๋ฒˆ์— ๋ฐœํ‘œ ํŒจ๋„์˜ ๊ธฐ๋Šฅ(ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜์ง€๋งŒ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜์ง€๋Š” ์•Š์Œ)๊ณผ ์ž๋™ "๋ชจ๋ฒ” ์‚ฌ๋ก€ ๊ฒ€์ฆ"(ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ฐฐํฌ ๊ตฌ์„ฑ์˜ ์ •ํ™•์„ฑ ํ™•์ธ)์„ ๊ฒฐํ•ฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก  ๋Œ€์‹ 

๋Œ€์‹œ๋ณด๋“œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ํŒจ๋„์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— GitLab๊ณผ์˜ ํ†ตํ•ฉ๋„ ๊ธฐ๋ณธ ์„ค์น˜์˜ ์ผ๋ถ€๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๋Œ€์‹œ๋ณด๋“œ์—๋Š” ์ •๊ธฐ์ ์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋Œ€์•ˆ์ด ์žˆ์ง€๋งŒ(์šฐ๋ฆฌ๋Š” ๊ธฐ๊บผ์ด ์ด๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค), ํ˜„ ๋‹จ๊ณ„์—์„œ๋Š” ์ด ์†”๋ฃจ์…˜์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

PS

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€