Helm chart for deploying Zentinel - a high-performance, security-focused reverse proxy built on Cloudflare's Pingora.
# Add the repository (when published)
helm repo add zentinel https://charts.zentinelproxy.io
helm repo update
# Install with default values
helm install zentinel zentinel/zentinel
# Install with custom configuration
helm install zentinel zentinel/zentinel -f values.yaml
git clone https://github.com/zentinelproxy/zentinel-helm.git
cd zentinel-helm
helm install zentinel .
See values.yaml for the full list of configuration options.
replicaCount : 2
config :
raw : |
listeners {
listener "http" {
address "0.0.0.0:80"
protocol "http"
}
}
routes {
route "api" {
matches { path-prefix "/api" }
upstream "backend"
}
}
upstreams {
upstream "backend" {
target "my-service:8080"
health-check { path "/health" }
}
}
Using an Existing ConfigMap
config :
existingConfigMap : my-zentinel-config
configKey : zentinel.kdl
autoscaling :
enabled : true
minReplicas : 2
maxReplicas : 10
targetCPUUtilizationPercentage : 80
serviceMonitor :
enabled : true
interval : 30s
ingress :
enabled : true
className : nginx
annotations :
cert-manager.io/cluster-issuer : letsencrypt-prod
hosts :
- host : proxy.example.com
paths :
- path : /
pathType : Prefix
tls :
- secretName : proxy-tls
hosts :
- proxy.example.com
Parameter
Description
Default
replicaCount
Number of replicas
1
image.repository
Image repository
ghcr.io/zentinelproxy/zentinel
image.tag
Image tag
"" (uses appVersion)
image.pullPolicy
Image pull policy
IfNotPresent
Parameter
Description
Default
config.raw
Raw KDL configuration
""
config.existingConfigMap
Use existing ConfigMap
""
config.configKey
Key in ConfigMap
zentinel.kdl
Parameter
Description
Default
service.type
Service type
ClusterIP
service.httpPort
HTTP port
80
service.httpsPort
HTTPS port
443
service.metricsPort
Metrics port
9090
Parameter
Description
Default
resources.limits.cpu
CPU limit
1000m
resources.limits.memory
Memory limit
512Mi
resources.requests.cpu
CPU request
100m
resources.requests.memory
Memory request
128Mi
Parameter
Description
Default
securityContext.runAsNonRoot
Run as non-root
true
securityContext.runAsUser
User ID
65534
securityContext.readOnlyRootFilesystem
Read-only root
true
Parameter
Description
Default
autoscaling.enabled
Enable HPA
false
podDisruptionBudget.enabled
Enable PDB
false
serviceMonitor.enabled
Enable Prometheus ServiceMonitor
false
ingress.enabled
Enable Ingress
false
Mount TLS certificates using extraVolumes and extraVolumeMounts:
extraVolumes :
- name : tls-certs
secret :
secretName : zentinel-tls
extraVolumeMounts :
- name : tls-certs
mountPath : /etc/zentinel/certs
readOnly : true
Then reference in your configuration:
config :
raw : |
listeners {
listener "https" {
address "0.0.0.0:443"
protocol "https"
tls {
cert "/etc/zentinel/certs/tls.crt"
key "/etc/zentinel/certs/tls.key"
}
}
}
Apache-2.0