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

ServersTransport TCP

원문 보기 위키 갱신

출처: ServersTransport TCP

본문

ServersTransport

ServersTransport를 사용하면 Traefik과 TCP 서버 사이의 전송(transport)을 구성할 수 있어요.

설정 예시

serversTransport 선언하기:

구조화 (YAML)

tcp:
  serversTransports:
    mytransport:
      dialTimeout: "30s"
      dialKeepAlive: "20s"
      terminationDelay: "200ms"
      tls:
        serverName: "example.com"
        certificates:
          - "/path/to/cert1.pem"
          - "/path/to/cert2.pem"
        insecureSkipVerify: true
        rootCAs:
          - "/path/to/rootca.pem"
        peerCertURI: "spiffe://example.org/peer"
        spiffe:
          ids:
            - "spiffe://example.org/id1"
            - "spiffe://example.org/id2"
          trustDomain: "example.org"

구조화 (TOML)

[tcp.serversTransports.mytransport]
  dialTimeout = "30s"
  dialKeepAlive = "20s"
  terminationDelay = "200ms"

  [tcp.serversTransports.mytransport.tls]
    serverName = "example.com"
    certificates = ["/path/to/cert1.pem", "/path/to/cert2.pem"]
    insecureSkipVerify = true
    rootCAs = ["/path/to/rootca.pem"]
    peerCertURI = "spiffe://example.org/peer"

  [tcp.serversTransports.mytransport.tls.spiffe]
    ids = ["spiffe://example.org/id1", "spiffe://example.org/id2"]
    trustDomain = "example.org"

서비스에 serversTransport 연결하기:

구조화 (YAML)

tcp:
  services:
    Service01:
      loadBalancer:
        serversTransport: mytransport

구조화 (TOML)

## Dynamic configuration
[tcp.services]
  [tcp.services.Service01]
    [tcp.services.Service01.loadBalancer]
      serversTransport = "mytransport"

Labels

labels:
  - "traefik.tcp.services.Service01.loadBalancer.serversTransport=mytransport"

Tags

{
  // ...
  "Tags": [
    "traefik.tcp.services.Service01.loadBalancer.serversTransport=mytransport"
  ]
}

설정 옵션

| 필드 | 설명 | 기본값 | 필수 | | serverstransport. dialTimeout | 백엔드 TCP 서비스에 다이얼할 때의 타임아웃을 정의해요. 0이면 타임아웃이 없어요. | 30s | 아니요 | | serverstransport. dialKeepAlive | 활성 네트워크 연결에 대한 keep-alive 프로브 사이의 간격을 정의해요. | 15s | 아니요 | | serverstransport. terminationDelay | 종료 시퀀스를 시작한 후 프록시가 양쪽 연결을 완전히 종료할 시간 한도를 설정해요. 음수 값은 마감 기한이 없음을 의미해요. 자세한 내용은 여기에서 확인하세요. | 100ms | 아니요 | | serverstransport. proxyProtocol | Proxy Protocol 구성을 정의해요. 비어 있는 proxyProtocol 섹션은 Proxy Protocol 버전 2를 활성화해요. | | 아니요 | | serverstransport. proxyProtocol.version | Traefik은 TCP 서비스에서 PROXY Protocol 버전 1과 2를 지원해요. 자세한 내용은 여기에서 확인하세요. | 2 | 아니요 | | serverstransport. tls | TLS 구성을 정의해요. 비어 있는 tls 섹션은 TLS를 활성화해요. | | 아니요 | | serverstransport. tls .serverName | SNI에 사용될 서버 이름을 구성해요. | | 아니요 | | serverstransport. tls .certificates | mTLS용 클라이언트 인증서로 설정될 인증서 목록(파일 경로 또는 데이터 바이트)을 정의해요. | | 아니요 | | serverstransport. tls .insecureSkipVerify | 서버의 인증서 체인과 호스트 이름을 검증할지 여부를 제어해요. | false | 아니요 | | serverstransport. tls .rootCAs | 서버 인증서 검증 시 사용할 루트 인증 기관을 정의해요. (mTLS 연결용). | | 아니요 | | serverstransport. tls. peerCertURI | 서버 인증서 검증 중 SAN URI와 대조할 URI를 정의해요. | "" | 아니요 | | serverstransport. tls.spiffe | SPIFFE 구성을 정의해요. 비어 있는 spiffe 섹션은 SPIFFE를 활성화해요(모든 SPIFFE ID 허용). | | 아니요 | | serverstransport. tls.spiffe .ids | SPIFFE ID를 허용해요. SPIFFE TrustDomain보다 우선해요. | | 아니요 | | serverstransport. tls.spiffe .trustDomain | SPIFFE 신뢰 도메인을 허용해요. | "" | 아니요 |

SPIFFE

SPIFFE를 사용해 Traefik과 백엔드 사이의 연결을 보호하려면 먼저 설치 구성(예전에는 정적 구성이라고 불렸어요)에서 SPIFFE를 활성화해야 한다는 점에 유의하세요.

terminationDelay

클라이언트와 서버 사이의 프록시로서 어느 한쪽(예: 클라이언트 쪽)이 연결에 대한 쓰기 능력을 종료하기로 결정할 수 있어요(즉 FIN 패킷 발행).

프록시는 그 의도를 다른 쪽에 전파해야 하므로, 그런 일이 발생하면 프록시도 다른 쪽(예: 백엔드 쪽)과의 연결에서도 동일하게 수행해요.

하지만 어떤 이유로든(잘못된 구현이나 악의적인 의도) 다른 쪽이 결국 동일하게 수행하지 않으면 연결이 반열림(half-open) 상태로 남아 원하는 만큼 오랫동안 자원을 잠글 수 있어요.

이를 위해 프록시는 이 종료 시퀀스에 들어가자마자 양쪽 연결을 완전히 종료하는 데 마감 기한을 설정해요.

종료 지연(termination delay)은 그 마감 기한을 제어해요.

음수 값은 무한한 마감 기한을 의미해요(즉 연결이 프록시 자체에 의해 완전히 종료되지 않음).

proxyProtocol.version

Traefik은 TCP 서비스에서 PROXY Protocol 버전 1과 2를 지원해요.

serversTransport에 proxyProtocol.version 을 설정해 구성할 수 있어요.

이 옵션은 사용할 프로토콜 버전을 지정해요. 1 또는 2 중 하나예요.

더 알아보기 (Learn more)