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
봄에 있었던 SerivceMeshCon 내용 요약 : istio 구조 단순화
- istio-system에 있던 여러 컴포넌트 (Mixer, Galley, Citadel, injector) -> pilot 내부 기능으로 통합, istiod로 이름 변경
- Node Agent도 pilot Agent 내부에서 동작하도록 변경
Multi-Cluster Model Suggested by Istio
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을 제안하고, 각 모델별로 어떤 작업을 해야 하는지 제공하는 게 좋을 거라 생각했음
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
- istiod가 설치되어 있으면 Primary Cluster, 없으면 Remote Cluster.
- 기대하는 수준의 Availability 충족할 만큼 Primary Cluster 세팅해서 쓰면 됨
External Control Plane Model?
- istio Control Plane인 istiod를 Mesh Operator 팀이 관리하는 별도의 클러스터에 세팅.
- Mesh Admin / Mesh Operator를 분리.
DevOps팀이 Mesh Operator가 되어 istiod를 관리하고, Service가 떠 있는 클러스터는 전부 Remote cluster처럼 관리하는 방식.
Network
클러스터가 동일한 Network 내부에 있을 경우, pod to pod, node to node 통신이 직접 연결될 수 있도록 만들 수 있음.
- 별개의 네트워크에 있는 cluster도 하나의 Service Mesh를 사용하도록 하려면 Gateway 세팅이 필요.
Multi-Primary, in Same Network 세팅하기
- 각각의 클러스터에 istio 설치
- kind.spec.values.global.multiCluster 필드에서 보듯, 두 개의 클러스터 설치할 때 각각 상대편 클러스터의 이름을 지정함
- remote secret 생성 : 상대편 클러스터의 endpoint Discovery를 위해 필요함
Multi-Primary, Different Network 세팅하기
- 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
- 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
Primary-Remote, Same network과 동일하게 진행한 뒤
- Expose user Service -> network가 다르므로, Gateway 없이 direct connection이 불가능.
Demo
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 예시
- https://istio.io/latest/docs/setup/install/multicluster/before-you-begin/#configure-trust
- https://istio.io/latest/docs/tasks/security/cert-management/plugin-ca-cert/
- https://istio.io/latest/docs/setup/install/multicluster/multi-primary_multi-network/
root-ca / cert를 두 개의 클러스터에 secret으로 생성, istioOperator로 istio 설치
root-ca, root-cert 생성한 뒤
배포할 두 개의 클러스터의 istio-system ns에 secret을 생성한다.
- your own CA Cert가 있다면, root-ca, root-cert로 이름을 명명한 뒤 secret으로 배포해야 함.
- 그래야 istio가 Self-signed Certificate를 생성하지 않는다.
istioOperator로 istio 설치.
- spec.values.global.multiClusters 필드에 상대편 클러스터 이름을 입력했고
- spec.values.global.network 필드도 cluster1과 cluster2의 값이 다름.
기본적인 istio-ingressgateway와 istiod가 istio-system ns에 설치된다.
east-west gateway 설치
- https://istio.io/latest/docs/setup/install/multicluster/multi-primary_multi-network/#install-the-east-west-gateway-in-cluster1
- 양쪽 클러스터에 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
istio로 Multi-Cluster 설정한 것처럼, k8s가 아니라 VM에서 구동되는 서비스도 istio를 사용해서 연결할 수 있다.
- WorkloadGroup을 Remote Cluster처럼 생각하면 됨.
- 자체 istiod 없이, Primary Cluster의 istiod 통제를 받음
- k8s의 api Server에 Register 필요.
istio 1.8 버전에서부터 도입된 기능
- Workload Group 생성과 수정을 istioctl 명령어로도 처리할 수 있음
- VM의 DNS Configuration을 istio에서 처리할 수 있도록 변경
- VM 등록을 쉽게 할 수 있도록 변경
- identity boostrapping
- Auto Registration - auto scaling
- istio로 Multi-cluster, multi-cloud mesh 세팅하기가 쉬워졌다.
- availability / latency 고려해서 istio control plane을 설치하면 됨
- k8s뿐만 아니라 VM group에도 연결할 수 있다.
'학습일지 > Service Mesh' 카테고리의 다른 글
istioCon 2022 - Understanding New istio Telemetry API (0) | 2023.03.20 |
---|---|
istioCon 2021 - What envoy hears when Istio Speaks (0) | 2023.02.03 |
KubeCon 2019 - Istio Multi-Cluster Service Mesh Patterns Explained (0) | 2022.11.02 |
istio 개념 정리 (3) - mTLS Security (0) | 2022.10.29 |
Deview 2021 - istio/Envoy로 Multi-IDC L7 로드밸런서 만들기 (0) | 2022.10.22 |