Sidecar Traefik 容器路由到 Kubernetes 中的端口

Side-car Traefik container route to ports in Kuberenets

我是 运行 我的 Kubernetes Pod 中的一个 NodeJS 镜像,同时暴露了一个特定的端口 (9080),运行 Traefik 作为 side-car 容器作为反向代理。如何从部署模板中指定 Traefik 路由。

部署

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

如果我没理解错的话,您想将命中 Traefik 容器的请求转发到位于同一个 pod 中的 Node.js 应用程序。鉴于应用程序是从 Traefik 的角度静态配置的,您可以简单地将适当的文件提供程序配置挂载到指向边车容器的 Traefik pod(大概通过 ConfigMap)。

最简单的实现方式(as documented)是直接在 Traefik 的 TOML 配置文件的底部附加以下文件提供程序配置:

[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"

如果您将 TOML 配置文件挂载到 Traefik pod 中的默认路径(/etc/traefik.toml)以外的路径下,您还需要在清单中传递 --configFile 选项引用文件的正确位置。

在那之后,任何使用 machine-echo.example.com 主机 header 访问端口 80 上的 Traefik 容器的请求都应该转发到端口 9080 上的 Node.js 边车容器。