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 중 하나예요.