공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지/Service Mesh

ServiceMeshCon 2020 - istio Service Mesh Simplified Beyond a Single Cluster

inspirit941 2022. 11. 10. 15:45
반응형

https://youtu.be/Ol5tNcaQZas

 

istio 공식문서에 있는 MultiCluster 세팅 문서(https://istio.io/latest/docs/setup/install/multicluster/) 해설과 실습.

 

 

발표자:

  • Lin Sun: Senior Technical Member in IBM / istio Project Contributor
  • Sven Mawson: Principle Engineer on Google - working on ServiceMesh-related Technology

 

스크린샷 2022-11-09 오후 2 21 00스크린샷 2022-11-09 오후 2 23 09

 

봄에 있었던 SerivceMeshCon 내용 요약 : istio 구조 단순화

  • istio-system에 있던 여러 컴포넌트 (Mixer, Galley, Citadel, injector) -> pilot 내부 기능으로 통합, istiod로 이름 변경
  • Node Agent도 pilot Agent 내부에서 동작하도록 변경

Multi-Cluster Model Suggested by Istio

스크린샷 2022-11-09 오후 2 21 10

 

Multi-Cluster로 istio 설치하려 할 때, 공식문서에서 안내하는 방식은 크게 두 가지.

  • Control Plane이 두 개 : Replicated Control Plane Model
    • 보통 여기를 선호하는 경우가 많음.
      • Control Plane의 High-Availability 확보가 쉬움
      • 특정 Service가 다른 클러스터의 service로 Expose할 것인지의 여부를 istio Control Plane에서 쉽게 통제할 수 있음.
  • Control Plane이 한 개 : Shared Control Plane Model
    • All Services are shared among clusters.

어떤 방식을 선택하느냐에 따라 작업량이 다름. CoreDNS 세팅 여부 같은 것들.

그래서 istio 재단에서도 Unified Multi-Cluster Model을 제안하고, 각 모델별로 어떤 작업을 해야 하는지 제공하는 게 좋을 거라 생각했음

 

스크린샷 2022-11-09 오후 2 40 31

 

Control Plane

  • 중복 설치해서 Availability를 우선 : Primary
  • Manage 편의성 : Remote

Network

  • 다양한 형태의 Network Topology 지원하려고 함.
  • Flat Network : 모든 service / pod can reach each other
  • Multi-Network : Gateway 사용

Service Visibility

  • Selective? / All visible? 선택 가능

Identity / Trust

  • Trust Within Mesh - istio마다 별도의 Root CA. 같은 mesh 안에서 서로 Trust
  • Multiple Mesh 간 통신에서 상대방과의 Trust 확보

Tenancy

  • cluster 무관, Namespace로 관리
  • cluster 단위로 관리

Control Plane

스크린샷 2022-11-09 오후 2 55 14

 

  • istiod가 설치되어 있으면 Primary Cluster, 없으면 Remote Cluster.
  • 기대하는 수준의 Availability 충족할 만큼 Primary Cluster 세팅해서 쓰면 됨
External Control Plane Model?

스크린샷 2022-11-09 오후 2 56 55

  • istio Control Plane인 istiod를 Mesh Operator 팀이 관리하는 별도의 클러스터에 세팅.
  • Mesh Admin / Mesh Operator를 분리.

DevOps팀이 Mesh Operator가 되어 istiod를 관리하고, Service가 떠 있는 클러스터는 전부 Remote cluster처럼 관리하는 방식.

Network

스크린샷 2022-11-09 오후 3 07 12

 

클러스터가 동일한 Network 내부에 있을 경우, pod to pod, node to node 통신이 직접 연결될 수 있도록 만들 수 있음.

  • 별개의 네트워크에 있는 cluster도 하나의 Service Mesh를 사용하도록 하려면 Gateway 세팅이 필요.

Multi-Primary, in Same Network 세팅하기

스크린샷 2022-11-09 오후 3 08 33

  • 각각의 클러스터에 istio 설치
    • kind.spec.values.global.multiCluster 필드에서 보듯, 두 개의 클러스터 설치할 때 각각 상대편 클러스터의 이름을 지정함
  • remote secret 생성 : 상대편 클러스터의 endpoint Discovery를 위해 필요함

Multi-Primary, Different Network 세팅하기

스크린샷 2022-11-09 오후 3 11 40

 

  • istio 설치 / remote secret까지는 same network 방식과 동일
  • Network Bridge를 담당하는 Gateway 세팅
  • Expose user Service (east cluster Service A가 west cluster Service B와 통신할 수 있도록)
    • Expose 여부는 business Needs에 맞게 선택하면 됨

Primary-Remote, in Same Network

스크린샷 2022-11-09 오후 3 14 47

 

  • Primary Cluster (c1)에는 istio 설치
  • Remote Cluster (c2)의 secret을 c1에 생성 - c1 클러스터에서 c2의 endpoint discovery가 가능하도록
  • Traffic Communication이 가능하도록 c1에 Gateway 설치.
  • expose Istiod on c1 Gateway. c2의 Service B가 gateway -> istiod에 접근할 수 있도록.
    • same network에 있으므로 service A와 service B는 Gateway hop 없이도 통신이 가능함.

Primary-Remote, Different Network

스크린샷 2022-11-09 오후 3 14 54

 

Primary-Remote, Same network과 동일하게 진행한 뒤

  • Expose user Service -> network가 다르므로, Gateway 없이 direct connection이 불가능.

Demo

스크린샷 2022-11-09 오후 3 39 41

 

IBM Cloud / Google Cloud. Multi-Primary Different Network, Primary-Remote Same Network 두 가지.

https://istio.io/latest/docs/setup/install/multicluster/before-you-begin/ 참고.

Multi-Primary, Different Network 예시

root-ca / cert를 두 개의 클러스터에 secret으로 생성, istioOperator로 istio 설치

root-ca, root-cert 생성한 뒤

스크린샷 2022-11-09 오후 3 46 04

 

배포할 두 개의 클러스터의 istio-system ns에 secret을 생성한다.

  • your own CA Cert가 있다면, root-ca, root-cert로 이름을 명명한 뒤 secret으로 배포해야 함.
  • 그래야 istio가 Self-signed Certificate를 생성하지 않는다.

 

스크린샷 2022-11-09 오후 3 49 09

 

istioOperator로 istio 설치.

  • spec.values.global.multiClusters 필드에 상대편 클러스터 이름을 입력했고
  • spec.values.global.network 필드도 cluster1과 cluster2의 값이 다름.

기본적인 istio-ingressgateway와 istiod가 istio-system ns에 설치된다.

 

east-west gateway 설치

 

east-west gateway 생성 시 유의점

  • cluster name, network name, exposing port (on the gateway)
  • 공식문서에 gateway generate script가 있다. 공식문서에 써 있는 대로 mesh, network, cluster 파라미터를 추가해서 yaml을 생성할 경우 아래와 같다.
    • curl https://raw.githubusercontent.com/istio/istio/release-1.12/samples/multicluster/gen-eastwest-gateway.sh | sh -s -- --network network1 --cluster cluster1 --mesh mesh1
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: eastwest
spec:
  revision: ""
  profile: empty
  components:
    ingressGateways:
      - name: istio-eastwestgateway
        label:
          istio: eastwestgateway
          app: istio-eastwestgateway
          topology.istio.io/network: network1
        enabled: true
        k8s:
          env:
            # traffic through this gateway should be routed inside the network
            - name: ISTIO_META_REQUESTED_NETWORK_VIEW
              value: network1
          service:
            ports:
              - name: status-port
                port: 15021
                targetPort: 15021
              - name: tls
                port: 15443
                targetPort: 15443
              - name: tls-istiod
                port: 15012
                targetPort: 15012
              - name: tls-webhook
                port: 15017
                targetPort: 15017
  values:
    gateways:
      istio-ingressgateway:
        injectionTemplate: gateway
    global:
      network: network1
Enable Endpoint Discovery

cluster1에는 cluster2에 접근할 수 있는 remote secret을, cluster2에는 cluster1에 접근할 수 있는 remote secret을 생성한다.

  • 공식문서에서는 istioctl 명령어로 한 번에 등록할 수 있음.

강연에서는

  • GCP Cloud에 Primary-Remote 방식으로 설치한 내용.. GKE로 설치한 결과화면만 표시.
  • BookInfo Service를 v1, v2, v3 각각 별개의 클러스터에 설치해서 IBM Cloud Front -> GCP Review Backend 통신이 되는 것까지 시연.
  • GKE Primary - Remote 클러스터에 review-v3 서비스가 각각 설치되었고, traffic routing에 별다른 설정을 주지 않았으므로 round-robin 방식으로 invoke.

VM Workloads in Istio Model

스크린샷 2022-11-10 오전 10 49 04

 

istio로 Multi-Cluster 설정한 것처럼, k8s가 아니라 VM에서 구동되는 서비스도 istio를 사용해서 연결할 수 있다.

  • WorkloadGroup을 Remote Cluster처럼 생각하면 됨.
    • 자체 istiod 없이, Primary Cluster의 istiod 통제를 받음
    • k8s의 api Server에 Register 필요.

스크린샷 2022-11-10 오전 10 52 23

 

istio 1.8 버전에서부터 도입된 기능

  • Workload Group 생성과 수정을 istioctl 명령어로도 처리할 수 있음
  • VM의 DNS Configuration을 istio에서 처리할 수 있도록 변경
  • VM 등록을 쉽게 할 수 있도록 변경
    • identity boostrapping
    • Auto Registration - auto scaling

스크린샷 2022-11-10 오전 10 57 24

 

스크린샷 2022-11-10 오전 10 58 07

  • istio로 Multi-cluster, multi-cloud mesh 세팅하기가 쉬워졌다.
  • availability / latency 고려해서 istio control plane을 설치하면 됨
  • k8s뿐만 아니라 VM group에도 연결할 수 있다.
반응형