Describe the bug
First of all, appreciate the effort you've put into this project. It's helped a lot. I consider it to be a mini Knative.
With that out of the way, I'll share my issue - Recently, I've upgraded Traefik to version v3.0.4. Since then, we've been noticing weird behaviors with Sablier. Essentially, sometimes the middleware just doesn't work. Instead of forwarding the client to the loading screen (I'm using the dynamic strategy), it forwards it directly to the Service. Then, because there are no available replicas and Traefik's allowEmptyServices is set to true, Traefik just returns 503 Service Unavailable with a no service available body.
I've been debugging for a short while and one thought I had is that maybe Sablier was failing to update the sessions in-memory. So I tried restarting the deployment and surprisingly, this made everything go back to normal for a while. But then the same thing happened again.
Another weird thing I noticed is that even though I'm using a PersistentVolume to store Sablier's state, the container only accesses the file on start, and never again. I was able to cat the state file and noticed that even active deployments/sessions had incorrect expiresAt timestamps. For some reason, Sablier doesn't access the file after the server starts.
I've set the log level to trace, but I didn't see any helpful logs either. Here's my configuration:
# ...
containers:
- name: main
image: acouvreur/sablier:1.8.0-beta.21
args:
- start
- --provider.name=kubernetes
- --storage.file=/data/sablier.json
- --sessions.default-duration=30m
- --sessions.expiration-interval=5m
- --strategy.dynamic.custom-themes-path=/themes
- --strategy.dynamic.default-theme=psh
- --server.port=10000
#* Logging levels: panic, fatal, error, warn, info, debug, trace
- --logging.level=trace
volumeMounts:
- name: data
mountPath: /data
- name: themes
mountPath: /themes
readinessProbe:
httpGet:
path: /health
port: 10000
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 5
resources:
requests:
memory: 64Mi
cpu: "50m"
limits:
memory: "128Mi"
ports:
- containerPort: 10000
volumes:
- name: data
persistentVolumeClaim:
claimName: sablier-data
- name: themes
configMap:
name: sablier-custom-themes
items:
- key: psh.html
path: psh.html
Sablier Service (on Traefik's namespace):
apiVersion: v1
kind: Service
metadata:
name: sablier
namespace: traefik
labels:
app.kubernetes.io/component: sablier
app.kubernetes.io/instance: sablier-0
app.kubernetes.io/version: 1.7.0
app.kubernetes.io/name: sablier
app.kubernetes.io/part-of: traefik
spec:
selector:
app.kubernetes.io/instance: sablier-0
ports:
- port: 10000
targetPort: 10000
protocol: TCP
And here's a sample Traefik Middleware CRD:
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: dummy-project-depl-sablier
namespace: test-devops
spec:
plugin:
sablier:
dynamic:
displayName: dummy-project-depl
refreshFrequency: 10s
showDetails: true
theme: psh
names: deployment_test-devops_dummy-project-depl-node-deployment_1
sablierUrl: http://sablier:10000
sessionDuration: 15m
Traefik logs do not show any clear errors - I only see normal request logs that return HTTP 200.
Context
- Sablier version: 1.7.0, 1.8.0-beta.21
- Provider: Kubernetes 1.29.7 (Google Kubernetes Engine
v1.29.7-gke.1104000)
- Reverse proxy: Traefik v3.0.4 (Kubernetes CRD provider)
- Sablier running inside a container? Yes, as a Kubernetes Deployment
Expected behavior
Being forwarded to Sablier's wait screen from the dynamic strategy.
Additional context
Add any other context about the problem here.
Describe the bug
First of all, appreciate the effort you've put into this project. It's helped a lot. I consider it to be a mini Knative.
With that out of the way, I'll share my issue - Recently, I've upgraded Traefik to version
v3.0.4. Since then, we've been noticing weird behaviors with Sablier. Essentially, sometimes the middleware just doesn't work. Instead of forwarding the client to the loading screen (I'm using the dynamic strategy), it forwards it directly to the Service. Then, because there are no available replicas and Traefik'sallowEmptyServicesis set to true, Traefik just returns503 Service Unavailablewith ano service availablebody.I've been debugging for a short while and one thought I had is that maybe Sablier was failing to update the sessions in-memory. So I tried restarting the deployment and surprisingly, this made everything go back to normal for a while. But then the same thing happened again.
Another weird thing I noticed is that even though I'm using a
PersistentVolumeto store Sablier's state, the container only accesses the file on start, and never again. I was able tocatthe state file and noticed that even active deployments/sessions had incorrectexpiresAttimestamps. For some reason, Sablier doesn't access the file after the server starts.I've set the log level to
trace, but I didn't see any helpful logs either. Here's my configuration:Sablier Service (on Traefik's namespace):
And here's a sample Traefik Middleware CRD:
Traefik logs do not show any clear errors - I only see normal request logs that return
HTTP 200.Context
v1.29.7-gke.1104000)Expected behavior
Being forwarded to Sablier's wait screen from the dynamic strategy.
Additional context
Add any other context about the problem here.