모두를 위해 준비하다⛵️💡🎉

This needs a (very) little Kubernetes knowledge.


전자상거래 응용 프로그램이 있다고 가정하십시오.이 응용 프로그램은 다음과 같은 구성 요소로 구성되어 있습니다.
  • 제품 서비스 - 이 서비스는 이름, 가격, 재고 등 제품과 관련된 모든 정보를 처리합니다.
  • 송장 서비스 - 이 서비스는 청구서 작성, 결제 여부 추적 등 송장과 관련된 모든 정보를 처리합니다.
  • 알림 서비스 - 이 서비스는 이메일 발송과 같은 알림과 관련된 모든 정보를 처리합니다.
  • Note there can be other services, but for brevity let us stop here.


    전체 세계에서 이 모든 서비스는 같은 응용 프로그램(실행 환경)에서 생활할 것이다.
    따라서 영수증 서비스가 알림 서비스를 호출해야 할 때마다 간단한 방법으로 호출하는 것이 중요하다.
    즉, 송장 서비스는 알림이 시작되고 실행 중인지 확인하고 위치를 찾은 다음 네트워크를 통해 연결을 보내서 응답 복구를 기다릴 필요가 없다.

    마이크로서비스 세계에서 영수증 서비스가 알림 서비스를 호출해야 할 때.
    송장 서비스는 우선 통지 서비스가 사용할 수 있는지 확인해야 한다.(우리는 잠시 이를 imaginary 서비스라고 부른다.)
    알림 서비스를 사용할 수 있다면 송장 서비스는 알림 서비스에 연결하는 방법을 찾아야 합니다(예를 들어 DNS 이름).
    그리고 영수증 서비스는 통지 서비스에 요청을 보낼 것이다.

    TL;DR In the microservices world, there is a network between the services to communicate.

    imaginary서비스는Service registers라고 합니다.
    서비스가 시작되거나 종료되면 서비스 등록에 위치 및 상태가 공지됩니다.
    다른 서비스(예를 들어 invoice에 연결하고자 하는 모든 서비스(예를 들어 notification는 서비스 레지스터를 조회하여 어떻게 연결하고 어디에 연결하는지 정보를 얻은 다음에 연결합니다.
    하지만 서비스가 갑자기 종료되면 무슨 일이 일어날지.서비스가 서비스 레지스터에 정확한 shut down 신호를 보낼 수 없습니다.이것은 서비스 레지스터가 특정 서비스가 시작되었지만 아직 시작되지 않았다는 것을 의미한다.
    이런 상황을 피하기 위해서는 health checkers 이 필요하다.
    건강검진자는 핑 서비스에 가거나 수시로 건강검진자에게 상태를 알려준다.
    이 핑들은 heart beat💗.
    서비스가 심장 박동을 멈출 때마다(일반적으로 네트워크 손실을 보상하는 한도값 수준 이후), 서비스는 닫힌 것으로 표시됩니다.
    앞으로 서비스 등록 센터에 요청할 경우 건강 서비스의 주소를 얻을 수 있습니다.
    마이크로서비스가 정상적으로 작동하기 위해서는 건강 검사자와 서비스 등록 센터가 고가용 구성 요소가 필요합니다.

    TL;DR In the microservices world, we will need service registry and health checkers for our application to work properly.


    이 글에서, 우리는 Istio가 무엇인지, 그리고 그것이 어떻게 이 문제를 해결하는지 보게 될 것이다.
    Istio를 깊이 연구하기 전에 우리는 이해해야 한다service mesh.

    무엇이 서비스 격자입니까?


    istio 사이트의 서비스 격자에 대한 설명은 다음과 같습니다.

    The term service mesh used to describe the network of microservices that make up such applications and the interactions between them.


    마이크로서비스 세계에는 서로 다른 용량으로 운영되는 서비스의 화신이 많이 있을 것이다.그것들은 분포식이다.이 서비스들은 반드시 서로 연결되어야 한다.서비스 격자는 서로 연결된 서비스와 상호작용을 묘사한다.

    그럼 Isio는 뭐 해요?


    요컨대 Istio는 다음과 같은 작업을 수행합니다.

    microservice의 모든 서비스는 로그 기록, 모니터링, 네트워크 (부하 균형 등) 를 포함하는 일반적인 서비스를 가지고 있습니다.Istio는 이를 공공 서비스로 응용 프로그램에서 추출합니다.이렇게 하면 응용 프로그램이 이런 문제를 걱정할 필요가 없다.
    Istio는 서비스 격자 내에서 다음 서비스를 수행합니다.
  • 연결
  • 연결서비스망
  • 내 서비스
  • 트래픽 관리에 유용
  • 자동 로드 밸런싱
  • 제어
  • 서비스 진입 제어 요청
  • 라우팅 규칙
  • 재시도
  • 페일오버
  • 장애 주입 및 기타
  • 보안
  • 서비스 통신에 대한 보호 서비스
  • 승인 및 검증 요청
  • 관찰
  • 지표, 로그 및 추적 자동 수집
  • 가장 중요한 것은 이 모든 것을 완성했다는 것이다 without any changes in the application code.
    뭐!!!그러나 Istio는 어떻게 코드 변경 없이 그것을 실현합니까?
    Istio는 Sidecar pattern를 통해 구현됩니다.

    그러면 사이드카 모드는 무엇입니까?


    For now, Istio runs on top of Kubernetes.


    Kubernetes가 무엇인지 알고 싶으면 댓글을 보세요.
    Kubernetes 컨텍스트의 Pod에는 하나 이상의 컨테이너가 포함되어 있습니다.Istio는 프로그램의 용기와 함께pod에 용기를 연결합니다.응용 프로그램의 용기와 함께 실행되는 이 용기를 sidecar 라고 부른다.
    사이드카 용기를 연결하는 이런 모델(사이드카를 오토바이에 연결하는 것처럼)을 sidecar pattern 이라고 부른다.
    사이드카 모드here에 대한 더 많은 정보를 확인하세요.
    네, 그럼 이 사이드카는 Istio가 약속을 실현하는 데 어떻게 도움을 줍니까?
    계속 읽어...

    ISIO는 어떻게 작동합니까?


    Istio 용어에서 이 사이드카 용기를 proxy 용기라고 부른다.프록시 용기는 응용 프로그램 용기와 함께 생존하고 사라진다.프록시 용기는 현재 응용 프로그램 용기에 들어갈 수 있는 요청을 결정합니다.

    Wait, does it mean your application's performance will be reduced? Whether the latency is increased? - The short answer is yes.


    이 프록시 용기를 추가하면 지연이 증가하고 성능이 떨어진다.
    그러나 프록시 용기는 Envoy 프록시를 사용합니다.

    Envoy is an L7 proxy and communication bus designed for large modern service oriented architectures. - Envoy website


    특사는 C++로 작성된 것으로 무게가 가볍고 무게가 가볍다⚡️스피드
    이것은 모든 서비스 호출이 증가하는 비용이 매우 적다는 것을 의미한다.

    Wanna know more about envoy proxy - check out here.



    이 에이전트들은 응용 프로그램에서 발생하는 모든 통신을 책임진다.
    알겠습니다. 현재 사이드카 에이전트가 있습니다. 요청을 제어할 수 있습니다. 하지만 에이전트에 규칙이나 설정을 어떻게 제공하나요?우리는 어떻게 사이드카 에이전트에서 모든 원격 측정 데이터를 수집합니까?만약 이것이 너의 문제라면, 우리는 정확한 궤도에 있을 것이다.
    sidecar 에이전트의 원격 측정 데이터는 혼합기에서 수집합니다.
    혼합기는 크로스 서비스 격자 응용 정책과 액세스 제어도 책임진다.

    Mixer + Envoy proxy => Data plane



    혼합기와 프록시를 Istio라고 한다data plane.

    TL;DR The envoy proxy is responsible for proxying the request and responses into the container. The mixer on the other hand is responsible for enforcing access control and usage policies across the service mesh and collecting the telemetry data from the envoy proxies (and other services).


    Kubernetes와 유사하게 Istio도 있습니다control plane.제어 평면은 brain🧠 Istio의
    이것이 바로 우리가 정책/설정/규칙을 정의하는 곳이다.이러한 규칙은 동적 응용으로 어떠한 정지 시간도 없다.
    Istio의 제어 평면은 다음 섹션으로 구성됩니다.
    조종사👩‍✈️
  • 성🏛
  • 주방🛒

  • 파일럿


    조종사는 말 그대로 특사가 내비게이션 요청을 대리하는 것을 돕는 조종사다.
    그들은 특사 대리인에게 다음과 같은 정보를 제공한다.
  • 서비스 검색
  • 교통관리
  • 신축성
  • 우리는 yaml 파일을 통해 Istio에 라우팅 규칙을 제공합니다.규칙을 적용한 후.조종사는 이 규칙을 얻어 운행할 때 특사 대리에게 제공할 것이다.이것은 우리로 하여금 설정 변경을 유연하게 동적으로 응용할 수 있게 한다.
    pilot를 통해 우리는 루트 규칙을 사용하여 서비스 발견 옵션을 제공할 수 있습니다.URI가 /review인 경우 다음과 같이 포트reviews에서 실행되는 9080 응용 프로그램으로 이동하십시오.
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
     http:
      - match:
        - uri:
            exact: /review
        route:
        - destination:
            host: reviews
            port:
              number: 9080
    
    VirtualServicehere에 대한 자세한 내용을 확인하십시오.
    우리는 pilot를 사용하여 서비스의 데이터를 관리할 수 있다.예를 들어 우리는 요청 루트의 90%를 응용 프로그램의 v1, 나머지 10% 루트를 아래의 무서운 v2 루트로 옮길 수 있다.
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v1
          weight: 90
        - destination:
            host: reviews
            subset: v2
          weight: 10
    
    우리는 또 목표의 규칙을 지정할 수 있다.
  • 어떤 유형의 부하 평형기 사용
  • 최대 접속 수
  • 시간 초과
    기타 규칙은 다음과 같다.
  • apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: destall
      namespace: testns
    spec:
      # DNS name, prefix wildcard, short name relative to context
      # IP or CIDR only for services in gateways
      host: destall.default.svc.cluster.local
      trafficPolicy:
        loadBalancer:
          simple: ROUND_ROBIN
        connectionPool:
          tcp:
            maxConnections: 99
            connectTimeout: 6s
    
    DestinationRule에 대한 자세한 내용을 확인하십시오.
    다양한 로드 밸런서 옵션here
    참고: 수백 가지 다른 구성이 있을 수 있습니다.한 편의 박문에서 이 점을 설명하기는 매우 어렵다.

    TL;DR Pilot은 특사 에이전트에 구성 데이터를 제공합니다.


    부엌


    Istio에 제공되는 모든 구성은 적절한 검증을 거쳐야 합니다.검증된 규칙이나 구성을 수신하고 처리해야 합니다.마지막으로 처리된 데이터는 주파수와 혼합기에 보내야 한다.
    Galley는 구성을 검증, 수신, 처리하고 Pilot 및 Mixer에 전송합니다.
    Istio는 Kubernetes에서 뛴다.Galley는 또한 Kubernetes에서 사용자 정보를 얻고 이를 Istio 구성 요소에 제공하는 것을 책임진다.

    TL;DR Galley is the validation and distribution agent that validates and distributes configuration data to Pilot and Mixer.


    성곽


    Citadel은 서비스 통신 및 엔드 유저 인증을 위한 암호화 서비스를 담당합니다.Citadel을 사용하면 특사 에이전트에 대한 보안 정책을 구현할 수 있습니다.

    TL;DR Citadel is the policy provider for the proxies.


    그런 다음 Citadel 및 Pilot 정보가 있는 에이전트는 트래픽을 제어, 연결(제한 및 라우팅)하고 서비스를 보호합니다.
    본고가 당신을 간략하게 소개할 수 있기를 바랍니다Istio.Istio에 대한 자세한 내용은 istio.io 를 참조하십시오.
    Kubernetes에 Istio check-out post를 사용하여 예시 프로그램을 배치해야 합니다.
    만약 당신이 이 문장을 좋아한다면, 좋아하거나 평론을 남겨 주세요.❤️
    글에 오류/누락된 부분이 있다고 생각되면 언제든지 댓글을 작성하십시오.)
    너는 나를 따라와도 된다.

    좋은 웹페이지 즐겨찾기