Redirect HTTPS to HTTP/2, get 5XX while pod is running fine

I have a Kubernetes setup where Traefik as IngressRoute. All incoming requests are HTTPS, and the pod is running a node.js server. My setup works fine when a pod is running HTTP/1, but returns 5XX when I am running HTTP/2 server. I use kubectl port-forward [pod] [port] then cUrl the pod, which response with 200.

Traefik version: 2.0.6

Here is the Traefik log

"GET / HTTP/2.0" 500 21 "-" "-" 1223719 "[pod]@kubernetescrd" "http://[ip]:[port][" 2ms

And my IngressRoute config as follow

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
...
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`[host]`)
      kind: Rule
      services:
        - name: [servicename]
          port: 80
  tls:
    secretName: [secret]

I also tried to use schema with h2c, it does not work neither.
Service config as follow:

apiVersion: v1
kind: Service
metadata:
...
spec:
  ports:
    - protocol: TCP
      name: web
      port: 80
      targetPort: [port]
...

Is there anyone can help me with this issue?