본문 바로가기
WIKI 기술 지식 베이스

Traefik TCP 서비스 문서

원문 보기 위키 갱신

출처: Traefik TCP Services Documentation

본문

Service

일반

서비스 섹션의 각 필드는 한 종류의 서비스를 나타내요. 즉, 지정된 각 서비스에 대해 어떤 종류의 서비스가 생성되는지 정의하려면 필드 중 하나(단 하나만)를 활성화해야 해요. 현재 사용 가능한 두 종류는 LoadBalancer 와 Weighted 에요.

Servers 로드 밸런서

servers 로드 밸런서는 동일한 서비스의 서버들 사이에서 요청을 균형 있게 분배하는 역할을 해요.

설정 예시

두 서버로 서비스 선언하기 -- 파일 프로바이더 사용

구조화 (YAML)

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"

구조화 (TOML)

[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

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

{
  "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 | address 옵션(IP:Port)은 특정 인스턴스를 가리켜요. | "" | | servers.tls | tls 옵션은 백엔드와 다이얼할 때 TLS를 사용할지 여부를 결정해요. | false | | serversTransport | serversTransport 는 Traefik과 서버 사이의 통신을 위한 TCP ServersTransport 구성을 참조할 수 있게 해줘요. serversTransport를 지정하지 않으면 default@internal 이 사용돼요. | "" | | healthCheck | 비정상 서버를 로드 밸런싱 순환에서 제거하는 헬스 체크를 구성해요. 자세한 내용은 HealthCheck를 참고하세요. | |

헬스 체크

healthCheck 옵션은 비정상 서버를 로드 밸런싱 순환에서 제거하는 헬스 체크를 구성해요.

Traefik은 대상 서버에 대한 연결이 성공하는 한 TCP 서버를 정상으로 간주해요.

고급 헬스 체크를 위해 send 와 expect 매개변수를 지정해 TCP 페이로드 교환을 구성할 수 있어요.

상태 변경(예: 이 서비스의 모든 서버가 다운됨)을 위로 전파하려면 이 서비스의 상위 서비스에도 HealthCheck가 활성화되어 있어야 해요.

헬스 체크 메커니즘에 사용할 수 있는 옵션은 다음과 같아요:

| 필드 | 설명 | 기본값 | 필수 | | port | 헬스 체크 엔드포인트의 서버 주소 포트를 대체해요. | | 아니요 | | send | 헬스 체크 중에 서버로 보낼 페이로드를 정의해요. | "" | 아니요 | | expect | 서버로부터 기대하는 응답 페이로드를 정의해요. | "" | 아니요 | | interval | 정상 대상에 대한 헬스 체크 호출 빈도를 정의해요. | 30s | 아니요 | | unhealthyInterval | 비정상 대상에 대한 헬스 체크 호출 빈도를 정의해요. 정의하지 않으면 interval 값으로 기본 설정돼요. | - | 아니요 | | timeout | Traefik이 서버를 비정상으로 간주하기 전에 헬스 체크 연결을 기다릴 최대 기간을 정의해요. | 5s | 아니요 |

Weighted Round Robin

Weighted Round Robin(별칭 WRR) 서비스 로드 밸런서는 제공된 가중치를 기준으로 여러 서비스 사이에서 연결을 균형 있게 분배하는 역할을 해요.

이 전략은 서버 사이가 아니라 서비스 사이에서만 로드 밸런싱에 사용할 수 있어요.

지원되는 프로바이더

이 전략은 현재 파일 프로바이더로 정의할 수 있어요.

가중치

가중치는 음수가 아닌 정수여야 하며, 0 가중치는 하위 서비스를 순환에서 제외해요.

음수 가중치를 선언하는 가중 서비스는 비활성화되고, 이를 참조하는 라우터는 생성되지 않아요.

구조화 (YAML)

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"

구조화 (TOML)

[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가 활성화되어 있는데 그 하위 서비스 중 하나에 활성화되어 있지 않으면 서비스 생성이 실패해요.

Weighted 서비스의 HealthCheck는 현재 파일 프로바이더로만 정의할 수 있어요.

구조화 (YAML)

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

구조화 (TOML)

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

더 알아보기 (Learn more)