Weave GitOps Dashboard導入 - おうちでGitOpsシリーズ投稿4/6
こちらはおうちでGitOpsシリーズの4つ目のポストです。
前回まででGitOps環境も出来上がり、またmetallbも導入して、Kubernetesクラスタ外からもアクセスできるサービスを用意できるようになりました。
今回はflux用のWebインタフェース、Weave GitOps Dashboardを導入していきます。
本シリーズのお約束
-
Kubernetes
Cluster on 3 nodes (2 raspberry pi4 - arm64, and 1 amd64 fanless mini PC)-
flannel
for networking -
flux
as a GitOps tool - metallb for
LoadBalancer
service type implementation
-
- 1 or more machine running
Docker
- serving
GitLab
(Used for GitOps central repository) - serving
Nginx
(Reverse proxy to provide access to GitLab and other web services to be created on Kubernetes Cluster) - serving
Unbound
(DNS resolver for machines on LAN)
- serving
- public DNS domain + SSL/TLS certification (for example, Let's Encrypt) recommended
- they are all
mydomain.net
in the series - replace
mydomain.net
with your own DNS domain to follow through
- they are all
More on Docker - Series Top: Dockerで作るおうちLAN遊び場 シリーズ1/7
Interested in getting your own DNS domain?
gitops cliのインストール
https://docs.gitops.weave.works/docs/installation/weave-gitops/
公式ドキュメントを参考に、早速インストールを進めていきます。ドキュメントで触れられているKubernetesクラスタとfluxの用意は済んでいますので、gitops cliのインストールへと進んでいきます。
以下がインストール手順の中で紹介されているコマンドですが、実行するシステムによってはuname
あたりの出力がリリースに用意されているファイル名と合致しないかもしれません。その場合はレポジトリのリリースページで実際のファイル名を確認してきて直接指定しましょう。
curl --silent --location "https://github.com/weaveworks/weave-gitops/releases/download/v0.24.0/gitops-$(uname)-$(uname -m).tar.gz" | tar xz -C /tmp
sudo mv /tmp/gitops /usr/local/bin
gitops version
インストールするもののレポジトリはコマンド内のURLの通りです。
gitops cliでマニフェスト生成
前回flux create
コマンドでgit sourceやkustomizationマニフェストを生成しましたが、今回はgitops create
でファイルを生成していきます。
例によって"flux-config"レポジトリの/clusters/my-cluster
配下に配置しますので、直接出力してしまいましょう。
なお、ダッシュボードにログインする際のユーザ名はadmin、パスワードはここで設定するパスワードとなります。
cd {flux-config directory location}
# password for "admin" user to logon to the web dashboard
PASSWORD="<your password>"
# create YAML manifest file
gitops create dashboard ww-gitops \
--password=$PASSWORD \
--export > clusters/my-cluster/weave-gitops-dashboard.yaml
# commit & push
git add -A && git commit -m "Add Weave GitOps Dashboard"
git push
こうして作られたyamlファイルの中身は、HelmRepository
そしてHelmRelease
のマニフェストとなります。それぞれgitレポジトリとkustomizationのように、ソースと実行レシピのようなイメージで捉えておけばよいと思います。
少し待つと、flux-systemネームスペース上に新たなpodが実行されていることが確認できます。
❯ kubectl get pods -n flux-system
NAME READY STATUS RESTARTS AGE
helm-controller-cbc9bcf8f-7b5sx 1/1 Running 2 (14d ago) 20d
kustomize-controller-69fcfd4f8c-l6tn7 1/1 Running 4 (13d ago) 20d
notification-controller-8469b59fc7-ndlmb 1/1 Running 4 (13d ago) 20d
source-controller-7f47858959-8927x 1/1 Running 2 (14d ago) 20d
ww-gitops-weave-gitops-5685d4fd-5ln79 1/1 Running 0 7d7h
ダッシュボードにアクセスするためのService追加
Weave GitOps公式ドキュメントではこの後、port-forwardという機能でダッシュボードにアクセスできるようにするのですが、このシリーズでは引き続きmetallbを活用していきます。
公式ドキュメントにすぐ答えが書いてありますが、Kubernetesクラスタ上で今実行されているpodで使用しているポート番号を確認すると、9001であることが分かります。またラベルはweave.works/app:weave-gitops-oss
などがセットされていることが分かります。
# check port number
❯ kubectl get pod ww-gitops-weave-gitops-5685d4fd-5ln79 -o=jsonpath='{.spec.containers[0].ports}' -n flux-system
[{"containerPort":9001,"name":"http","protocol":"TCP"}]%
# check labels used
❯ kubectl get pod ww-gitops-weave-gitops-5685d4fd-5ln79 -o=jsonpath='{.metadata.labels}' -n flux-system
{"app.kubernetes.io/instance":"ww-gitops","app.kubernetes.io/name":"weave-gitops","app.kubernetes.io/part-of":"weave-gitops","pod-template-hash":"5685d4fd","weave.works/app":"weave-gitops-oss"}%
それでは/clusters/my-cluster/weave-gitops-svc-lb.yaml
といったファイルを用意してレポジトリにpushしましょう。内容は以下の通りです。先程のgitops create
ですでにダッシュボードのpodができているのですが、それにアクセスするためのLoadBalancerタイプのserviceを作るということで、.spec.selector
で合致するラベルを指定しています。
---
apiVersion: v1
kind: Service
metadata:
name: weave
namespace: flux-system
labels:
weave.works/app: weave-gitops-oss
app.kubernetes.io/instance: ww-gitops
app.kubernetes.io/name: weave-gitops
spec:
type: LoadBalancer
selector:
weave.works/app: weave-gitops-oss
app.kubernetes.io/instance: ww-gitops
app.kubernetes.io/name: weave-gitops
ports:
- name: http-9001
protocol: TCP
port: 9001
targetPort: 9001
すると、kubectl get svc -n flux-system
で新たに作られた"weave"というサービスが192.168.1.xのExternal-IPを使っていることが分かります。以下のような出力の場合、http://192.168.1.200:9001
でダッシュボードにアクセスできるようになっています。
❯ kubectl get svc -n flux-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
notification-controller ClusterIP 10.98.188.167 <none> 80/TCP 33d
source-controller ClusterIP 10.98.116.158 <none> 80/TCP 33d
weave LoadBalancer 10.103.134.70 192.168.1.200 9001:32377/TCP 33d
webhook-receiver ClusterIP 10.103.219.65 <none> 80/TCP 33d
ww-gitops-weave-gitops ClusterIP 10.97.101.48 <none> 9001/TCP 33d
Reverse proxyやDNSのセットアップ
Kubernetesクラスタ上に立ち上げたサービスへのアクセスは以上でできましたが、シリーズ冒頭で用意してあるリバースプロキシとDNSも使ってhttpsアクセスできるようにしましょう。
このシリーズの次のポストでhttpsアクセスのセットアップまでスクリプトなどで無理やり自動化する作業を紹介する予定なのですが、今回はひとつひとつ手動でやっていきます。
Nginxの設定
シリーズ1つ目のポストより、DockerでNginxを実行しているマシンには以下のようなディレクトリ・ファイルが残っていると思います。
ここに新たにconf/nginx/weave.conf
を追加しましょう。
❯ tree
.
|-docker-compose.yml
|-conf
| |-nginx
| | |-gitlab.conf
| | |-weave.conf # NEW
| |-cert
| | |-fullchain.pem
| | |-privkey.pem
| | |-ssl-base.conf
| | |-ssl-dhparams.pem
| | |-ssl-wild.conf
| |-nginx.conf
内容は以下の通りで、ほぼgitlab.conf
のコピーです。証明書はワイルドカードですのでサーバ名と流し先を変更するだけで完成です。
- server_name: weave.mydomain.net
- upstream: 192.168.1.x (Weaveのserviceで使っているIPアドレス)
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
server_name weave.mydomain.net;
# docker resolver - optional for docker nginx upstream/proxy
resolver 127.0.0.11 valid=30s;
# upload size
client_max_body_size 10000M;
# ssl
include /etc/nginx/cert/ssl-base.conf;
include /etc/nginx/cert/ssl-wild.conf;
location / {
proxy_http_version 1.1;
set $upstream_weave 192.168.1.200:9001;
proxy_pass http://$upstream_weave;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
docker compose restart nginx
すればもうリバースプロキシの準備は終わりです。
Unbound DNSの設定
DNSについても以下のようなディレクトリ・ファイルが既にあると思います。
❯ tree
.
|-config
| |-a-records.conf
|-docker-compose.yml
config/a-records.conf
ファイルに一行追加しましょう。
local-data: "gitlab.mydomain.net. IN A 192.168.1.55"
local-data: "weave.mydomain.net. IN A 192.168.1.55"
こちらもdocker compose restart
で準備完了です。
ダッシュボードへのhttpsアクセス
もうこれだけで完成です!
https://weave.mydomain.net
でブラウザはDockerで動かしているNginxへアクセスし、対応するweave.conf
の内容に従って通信をKubernetesクラスタ上で走っているWeave GitOpsダッシュボードへ流します。
次回は、Kubernetesクラスタ上で実行している各serviceに関してリバースプロキシとDNSの準備も自動で済ませるというセットアップをしていきます。また次回の投稿でもさっと触れますが、今回追加したDNSレコードもNginxのWeave用リバースプロキシサーバ設定もせっかく追加したのですが巻き戻しておきましょう。。。
Discussion