비율 제한
비율 제한 (Rate Limiting)
Linkerd의 비율 제한 기능은 HTTPLocalRateLimitPolicy 리소스로 구성하며, 대상 Server를 참조하는 방식으로 동작해요.
본문
Linkerd의 비율 제한 기능은 HTTPLocalRateLimitPolicy 리소스를 통해 구성하며, 이 리소스는 Server 참조를 가리켜야 해요. 참고로 하나의 Server는 단 하나의 HTTPLocalRateLimitPolicy에서만 참조될 수 있어요.
참고
Server의 기본 accessPolicy 설정은 deny예요. 즉 AuthorizationPolicy가 해당 Server를 가리키지 않으면 기본적으로 트래픽을 거부하게 돼요. 별도의 인증 정책을 선언하지 않고도 Server에 비율 제한 정책을 설정하고 싶다면, accessPolicy를 all-unauthenticated처럼 허용적인 값으로 설정해 주세요.
HTTPLocalRateLimitPolicy 스펙
| 필드 | 값 |
|---|---|
| targetRef | 이 정책이 적용되는 Server에 대한 참조 |
| total.requestsPerSecond | targetRef로 전송되는 모든 트래픽에 대한 전체 비율 제한. 미설정 시 전체 제한은 적용되지 않음 |
| identity.requestsPerSecond | 개별 identity에 대한 공정성. identity별로 그룹화된 각 클라이언트는 이 비율 제한을 적용받음. total.requestsPerSecond도 설정되어 있다면 identity.requestsPerSecond는 total.requestsPerSecond보다 클 수 없음 |
| overrides | 특정 클라이언트에서 오는 트래픽에 대한 오버라이드 배열 |
Overrides
| 필드 | 값 |
|---|---|
| requestsPerSecond | clientRefs에 해당하는 클라이언트에 허용되는 초당 요청 수. total.requestsPerSecond도 설정되어 있다면 각 overrides 항목의 requestsPerSecond는 total.requestsPerSecond보다 클 수 없음 |
| clientRefs.kind | 참조 대상의 종류. 현재는 ServiceAccount만 지원 |
| clientRefs.namespace | 참조 대상의 네임스페이스. 미지정(또는 빈 문자열) 시 정책의 로컬 네임스페이스를 의미 |
| clientRefs.name | 참조 대상의 이름 |
예시
이 예시에서 정책은 web-http Server를 대상으로 하며, 전체 비율 제한 100RPS, identity별 제한 20RPS, 그리고 emojivoto 네임스페이스의 "special-client" ServiceAccount에 대해 25RPS의 오버라이드를 적용해요.
apiVersion: policy.linkerd.io/v1alpha1
kind: HTTPLocalRateLimitPolicy
metadata:
namespace: emojivoto
name: web-rl
spec:
targetRef:
group: policy.linkerd.io
kind: Server
name: web-http
total:
requestsPerSecond: 100
identity:
requestsPerSecond: 20
overrides:
- requestsPerSecond: 25
clientRefs:
- kind: ServiceAccount
namespace: emojivoto
name: special-client