LoginSignup
0
0

[k8s] Flux alertsでfluxの通知がSlackに送られるようにしてみた

Last updated at Posted at 2023-12-27

はじめに

前回は External Secret OperatorとVaultを連携してkubernetesのsecret基盤を整えました。

今回は flux notificationを使ってfluxの通知がslackに送られるようにしていきたいと思います。

完成品は Github 上に公開してありますので参考程度にどうぞ
https://github.com/piny940/infra/tree/main/kubernetes

環境

OS:
Ubuntu22.04

kubeadm:

$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.2", GitCommit:"89a4ea3e1e4ddd7f7572286090359983e0387b2f", GitTreeState:"clean", BuildDate:"2023-09-13T09:34:32Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}

flux:

$ flux version
flux: v2.2.0
distribution: flux-v2.2.0
helm-controller: v0.37.0
image-automation-controller: v0.37.0
image-reflector-controller: v0.31.1
kustomize-controller: v1.2.0
notification-controller: v1.2.2
source-controller: v1.2.2

前提

  • flux の helm controller・kustomize controller が動作している
  • External Secretが動作している
  • fluxのPodはflux-systemという名前のnamespaceで動いている

Slackの設定

Slack APIをでCreate New Appをし、fluxの通知を送るためのSlack Appを作成します。

作成したらOAuth & PermissionScopes > Bot Token ScopesからOAuth Scopeを追加します。今回はwebhookを用いてメッセージを送信するため、incoming-webhookを追加しました。
image.png

Install AppからチャンネルにSlack Appをインストールします。インストールしたらWebhook URLをコピーしてvault等に置いておきましょう。

External Secretを作成

外部に配置したSecretを読めるよう、External Secretを定義します。External Secret以外を使っている場合はそれぞれの方法に従ってください。

flux-alerts/external-secret.yamlに次のように記述します。

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: slack-webhook-url
  namespace: flux-system
spec:
  secretStoreRef:
    name: vault-secret-store
    kind: ClusterSecretStore
  refreshInterval: 1m
  data:
    - secretKey: address
      remoteRef:
        key: flux
        property: slack-webhook-url

spec.secretStoreRefにはClusterSecretStore (あるいはSecretStore)の名前を記述します。また、spec.data[].remoteRefにはSlackのWebhook URLへのパスを指定します。

Provider, Alertを作成

flux-alerts/provider.yamlに次のように記述します。

apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
  name: slack-bot
  namespace: flux-system
spec:
  type: slack
  secretRef:
    name: slack-webhook-url

flux-alerts/slack-alerts.yamlに次のように記述します。

apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
  name: slack-alert
  namespace: flux-system
spec:
  summary: "Flux alert"
  eventMetadata:
    env: "production"
    cluster: "cluster"
    region: "asia/japan"
  providerRef:
    name: slack-bot
  eventSeverity: info
  eventSources:
    - kind: GitRepository
      name: "*"
    - kind: Kustomization
      name: "*"
    - kind: HelmRepository
      name: "*"
    - kind: HelmRelease
      name: "*"

kustomization.yamlにこれらを登録すればfluxの通知がslackに送られるようになります。

最後に

今回はflux notificationを用いてfluxの通知がslackに送られるようにしました。
次回はkubernetesクラスタ上でDBサーバーを立てていこうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0