Otra de las capacidades que nos ofrece Flux es la posibilidad de conectarse con diferentes sistemas para el envío de notificaciones cuando algo ocurre en la configuración de nuestro clúster. Esto suele ser muy útil ya que nos permite estar informados sin tener que estar atentos. Hoy quiero mostrarte cómo podemos integrar estas notificaciones con Microsoft Teams.
Crear canal en Teams
Desde el punto de vista de Teams, lo que necesitas es un canal desde el cual notificarás a los miembros del mismo de los cambios. Si todavía no tienes uno puedes crearlo a través de la sección Teams, haciendo clic en el botón inferior llamado Join or create a team y seleccionando en el lado derecho Create team:
Para este ejemplo utilizamos la opción From Scratch y lo dejamos en modo Privado, para que se necesario solicitar el acceso. En mi caso le he dado el nombre Flux Notifications.
Ahora, en el mismo canal General accedemos a los tres puntos que aparecen en el lado derecho superior y vamos a la opción Connectors.
En ella tendrás uno llamado Incoming WebHook, que es el que necesita Flux para poder mandar las notificaciones.
Hacemos clic en él para añadirlo y, una vez hecho, volvemos a entrar en esta sección, donde ahora en lugar de poner Add pone Configure.
Haciendo clic de nuevo sobre este, elige un nombre, en mi caso ha sido flux notifications, y haz clic en el botón Create. Al cabo de unos instantes obtendrás la URL de tu WebHook:
Copia la misma y resérvala para después.
Crear un cluster de Kubernetes
Ahora que ya tienes un canal de Teams donde publicar los eventos que vayan ocurriendo en Flux, lo siguiente que necesitas es un clúster de Kubernetes. En mi caso voy a usar AKS para alojarlo. Puedes crear uno fácilmente con los siguientes comando:
# Variables
ASK_NAME="flux-loves-teams"
RESOURCE_GROUP="flux-notifications-via-teams"
LOCATION="northeurope"
# Create a resource group
az group create --name $RESOURCE_GROUP --location $LOCATION
# Create a AKS cluster
az aks create --resource-group $RESOURCE_GROUP --name $ASK_NAME --node-count 1 --generate-ssh-keys
Configurar Flux
Si bien es cierto que ya tenemos en preview la integración nativa de Flux con AKS, en este artículo vamos a configurarlo como te conté en el primer artículo que escribí sobre esta herramienta:
# Configure flux
export GITHUB_TOKEN=<YOUR_GITHUB_TOKEN>
export GITHUB_USER=<YOUR_GITHUN_USER>
flux bootstrap github \
--owner=$GITHUB_USER \
--repository=flux-teams-notifications \
--branch=main \
--path=./clusters/$ASK_NAME \
--personal
git clone https://github.com/$GITHUB_USER/flux-teams-notifications.git
cd flux-teams-notifications
Configurar notificaciones en Flux
Para poder enviar notificaciones fuera de Flux, primero necesitas decirle a dónde. Es por ello que lo siguiente que necesitas es crear un proveedor de alertas, el cual se conectará con nuestro Teams. Antes de crearlo debes generar un secreto que almacene la URL del WebHook que guardaste anteriormente:
# Create a secret with MS Teams webhook
WEBHOOK="<WEBHOOK_URL>"
kubectl create secret generic teams-webhook --from-literal=address=$WEBHOOK -n flux-system
Ahora crea el proveedor con el siguiente comando:
# Create a flux configuration for notifications
flux create alert-provider teams \
--type msteams \
--secret-ref teams-webhook \
--export > ./clusters/$ASK_NAME/teams-provider.yaml
Por último, necesitas alguna alerta por la cual serás notificado. En este ejemplo voy a crear una que nos informará cada vez que ocurra algo con los recursos de tipo GitRepository o Kustomization en el namespace flux-system:
# Create an alert
flux create alert flux-teams-notifications \
--provider-ref teams \
--event-severity info \
--event-source Kustomization/flux-system,GitRepository/flux-system \
--export > ./clusters/$ASK_NAME/teams-alert.yaml
Guarda los cambios en el repo que supervisa Flux para su configuración:
git add .
git commit -m "change type for msteams"
git push
flux get kustomizations -w
y espera a que se materialicen los cambios:
flux get kustomizations -w
Para comprobar que tanto el proveedor y la alerta están configuradas correctamente puedes lanzar estos dos comandos:
# Check the alert provider is configured
flux get alert-providers
# Check the alert is configured
flux get alerts
Probar que las notificaciones funcionan
Ahora, para probar que las notificaciones funcionan correctamente, podemos crear una configuración para un repositorio git:
# Create apps dir
mkdir -p ./clusters/$ASK_NAME/apps
# Create a source git
flux create source git kustomize-demo \
--url=https://github.com/0GiS0/kustomize-demo \
--branch=main \
--interval=30s \
--export > ./clusters/$ASK_NAME/apps/kustomize-demo.yaml
git add .
git commit -m "Create git source configuration"
git push
Al hacer esto, al cabo de unos instances, podrás ver un par de mensajes en el canal:
Lo mismo ocurriría cuando trabajas con las personalizaciones:
# Create a Kustomization
flux create kustomization kustomize-demo \
--source=kustomize-demo \
--path="./prod" \
--prune=true \
--interval=5m \
--export > ./clusters/$ASK_NAME/apps/kustomize-demo-prod.yaml
git add .
git commit -m "Create a kustomization"
git push
Se añadirán dos nuevas notificaciones a tu canal de Teams 😃
¡Saludos!