Ssoon
[7주차] Service Mesh : Traffic Management : Request Timeouts 본문
쿠버네티스 네트워크 스터디 3기
[7주차] Service Mesh : Traffic Management : Request Timeouts
구구달스 2024. 10. 15. 23:45CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 3기
✅ Request Timeouts
클라이언트와 서버 간의 통신에서 요청이 일정 시간 내에 완료되지 않을 경우, 요청을 종료하는 설정을 의미합니다.
- 서비스 안정성: 타임아웃을 설정하면 비정상적으로 오래 걸리는 요청을 조기에 종료할 수 있어, 서버 자원을 효율적으로 사용할 수 있습니다.
- 사용자 경험 개선: 요청이 지연될 때 사용자에게 빠른 피드백을 제공하여 불편함을 줄일 수 있습니다.
- 에러 감지: 타임아웃 설정은 서버의 성능 저하나 오류를 조기에 발견하는 데 도움이 됩니다.
🧿 VirtualService 리소스 정의 (트래픽 라우팅 규칙 설정)
- spec: 이 VirtualService의 세부 설정입니다.
- hosts: 이 VirtualService가 적용될 서비스의 이름을 정의합니다. productpage라는 이름의 서비스에 대해 요청을 처리합니다.
- http: HTTP 트래픽에 대한 라우팅 규칙을 정의합니다.
- route: 클라이언트의 요청을 어떤 서비스로 전달할지를 정의합니다.
- destination: 요청이 전달될 서비스의 정보를 정의합니다.
- host: 요청을 받을 서비스의 이름, 여기서는 productpage입니다.
- subset: 요청이 전달될 서비스의 특정 서브셋(버전)을 정의합니다. 여기서는 v1으로 설정되어 있습니다.
- destination: 요청이 전달될 서비스의 정보를 정의합니다.
- route: 클라이언트의 요청을 어떤 서비스로 전달할지를 정의합니다.
VirtualService 정의는 클라이언트의 모든 HTTP 요청을 각 서비스의 v1 서브셋으로 라우팅합니다.
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# cat virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: details
spec:
hosts:
- details
http:
- route:
- destination:
host: details
subset: v1
---
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl apply -f virtual-service-all-v1.yaml
virtualservice.networking.istio.io/productpage created
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created
virtualservice.networking.istio.io/details created
🧿 VirtualService 리소스 정의 (reviews)
- spec:
- hosts: 이 VirtualService가 적용되는 서비스의 호스트 이름을 정의합니다. 여기서는 reviews라는 서비스입니다.
- http: HTTP 요청에 대한 라우팅 규칙을 정의합니다.
- route: 요청을 어떤 방식으로 라우팅할지를 정의합니다.
- destination: 요청을 보낼 목적지를 정의합니다.
- host: 요청을 전송할 서비스의 이름입니다. 여기서는 reviews.
- subset: 서비스의 특정 버전이나 그룹을 지정합니다. 여기서는 v2 서브셋으로 지정되어 있습니다.
- destination: 요청을 보낼 목적지를 정의합니다.
- route: 요청을 어떤 방식으로 라우팅할지를 정의합니다.
reviews 서비스에 대한 모든 HTTP 요청은 v2 서브셋으로 라우팅
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# # kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
EOF
virtualservice.networking.istio.io/reviews configured
🧿 VirtualService 리소스 정의 (ratings)
- spec:
- hosts: 이 VirtualService가 적용될 서비스의 호스트 이름을 지정합니다. 여기서는 ratings 서비스입니다.
- http: HTTP 요청에 대한 라우팅 규칙을 정의합니다.
- fault: 장애 주입 설정을 정의합니다.
- delay: 요청에 대한 지연을 설정합니다.
- percent: 이 지연이 적용될 요청의 비율을 나타냅니다. 100%는 모든 요청에 적용됨을 의미합니다.
- fixedDelay: 요청이 지연될 시간입니다. 여기서는 2초로 설정되어 있습니다.
- delay: 요청에 대한 지연을 설정합니다.
- route: 지연 후 요청이 전송될 목적지를 정의합니다.
- destination: 요청을 보낼 서비스의 호스트와 서브셋을 정의합니다.
- host: 요청을 전송할 서비스의 이름입니다. 여기서는 ratings.
- subset: 서비스의 특정 버전입니다. 여기서는 v1로 설정되어 있습니다.
- destination: 요청을 보낼 서비스의 호스트와 서브셋을 정의합니다.
- fault: 장애 주입 설정을 정의합니다.
fault를 사용하여 모든 요청에 대해 2초의 지연을 추가하고, 요청을 ratings 서비스의 v1 서브셋으로 라우팅합니다.
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- fault:
delay:
percent: 100
fixedDelay: 2s
route:
- destination:
host: ratings
subset: v1
EOF
virtualservice.networking.istio.io/ratings configured
- 요청에 대해 2초의 지연 확인
🧿 VirtualService 리소스 정의 (reviews)
- spec:
- hosts: 이 VirtualService가 적용될 서비스의 호스트 이름을 지정합니다. 여기서는 reviews 서비스입니다.
- http: HTTP 요청에 대한 라우팅 규칙을 정의합니다.
- route: 요청을 어떤 방식으로 라우팅할지를 정의합니다.
- destination: 요청을 보낼 목적지를 정의합니다.
- host: 요청을 전송할 서비스의 이름입니다. 여기서는 reviews.
- subset: 서비스의 특정 버전이나 그룹을 지정합니다. 여기서는 v2 서브셋으로 지정되어 있습니다.
- destination: 요청을 보낼 목적지를 정의합니다.
- timeout: 요청이 완료되기를 기다리는 최대 시간을 정의합니다. 여기서는 0.5초(500밀리초)로 설정되어 있습니다.
- route: 요청을 어떤 방식으로 라우팅할지를 정의합니다.
요청을 v2 서브셋으로 라우팅하고, 요청 타임아웃을 0.5초로 설정합니다.
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# # kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
timeout: 0.5s
EOF
virtualservice.networking.istio.io/reviews configured
- http timeout 0.5초 설정하지만, 응답 1초 걸리는 이유는, productpage 코드에 reviews 호출 시 timeout 되면 한번 더 재시도하게끔 하드 코딩되어 있음
🧿 virtual-service-all-v1.yaml 파일에 정의된 모든 가상 서비스를 삭제
(⎈|default:N/A) root@k3s-s:~/istio-1.23.2/samples/bookinfo/networking# kubectl delete -f virtual-service-all-v1.yaml
virtualservice.networking.istio.io "productpage" deleted
virtualservice.networking.istio.io "reviews" deleted
virtualservice.networking.istio.io "ratings" deleted
virtualservice.networking.istio.io "details" deleted
'쿠버네티스 네트워크 스터디 3기' 카테고리의 다른 글
[8주차] Cilium CNI : Cilium 이란? (0) | 2024.10.21 |
---|---|
[7주차] Service Mesh : Traffic Management : TCP Traffic Shifting (0) | 2024.10.15 |
[7주차] Service Mesh : Traffic Management : Traffic Shifting (0) | 2024.10.15 |
[7주차] Service Mesh : Traffic Management : Fault Injection (0) | 2024.10.15 |
[7주차] Service Mesh : Traffic Management : Request Routing (0) | 2024.10.15 |
Comments