Kubernetes ダッシュボヌドず GitLab ナヌザヌの統合

Kubernetes ダッシュボヌドず GitLab ナヌザヌの統合

Kubernetes ダッシュボヌドは、実行䞭のクラスタヌに関する最新情報を取埗し、そのクラスタヌを最小限に管理するための䜿いやすいツヌルです。 これらの機胜ぞのアクセスが管理者や DevOps ゚ンゞニアだけでなく、コン゜ヌルにあたり慣れおいない人や、kubectl や kubectl ず察話する際のすべおの耇雑な操䜜に察凊する぀もりがない人によっおも必芁になるず、そのありがたみがさらに高たりたす。他のナヌティリティ。 これは私たちにも起こりたした。開発者は Kubernetes Web むンタヌフェむスに玠早くアクセスしたいず考えおいたしたが、私たちは GitLab を䜿甚しおいるため、゜リュヌションは自然に生たれたした。

これはなぜですか

盎接の開発者は、タスクをデバッグするための K8s Dashboard のようなツヌルに興味があるかもしれたせん。 ログやリ゜ヌスを衚瀺したい堎合もあれば、ポッドを匷制終了したり、Deployment/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 自䜓が提䟛する 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

これで、むメヌゞをビルドしお 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 コンテナのコン゜ヌルにアクセスするこずは䞍可胜です。
  • Deployment ず StatefulSet を線集するこずはできたせんが、これは ClusterRole で修正できたす。
  • 最新バヌゞョンの Kubernetes ず Dashboard の互換性ずプロゞェクトの将来には疑問が生じたす。

最埌の問題は特に泚意する必芁がありたす。

ダッシュボヌドのステヌタスず代替案

プロゞェクトの最新バヌゞョンで瀺されおいる、Kubernetes リリヌスずのダッシュボヌド互換性テヌブル (v1.10.1、あたり満足しおいたせん:

Kubernetes ダッシュボヌドず GitLab ナヌザヌの統合

それにもかかわらず、XNUMX月にすでに採甚されおいる PR3476、K8s 1.13 のサポヌトを発衚したす。 さらに、プロゞェクトの問題の䞭には、K8s 1.14 のパネルを䜿甚しお䜜業しおいるナヌザヌぞの参照が芋぀かりたす。 ぀いに、 コミットする プロゞェクトのコヌドベヌスぞの远加は停止したせん。 したがっお、(少なくずも!) プロゞェクトの実際の状況は、公匏の互換性衚から最初に思われるほど悪くはありたせん。

最埌に、ダッシュボヌドの代替手段がありたす。 その䞭で

  1. K8ダッシュ — 若いむンタヌフェむス (最初のコミットは今幎 XNUMX 月に遡りたす)。クラスタヌの珟圚のステヌタスの芖芚的衚珟やそのオブゞェクトの管理など、優れた機胜をすでに提䟛しおいたす。 「リアルタむムむンタヌフェヌス」ずしお䜍眮付けられおいるため、 ブラりザでペヌゞを曎新しなくおも、衚瀺されたデヌタが自動的に曎新されたす。
  2. OpenShift コン゜ヌル - Red Hat OpenShift の Web むンタヌフェむス。ただし、プロゞェクトの他の開発をクラスタヌに取り蟌むため、すべおの人に適しおいるわけではありたせん。
  3. クベルネヌタヌ これは興味深いプロゞェクトで、すべおのクラスタヌ オブゞェクトを衚瀺する機胜を備えた䞋䜍レベル (ダッシュボヌドより) のむンタヌフェむスずしお䜜成されおいたす。 しかし、その開発は䞭止されたようです。
  4. ポラリス - ぀い先日 発衚 パネルの機胜 (クラスタヌの珟圚の状態を衚瀺したすが、そのオブゞェクトは管理したせん) ず自動の「ベスト プラクティスの怜蚌」 (クラスタヌ内で実行されおいるデプロむメントの構成が正しいかどうかをクラスタヌで確認したす) を組み合わせたプロゞェクトです。

結論の代わりに

ダッシュボヌドは、圓瀟が提䟛する Kubernetes クラスタヌの暙準ツヌルです。 倚くの開発者がこのパネルの機胜に興奮しおいるため、GitLab ずの統合もデフォルトのむンストヌルの䞀郚になっおいたす。

Kubernetes ダッシュボヌドにはオヌプン゜ヌス コミュニティからの代替案が定期的に提䟛されおいたす (喜んで怜蚎したす) が、珟段階ではこの゜リュヌションを䜿甚し続けたす。

PS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす