Observability는 시스템의 상태를 이해하고, 문제를 진단하며, 성능을 모니터링할 수 있는 능력을 의미한다. 즉 서비스의 상태, 성능, 오류 및 다른 지표들을 수집하고 분석이 필요하다. Istio는 이러한 Observability를 통해 마이크로서비스 구성 요소 간의 복잡한 상호 작용을 보다 쉽게 분석할 수 있도록 도와준다. Istio는 서비스 간 요청 경로 상에 위치하여, 요청을 중재하고 필요한 메트릭을 수집하는 역할을 한다. 이 과정에서 다음과 같은 기능을 제공한다. 1. 메트릭 수집2. 메트릭 추가3. 분산 추적 이제 하나씩 직접 해보면서 알아보자. 만약 에드온을 실행시켰다면 모두 지우자. Data Plane 메트릭Istio를 실행시켰기에 사이드카 프락시가 파드들에 부착된다. 컨테이너의 요..
연쇄적인 장애전파를 막기위한 방법으로 Unhealthy 시스템으로의 트래픽을 제한하는 방법이다. Istio 에 정확히 Circuit breaker 라는 이름의 설정은 없다. 하지만 Circuit breaker 로써 효율적으로 작동할 수 있는 두가지 방법을 제공한다. 1. 커넥션/요청 수 제한 - Fail Fast 전략2. 이상 동작 엔드포인트 제거 (Eviction) 하나씩 구현해보자. 커넥션/요청 수 제한 - Fail Fast 전략 구현응답 요청이 2초 이상 걸리는 서버를 임의로 구축한다. 그 후 DestinationRule을 추가해준다.apiVersion: networking.istio.io/v1beta1kind: DestinationRulemetadata: name: test-drspec: h..
타임 아웃과 리트라이에 대해서 알아보려고 한다. 타임 아웃은 서비스가 요청에 대해 응답하지 않고 기다리는 최대 시간을 의미한다.서비스 간의 통신에서 대기 시간이 길어져 사용자 경험이 저하되는 것을 방지하고, 시스템 자원을 적절히 관리하기 위해 필요하다.리트라이는 실패한 요청에 대해 자동으로 다시 시도하는 기능으로 일시적인 오류로 인해 요청이 실패하는 경우, 요청을 다시 시도함으로써 성공적인 응답을 받을 수 있는 가능성을 높여준다. 구현 자체는 간단하니 하나씩 살펴보자. Timeout 구현VirtualService에서 간단하게 설정해 주면 된다. apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: test-virtual-..
Locality-aware Load Balancing은 요청을 처리할 때 지리상 가까운 인스턴스에 로드 밸런싱해서 응답 시간이 줄어드는 것을 기대할 수 있는 방법이다. Istio에서는 이 기능을 활용하여 다양한 지역의 트래픽을 효과적으로 관리할 수 있다. 물론 나는 Minikube이므로 정확한 환경을 셋티할 수 없지만 라벨링을 통해서 임시적으로 구성해보려고 한다. Locality-aware load balancing 구현구현 자체는 어렵지 않다. 먼저 Deployment에 라벨링을 수정해주자. apiVersion: apps/v1kind: Deploymentmetadata: labels: app: test name: testspec: replicas: 1 selector: matchLa..
Client-side load balancing는 클라이언트에게 endpoint들을 알려주고, 클라이언트가 LB 알고리즘을 선택하게 하도록 하는 방법이다. 이것으로 얻는 이점은 다음과 같다. 1. 중앙집중적인 load balancing을 피할 수 있음2. 불필요한 홉 없이 클라이언트가 직접 요청을 전달할 수 있음 (로드밸런서가 필요 없어짐.) 물론 단점으로는 헬스 체크, 알고리즘이 효율성, 엔드포인트 관리 등이 있지만, 장점도 있으니 알아보자. Client-side load balancing 구현DestinationRule로 구현을 할 수 있는데, Gateway와 VritualService부터 생성하자. apiVersion: networking.istio.io/v1alpha3kind: Gatewaymet..
다양한 트래픽 제어 기법을 제공하여 마이크로서비스 간의 통신을 보다 효율적이고 안정적으로 관리할 수 있다. 이 중에서 4개를 알아볼 예정이고, 상에서는 Routing과 Traffic Shifting을 알아본다. Routing라우팅은 클라이언트 요청을 올바른 서비스나 서비스의 특정 버전으로 보내는 방식이다. 이것은 새롭게 배포한 버전에 클라이언트가 바로 요청을 보내지 않고, 내부에서 테스트한 후에 요청을 보낼 수 있도록 활용할 수 있다. 이전에 사용한 VirtualService와 DestinationRule을 추가하면 된다. 리소스는 다음과 같이 있다고 가정하자. apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata: name: test-gate..
이번에는 Plain TCP와 Ingress Gateway 분리 방법에 대해서 알아보겠다. Plane TCPPlain TCP는 Istio의 서비스 메시에서 TCP 트래픽을 관리하고 제어하는 방법을 의미한다. database (like mysql), mq (like rabbitmq) 등을 expose 할 수 있다. 단 plain TCP를 다룰 때는 istio가 프로토콜의 종류를 알 수 없으므로 retries, circuit breaking, context를 이해해야 하는 기능들은 사용할 수 없다. ingressgateway의 tcp를 보면 아래와 같이 보인다. 31400kubectl get svc istio-ingressgateway -n istio-system \-o jsonpath='{.spec.por..
개요Istio Ingress Gateway는 Istio에서 외부 요청을 내부 시스템으로 전달하는 역할을 하는 구성 요소다. 일반적으로 Kubernetes에서 사용되는 Ingress 리소스와 유사한 개념이지만, Istio에서는 더 많은 기능과 flexibility를 제공한다. - 클러스터의 관문 역할- outside → inside traffic의 인입 처리 담당- Security 가 중요함.- 인입을 위한 룰 매칭 등을 처리- 인입 후에는 inside 서비스로 라우팅도 담당 약어는 다음과 같다. gw : gatewayvs : virtual serviceVIP : virtual IP 나는 minikube를 사용하기에 tunnel을 이용해서 외부 진입점을 생성해야 한다. 그러면 {EXTERNAL-IP}:{..
개요마이크로 서비스 아키텍처로 구성된 서비스가 확장되다 보면, 관리하는 서비스가 많아져 서비스 간의 트래픽, 라우팅 관리가 어려워지는 순간이 찾아오게 된다. 이때 Istio라는 오픈 서비스 메쉬를 도입하면, 상호작용하는 마이크로서비스의 네트워크를 관리하고, 이를 통해 보안, 트래픽 관리, 모니터링 등의 기능을 사용할 수 있다. 따라서 Istio는 애플리케이션 코드와는 독립적으로 이러한 기능을 구현할 수 있도록 도와주며, 개발자는 비즈니스 로직에 집중할 수 있게 해준다. 아키텍처는 다음과 같다. Data Plane Data Plane은 마이크로 서비스와 프록시로 결합된 서비스들로 구성된다. 마이크로 서비스에 배포되어 트래픽을 가로채 모든 트래픽을 통제한다. Data Plane의 Envoy 프록시를 통해서..
크롬을 쓰고 여러 개의 화면을 쓰다 보니 동일한 중복탭이 많이 생기고 가끔 렉이 걸리는 경우가 발생했다. 동일한 중복탭이 생겼을 때 하나를 남기고 모두 닫는 확장 프로그램을 만들었다. 사람들에게 공유하기 위해서는 5$를 내야 하기에 나는 그렇게 하고 싶지는 않기 때문에 그냥 코드를 공유한다. 우선 js를 사용해야 하고, 로직 자체는 아래와 같다. 1. 탭에서 검색했을 때 기존 탭들과 url과 id 비교2. 같은 url이 존재할 경우 모달을 띄우고 닫을 지 말지 확인3. 닫기 할 경우 가장 최근의 탭을 제외하고 모두 닫기 코드 구현은 모달 때문에 2개의 js 파일이 필요하고 우선 현재 열린 탭들의 url을 확인하는 것은 아래와 같다.chrome.tabs.onUpdated.addListener((ta..
사이드 프로젝트를 간단히 진행하면서 쿠버네티스에 익숙해지기 위해 Minikube로 환경을 구성해 보기로 했다. 외부에서 서비스를 노출해야 했지만, Minikube만으로는 이를 해결할 수 없어서 방법을 공유하려고 한다.(minikube 설치는 생략한다.) 인프라 세팅 편리성을 위해서 무료 도메인이 필요한데, 나 같은 경우 무료 도메인 발급 여기에서 무료로 생성한다. 그후에 도메인을 내 IP와 연결해 주면 된다. 그 후에 공유기를 사용하고 있다면, 공유기에서 80이나 ssl을 사용한다면 443 포트를 열어줘야 한다. 나 같은 경우 netis 공유기를 사용하기에 http://192.168.1.1/ 로 접근해서 고급 설정 -> 방화벽에서 80 포트를 허용해 줬다. 다음은 minikube 셋팅이다. mini..