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

타임아웃

원문 보기 위키 갱신

타임아웃 (Timeouts)

Linkerd 프록시의 타임아웃 동작과, Service 또는 HTTPRoute/GRPCRoute 주석으로 요청·응답·유휴 타임아웃을 구성하는 방법을 설명해요.

출처: Linkerd Timeouts

본문

Linkerd는 요청을 중단하기 전 최대 시간을 제한하는 타임아웃으로 구성할 수 있습니다.

타임아웃은 클라이언트 측 동작이므로 Linkerd 프록시의 아웃바운드 쪽에서 수행됩니다1. 이렇게 구성한 타임아웃은 재시도할 수 없다는 점을 알아두세요. 이 타임아웃에 도달하면 요청은 재시도되지 않아요. 재시도 가능한 타임아웃은 재시도 구성의 일부로 설정할 수 있습니다.

타임아웃 구성하기

타임아웃은 Kubernetes Service 리소스 또는 Service를 부모로 가진 HTTPRoute나 GRPCRoute에 설정할 수 있는 일련의 주석으로 구성됩니다. 클라이언트 프록시는 그 Service 또는 라우트에 대한 요청이 타임아웃을 초과하면 실패시킵니다. 라우트 리소스에 타임아웃 구성 주석이 있으면 부모 Service의 모든 타임아웃 구성 주석을 덮어씁니다.

Warning

이렇게 구성한 타임아웃은 ServiceProfile과 호환되지 않습니다. 어떤 Service에 ServiceProfile이 정의되어 있으면 프록시는 ServiceProfile의 타임아웃 구성을 사용하고 타임아웃 주석은 무시해요.

  • timeout.linkerd.io/request: 전체 요청-응답 스트림이 진행 중일 수 있는 최대 시간.
  • timeout.linkerd.io/response: 백엔드 응답이 진행 중일 수 있는 최대 시간.
  • timeout.linkerd.io/idle: 상태와 무관하게 스트림이 유휴 상태일 수 있는 최대 시간.

HTTPRoute 리소스에 request timeout 필드가 설정되어 있으면 그것이 timeout.linkerd.io/request 타임아웃으로 사용됩니다. 하지만 필드와 주석이 둘 다 지정되면 주석이 우선합니다.

예시 (Examples)

`kind: HTTPRoute
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
  name: schlep-default
  namespace: schlep
  annotations:
    timeout.linkerd.io/request: 2s
    timeout.linkerd.io/response: 1s
spec:
  parentRefs:
    - name: schlep
      kind: Service
      group: core
      port: 80
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: "/"
`

[1] pod 내부에서 클러스터의 나머지 부분으로의 연결을 처리하는 프록시 부분. ↩︎

더 알아보기 (Learn more)

  • 재시도와 타임아웃 (Retries and timeouts)
  • 재시도 레퍼런스