跳到正文
Træfɪk

Service

概述

服务段中的每个字段代表一种服务类型。也就是说,每个指定服务都必须且只能启用其中一个字段,以定义所创建的服务类型。目前有两种可用类型:LoadBalancer 和 Weighted。

服务器负载均衡器

服务器负载均衡器负责将请求均衡分配到同一服务的各台服务器。

配置示例

声明一个包含两台服务器的服务——使用文件提供者

tcp:
  services:
    my-service:
      loadBalancer:
        servers:
        - address: "xx.xx.xx.xx:xx"
        - address: "xx.xx.xx.xx:xx"
        healthCheck:
          send: "PING"
          expect: "PONG"
          interval: "10s"
          timeout: "3s"
        serversTransport: "customTransport@file"
[tcp.services]
  [tcp.services.my-service.loadBalancer]
    [[tcp.services.my-service.loadBalancer.servers]]
      address = "xx.xx.xx.xx:xx"
    [[tcp.services.my-service.loadBalancer.servers]]
        address = "xx.xx.xx.xx:xx"

    [tcp.services.my-service.loadBalancer.healthCheck]
      send = "PING"
      expect = "PONG"
      interval = "10s"
      timeout = "3s"

    serversTransport = "customTransport@file"
labels:
  - "traefik.tcp.services.my-service.loadBalancer.healthCheck.send=PING"
  - "traefik.tcp.services.my-service.loadBalancer.healthCheck.expect=PONG"
  - "traefik.tcp.services.my-service.loadBalancer.healthCheck.interval=10s"
  - "traefik.tcp.services.my-service.loadBalancer.healthCheck.timeout=3s"
  - "traefik.tcp.services.my-service.loadBalancer.serversTransport=customTransport@file"
{
  "Tags": [
    "traefik.tcp.services.my-service.loadBalancer.healthCheck.send=PING",
    "traefik.tcp.services.my-service.loadBalancer.healthCheck.expect=PONG",
    "traefik.tcp.services.my-service.loadBalancer.healthCheck.interval=10s",
    "traefik.tcp.services.my-service.loadBalancer.healthCheck.timeout=3s",
    "traefik.tcp.services.my-service.loadBalancer.serversTransport=customTransport@file"
  ]
}

配置选项

字段 说明 默认值
servers 服务器声明程序的单个实例。 ""
servers.address 地址选项(IP:Port)指向具体实例。 ""
servers.tls tls 选项决定连接后端时是否使用 TLS。 false
serversTransport serversTransport 支持引用 TCP ServersTransport 配置,用于 Traefik 与服务器之间的通信。如果未指定 serversTransport,将使用 default@internal。 ""
healthCheck 配置健康检查,将不健康的服务器从负载均衡轮转中移除。详见健康检查。

健康检查

healthCheck 选项配置健康检查,将不健康的服务器从负载均衡轮转中移除。 只要能够成功连接目标服务器,Traefik 就会认为该 TCP 服务器健康。 对于高级健康检查,可以指定 send 和 expect 参数来配置 TCP 载荷交换。

要向上传播状态变化(例如此服务的所有服务器均不可用),还必须在此服务的父级启用 HealthCheck。

健康检查机制可用的选项如下:

字段 说明 默认值 必填
port 替换服务器地址中的端口,用作健康检查端点。 否
send 定义健康检查期间向服务器发送的载荷。 "" 否
expect 定义期望服务器返回的响应载荷。 "" 否
interval 定义对健康目标执行健康检查的频率。 30s 否
unhealthyInterval 定义对不健康目标执行健康检查的频率。未定义时,默认为 interval 的值。 - 否
timeout 定义 Traefik 等待健康检查连接的最长时间,超过此时间则认为服务器不健康。 5s 否

加权轮询

服务的加权轮询(简称 WRR)负载均衡器负责按给定权重在多个服务之间均衡分配连接。

此策略仅支持在服务之间执行负载均衡,不支持在服务器之间使用。

支持的提供者

目前可以通过文件提供者定义此策略。

权重

权重必须是非负整数,权重为 0 时会将子服务移出轮转。 声明了负权重的加权服务会被禁用,引用该服务的路由器也不会创建。

tcp:
  services:
    app:
      weighted:
        services:
        - name: appv1
          weight: 3
        - name: appv2
          weight: 1

    appv1:
      loadBalancer:
        servers:
        - address: "xxx.xxx.xxx.xxx:8080"

    appv2:
      loadBalancer:
        servers:
        - address: "xxx.xxx.xxx.xxx:8080"
[tcp.services]
  [tcp.services.app]
    [[tcp.services.app.weighted.services]]
      name = "appv1"
      weight = 3
    [[tcp.services.app.weighted.services]]
      name = "appv2"
      weight = 1

  [tcp.services.appv1]
    [tcp.services.appv1.loadBalancer]
      [[tcp.services.appv1.loadBalancer.servers]]
        address = "private-ip-server-1:8080/"

  [tcp.services.appv2]
    [tcp.services.appv2.loadBalancer]
      [[tcp.services.appv2.loadBalancer.servers]]
        address = "private-ip-server-2:8080/"

健康检查

HealthCheck 为此服务启用自动自健康检查,也就是说,只要有子服务被报告为不可用, 此服务就会获知该状态,并在运行负载均衡算法时考虑它(即忽略不可用的子服务)。 此外,如果此服务的父级也启用了 HealthCheck,此服务会向父级报告任何状态变化。

行为

如果为某个服务启用了 HealthCheck,但其任意后代未启用 HealthCheck,则该服务创建失败。

目前,加权服务的 HealthCheck 只能通过文件提供者定义。

## Dynamic configuration
tcp:
  services:
    app:
      weighted:
        healthCheck: {}
        services:
        - name: appv1
          weight: 3
        - name: appv2
          weight: 1

    appv1:
      loadBalancer:
        healthCheck:
          send: "PING"
          expect: "PONG"
          interval: 10s
          timeout: 3s
        servers:
        - address: "192.168.1.10:6379"

    appv2:
      loadBalancer:
        healthCheck:
          send: "PING"
          expect: "PONG"
          interval: 10s
          timeout: 3s
        servers:
        - address: "192.168.1.11:6379"
## Dynamic configuration
[tcp.services]
  [tcp.services.app]
    [tcp.services.app.weighted.healthCheck]
    [[tcp.services.app.weighted.services]]
      name = "appv1"
      weight = 3
    [[tcp.services.app.weighted.services]]
      name = "appv2"
      weight = 1

  [tcp.services.appv1]
    [tcp.services.appv1.loadBalancer]
      [tcp.services.appv1.loadBalancer.healthCheck]
        send = "PING"
        expect = "PONG"
        interval = "10s"
        timeout = "3s"
      [[tcp.services.appv1.loadBalancer.servers]]
        address = "192.168.1.10:6379"

  [tcp.services.appv2]
    [tcp.services.appv2.loadBalancer]
      [tcp.services.appv2.loadBalancer.healthCheck]
        send = "PING"
        expect = "PONG"
        interval = "10s"
        timeout = "3s"
      [[tcp.services.appv2.loadBalancer.servers]]
        address = "192.168.1.11:6379"

版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证