'Traefik on Kubernetes (GCE/GKE) behind GCE Load Balancer
I've implemented Traefik on Kubernetes following the User Guide. That gives me an ingress-controller and I was able to create an ingress and the traefik-ingress-service listening on 80 and 8080.
I've also setup a "gce" ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-ingress
namespace: kube-system
annotations:
kubernetes.io/ingress.class: "gce"
spec:
tls:
- secretName: fasedge-tls
backend:
serviceName: traefik-ingress-service
servicePort: 80
What this did was create a GCE Load Balancer which terminates my TLS and should forward all requests to the traefik-ingress-service which is of type NodePort.
GCE Load Balancers require a healthcheck. The default is to the path "/". I thought traefik had a "/ping" so I changed the healthcheck to that. But no matter what I do, I can't get the healthcheck to pass and therefor, my GCE Load Balancer is unhealthy and won't forward any requests to traefik.
Some references say to change the Traefik lb service from NodePort to LoadBalancer but that should be doing the exact same thing as my above Ingress except my Ingress handles the SSL termination.
Anyone else do it this way?
Solution 1:[1]
The way to get health check to work on the gce load balancer is to add an argument to the traefik container. The --ping
and --ping.entrypoint=http
lets me setup a gce health check to the /ping
path.
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: traefik-ingress-controller
namespace: kube-system
labels:
app: traefik-ingress-controller
spec:
replicas: 1
selector:
matchLabels:
app: traefik-ingress-controller
template:
metadata:
labels:
app: traefik-ingress-controller
name: traefik-ingress-controller
spec:
serviceAccountName: traefik-ingress-controller
terminationGracePeriodSeconds: 60
containers:
- name: traefik-ingress-controller
image: "traefik:v1.5.2"
args:
- --api
- --kubernetes
- --ping
- --ping.entrypoint=http
Solution 2:[2]
With:
- traefik: 2.6.3
- traefik-helm-chart: 10.19.4
I had to add to override the following in my helm installation:
ports:
traefik:
healthchecksPort: 8000
service:
type: NodePort
additionalArguments:
- "--ping.entrypoint=web"
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Nicola Ben |
Solution 2 | mango |