OpenMediaVaultのkubernetesプラグインで安全なロードバランシングを利用する
OpenMediaVaultとは
OpenMediaVault(OMV)はNASの構築に特化したDebianベースのOSです。TrueNASなどの同様の機能を持つOSは他にもありますが、OMVの特徴として機能追加が簡単に行える「プラグイン」の豊富さがあります。
Kubernetes環境の導入・運用もこのプラグインを利用することで簡単に行えます。
OMVのKubernetesプラグイン
導入はSystem > Plugins
に進んでopenmediavault-k8s
を選択、インストールするだけです。しばらくするとServices > Kubernetes
が追加されます。
初期設定
Services > Kubernetes
に進むと初期設定画面が表示されます。サービスを有効化してsnapshotsの保存先や必要であれば証明書の設定などを済ませます。ダッシュボードアクセス用のトークンをコピーしてOpen UI
をクリック。
認証画面が表示されるので先ほどコピーしたトークンを貼り付けてログインします。
マニフェストのデプロイ、ノードの管理などあらゆる操作がこのダッシュボードから行えます。
ロードバランサー
OMVのKubernetesプラグインではIngressRoute + Traefikを利用したリクエスト転送・ロードバランシング・SSL/TLS対応が可能です。
初期設定ではHTTPの場合は8080ポート、HTTPSの場合は8443ポートでロードバランサが待ち受けています。必要に応じて変更してください。今回はそのまま進めます。
Webアプリケーションのデプロイ
今回はNextjsで構築したアプリケーションをデプロイしていきます。イメージは事前にリポジトリにプッシュ済みです。
マニフェストは以下の通りです。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nextjs-deployment
labels:
app: nextjs
spec:
replicas: 1
selector:
matchLabels:
app: nextjs
template:
metadata:
labels:
app: nextjs
spec:
containers:
- name: nextjs
image: [MY_NEXTJS_IMAGE]:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: NODE_ENV
value: "production"
imagePullSecrets:
- name: regcred
---
apiVersion: v1
kind: Service
metadata:
name: nextjs
labels:
app: nextjs
spec:
ports:
- port: 8080
targetPort: 8080
protocol: TCP
selector:
app: nextjs
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: portal-websecure
namespace: default
spec:
entryPoints:
- websecure
routes:
- match: PathPrefix(`/app`)
kind: Rule
services:
- name: nextjs
port: 8080
tls:
secretName: host-selfsigned-cert
Deployment、Serviceに関してはいつも通りです。8080番ポートでコンテナが待ち受けるように設定していて、selector
はサービスがどのPodにトラフィックをルーティングするかを指定するためのラベルセレクタです。この場合、app: nextjs
というラベルを持つPodが対象になります。
最後のIngressRouteがTraefikによるKubernetesクラスタ内のトラフィックを管理するためのリバースプロキシおよびロードバランサを設定しています。match: PathPrefix(/app)
はURLパスが/app
で始まるリクエストにマッチします。services
はルートされたトラフィックが送信されるサービスを指定します。今回の場合は上で指定したnextjs
サービスです。tls
はTLS/SSL証明書を指定します。この場合、host-selfsigned-cert
という名前のシークレットを指定しています。
ブラウザを開いてhttps://[OMVのIPアドレス]:8443/app
にアクセスするとNextjsアプリケーションが表示されます。
Discussion