0
votes

I am running a NodeJS image in my Kubernetes Pod, while exposing a specific port (9080), and running Traefik as a side-car container as reverse proxy. How do I specify Traefik route from the Deployment template.

Deployment

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  labels:
    app: web
  name: web-controller
spec:
  replicas: 1
  selector:
     matchLabels:
       app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: "nodeJS-image"
        name: web
        ports:
        - containerPort: 9080
          name: http-server
      - image: "traefik-image"
        name: traefik-proxy
        ports:
        - containerPort: 80
          name: traefik-proxy
        - containerPort: 8080
          name: traefik-ui
        args:
        - --web
        - --kubernetes
1
Could you clarify what you mean by "specify(ing) Traefik route"? That part is not clear to me.Timo Reimann
Namely defining labels such as traefik.frontend.rule=Host:machine-echo.example.com, similar to using Traefik on dockers. In brief, I need Traefik to forward requests to nodeJS-image container exposed at port 9080 within the Pod. Apologies if I am using inaccurate terminology.Khaled
Alright, so I think I know what you mean and added an answer. Let me know if that matches your question or not.Timo Reimann

1 Answers

1
votes

If I understand correctly, you want to forward requests hitting the Traefik container to the Node.js application living in the same pod. Given that the application is configured statically from Traefik's perspective, you can simply mount a proper file provider configuration into the Traefik pod (presumably via a ConfigMap) pointing at the side car container.

The most simple way to achieve this (as documented) is to append the following file provider configuration directly at the bottom of Traefik's TOML configuration file:

[file]

[backends.backend.servers.server]
url = "http://127.0.0.1:9080"
[frontends.frontend]
backend = "backend"
[frontends.frontend.routes.route]
host = "machine-echo.example.com"

If you mount the TOML configuration file into the Traefik pod under a path other than the default one (/etc/traefik.toml), you will also need to pass the --configFile option in the manifest referencing the correct location of the file.

After that, any request hitting the Traefik container on port 80 with a host header of machine-echo.example.com should get forwarded to the Node.js side car container on port 9080.