The recommended way to install Keep on Kubernetes is via Helm Chart.
Follow these steps to set it up.
Prerequisites
Helm CLI
See the Helm documentation for instructions about installing helm.
Ingress Controller (Optional)
You can skip this step if:
- You already have ingress-nginx installed.
- You don’t need to expose Keep to the internet/network.
Overview
An ingress controller is essential for managing external access to services in your Kubernetes cluster. It acts as a smart router and load balancer, allowing you to expose multiple services through a single entry point while handling SSL termination and routing rules.
Keep works best with both ingress-nginx and HAProxy Ingress controllers, but you can customize the helm chart for other ingress controllers too.
Nginx Ingress Controller
Check ingress-nginx Installed
You check if you already have ingress-nginx installed:
# By default, the ingress-nginx will be installed under the ingress-nginx namespace
kubectl -n ingress-nginx get pods
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-d49697d5f-hjhbj 1/1 Running 0 4h19m
# Or check for the ingress class
kubectl get ingressclass
NAME CONTROLLER PARAMETERS AGE
nginx k8s.io/ingress-nginx <none> 4h19m
Install ingress-nginx
# simplest way to install
# we set snippet-annotations to true to allow rewrites
# see https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#allow-snippet-annotations
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--set controller.config.allow-snippet-annotations=true \
--set controller.config.annotations-risk-level=Critical \
--namespace ingress-nginx --create-namespace
Verify installation:
kubectl get ingressclass
NAME CONTROLLER PARAMETERS AGE
nginx k8s.io/ingress-nginx <none> 4h19m
Verify if snippet annotations are enabled:
kubectl get configmap -n ingress-nginx ingress-nginx-controller -o yaml | grep allow-snippet-annotations
allow-snippet-annotations: "true"
HAProxy Ingress Controller
Install ingress-haproxy
# simplest way to install
helm upgrade --install haproxy-ingress haproxy-ingress \
--repo https://haproxy-ingress.github.io/charts \
--namespace ingress-haproxy --create-namespace
Verify installation:
kubectl get ingressclass
NAME CONTROLLER PARAMETERS AGE
haproxy haproxy-ingress.github.io/controller <none> 4h19m
Verify if controller is running:
kubectl get pods -n ingress-haproxy -l app.kubernetes.io/instance=haproxy-ingress
NAME READY STATUS RESTARTS AGE
haproxy-ingress-controller-x4n2z 1/1 Running 0 4h19m
Installation
With Ingress-NGINX (Recommended)
# Add the Helm repository
helm repo add keephq https://keephq.github.io/helm-charts
# Install Keep with ingress enabled
helm install keep keephq/keep -n keep --create-namespace
With Ingress-HAProxy (Recommended)
# Add the Helm repository
helm repo add keephq https://keephq.github.io/helm-charts
# Install Keep with ingress enabled
helm install keep keephq/keep -n keep --create-namespace --set global.ingress.className=haproxy
Without Ingress (Not Recommended)
# Add the Helm repository
helm repo add keephq https://keephq.github.io/helm-charts
# Install Keep without ingress enabled.
# You won't be able to access Keep from the network.
helm install keep keephq/keep -n keep --create-namespace \
--set global.ingress.enabled=false
Accessing Keep
Ingress
If you installed Keep with ingress, you should be able to access Keep.
kubectl -n keep get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
keep-ingress nginx * X.X.X.X 80 4h16m
Keep is available at http://X.X.X.X :)
Without Ingress (Port-Forwarding)
Use the following commands to access Keep locally without ingress:
# Forward the UI
kubectl port-forward svc/keep-frontend 3000:3000 -n keep &
# Forward the Backend
kubectl port-forward svc/keep-backend 8080:8080 -n keep &
# Forward WebSocket server (optional)
kubectl port-forward svc/keep-websocket 6001:6001 -n keep &
Keep is available at http://localhost:3000 :)
Configuring HTTPS
Prerequisites
- Domain Name: Example - keep.yourcompany.com
- TLS Certificate: Private key (tls.key) and certificate (tls.crt)
Create the TLS Secret
Assuming:
tls.crt
contains the certificate.
tls.key
contains the private key.
# create the secret with kubectl
kubectl create secret tls keep-tls --cert=./tls.crt --key=./tls.key -n keep
Update Helm Values for TLS
helm upgrade -n keep keep keephq/keep \
--set "global.ingress.hosts[0].host=keep.example.com" \
--set "global.ingress.tls[0].hosts[0]=keep.example.com" \
--set "global.ingress.tls[0].secretName=keep-tls"
Alternatively, update your values.yaml
:
...
global:
ingress:
hosts:
- host: keep.example.com
tls:
- hosts:
- keep.example.com
secretName: keep-tls
...
Uninstallation
To remove Keep and clean up:
helm uninstall keep -n keep
kubectl delete namespace keep