지역 가중치 분산
지역 가중치 분산 (Locality weighted distribution)
이 가이드를 따라 지역(locality) 간 트래픽 분산을 설정해 볼게요.
출처: Istio 문서
본문
이 가이드를 따라 지역(locality) 간 트래픽 분산을 설정해 볼게요.
진행하기 전에 시작하기 전에의 단계를 반드시 완료했는지 확인해요.
이 태스크에서는 region1의 zone1에 있는 curl pod를 HelloWorld 서비스로 요청을 보내는 소스로 사용할 거예요. Istio에 다음과 같은 지역 간 분산을 설정할 거예요:
| Region | Zone | % of traffic |
|---|---|---|
region1 |
zone1 |
70 |
region1 |
zone2 |
20 |
region2 |
zone3 |
0 |
region3 |
zone4 |
10 |
Istio는 pod가 실행 중인 노드에서 지역(locality)을 읽어요. topology locality 라벨을 사용하면 그것을 덮어쓸 수 있어요.
가중치 분산 구성 (Configure Weighted Distribution)
다음을 구성하는 DestinationRule을 적용해요:
HelloWorld서비스에 대한 아웃라이어 감지(Outlier detection). 분산이 제대로 동작하려면 이 설정이 필요해요. 특히, 서비스의 엔드포인트가 언제 비정상인지 사이드카 프록시가 알 수 있게 해줘요.- 위 표에서 설명한 대로
HelloWorld서비스에 대한 가중치 분산(Weighted Distribution).
$ kubectl --context="${CTX_PRIMARY}" apply -n sample -f - <<EOF
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: helloworld
spec:
host: helloworld.sample.svc.cluster.local
trafficPolicy:
loadBalancer:
localityLbSetting:
enabled: true
distribute:
- from: region1/zone1/*
to:
"region1/zone1/*": 70
"region1/zone2/*": 20
"region3/zone4/*": 10
outlierDetection:
consecutive5xxErrors: 100
interval: 1s
baseEjectionTime: 1m
EOF
분산 확인 (Verify the distribution)
curl pod에서 HelloWorld 서비스를 호출해요:
$ kubectl exec --context="${CTX_R1_Z1}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sSL helloworld.sample:5000/hello
이 명령을 여러 번 반복해서, 각 pod의 응답 수가 이 가이드 상단 표의 예상 비율과 일치하는지 확인해요.
축하해요! 지역 분산(locality distribution) 설정을 성공적으로 완료했어요!
다음 단계
이 태스크에서 사용한 리소스와 파일 정리를 진행해요.