Service Mesh

Istio - (2) Istio 설치(EKS)

Operation CWAL 2021. 3. 27. 17:01

AWS EKS

EKS는 AWS에서 제공하는 'K8s as a Service'로 사용자가 쉽게 K8s 클러스터를 생성할 수 있다. 구체적인 개념과 사용법은 필자가 작성해놓은 페이지들이 있으므로  참고하기 바란다. 따라서 EC2 SSH Key 생성 및 awscli, eksctl, kubectl 등의 설치 과정은 생략하도록 하겠다.

 

Amazon EKS Tutorial - Part.1

Kubernetes on AWS AWS에서 Kubernetes 클러스터를 구축 및 운영하는 방법은 다양하다. EC2 인스턴스로부터 k8s를 직접 설정하거나 Kops를 통해 구축을 자동화하되 사용자가 직접 운영하는 방식, 그리고 EKS

cwal.tistory.com

EKS 클러스터 생성

아래 명령어를 실행 후 15~20분 정도 기다리면 'ap-northeast-2' region에 'eks-from-eksctl'라는 이름으로 새로운 EKS 클러스터가 추가된 것을 확인할 수 있다.

eksctl create cluster \
    --name eks-from-eksctl \
    --version 1.19 \
    --region ap-northeast-2 \
    --nodegroup-name workers \
    --node-type t3.large \
    --nodes 1 \
    --nodes-min 1 \
    --nodes-max 2 \
    --ssh-access \
    --ssh-public-key eks-access \
    --managed

다음 명령어로 현재 EKS 클러스터의 상태를 확인해보자. VPC, Subnet 및 Kubernetes 버전, Pod CIDR 등을 확인할 수 있다.

aws eks describe-cluster --name eks-from-eksctl --region ap-northeast-2

kubectl 명령어로 확인했을 때, Worker node는 아래와 같이 1개가 존재한다. 클러스터 생성시 '--nodes' 옵션이 1이므로 당연한 결과이다.

EKS 클러스터 setup은 완료하였으니, 이제부터 본격적으로 Istio를 설치해보자.

Istio 설치

다음 명령어를 통해 현재 경로에 Istio 관리툴인 isctioctl을 설치할 수 있다. 2021-03-27 기준으로 가장 최신 버전인 1.9.2로 진행하였다.

curl -L https://istio.io/downloadIstio | sh -
cd istio-1.9.2
echo "export PATH=$PWD/bin:$PATH" >> ~/.bash_profile
source ~/.bash_profile

istioctl 명령어를 입력했을 때, 다음과 같은 메시지가 나오면 정상적으로 설치된 것이다.

다음은 istioctl을 사용하여 K8s 클러스터에 Istio를 설치할 차례다. Istio는 미리 정의된 config profile을 통해 어떤 component를 설치할지 선택할 수 있다. 

학습 목적이므로 demo 프로필을 선택하여 모든 Core component(istiod, ingress/egress gateway)를 설치하겠다.  Istio v1.7부터 Add-on(ex: Kiali, Jaeger, Prometheus)은 사용자가 직접 설치해야 하며, demo 프로필을 선택하더라도 포함되지 않는다. 우선 다음 명령어를 통해 사용가능한 profile를 확인한다.

istioctl profile list

demo 프로필이 존재하는 것을 확인했으니, 아래 명령어로 해당 프로필을 사용하여 istio를 설치해보자. 설치 확인을 묻는 프롬프트에서 'y'를 입력한다.

istioctl install --set profile=demo

Core Component 설치를 완료했다면 Addon도 설치할 차례다. 이번엔 istioctl 대신 kubectl 명령어를 사용한다.

kubectl apply -f samples/addons

리소스 생성 순서에 따라, 아래와 같은 에러 메시지가 발생할 수 있지만 'kubectl apply' 명령어를 한번 더 실행하는 것으로 해결가능하다.

 

설치 완료 후 현재 Istio 설정에 잠재적인 Issue가 없는지 검사해볼 수 있다.

istioctl analyze --all-namespaces

발견된 문제는 없지만 'default' namespace에 'istio-injection' label을 정의하지 않았기 때문에 위와 같은 메시지가 발생한다. 이 부분은 곧 설명할 Sidecar Injection 설정을 통해 해결할 수 있다.

kubectl get pod,svc -n istio-system

Istio 관련 모든 리소스가 정상적으로 생성되었으며, 특히 'istio-ingressgateway' 서비스의 경우, Loadbalancer 타입의 Service로 AWS ELB를 통해 외부에서 접근이 가능하다. 

Sidecar Injection

Istio는 Envoy Proxy를 Pod에 Sidecar로 자동 추가할 수 있는 기능을 제공하며, 이를 위해선 Namespace에 다음과 같이 label을 추가해야 한다.

kubectl label namespace default istio-injection=enabled

 

Istio는 Namespace 단위의 Sidecar Injection 설정이 가능하므로, default가 아닌 다른 namespace도 같은 방법으로 적용 가능하다.

 

Dashboard

Grafana, Kiali, Jaeger 등 다양한 Dashboard를 조회할 수 있다. 아직은 Application을 배포하지 않았으며, 활용할 데이터 또한 부족하므로 이번 시간엔 Istio 서비스가 정상 동작하는지 확인하기 위한 목적으로 접근만 해보겠다.

Grafana

아래 명령어를 사용하여 Grafana Dashboard를 생성할 수 있다. 실행과 동시에 웹 브라우저를 통해 Dashboard로 자동 연결된다.

istioctl dashboard grafana

실제 Grafana는 EKS 클러스터 안에서 수행중이지만, 프록시 연결을 통해 localhost 주소로 접근이 가능하다. 다음은 좌측 사이드 패널의 '+' > 'Import' 메뉴를 선택 후 'Import via grafana.com'에 '3219'를 입력하여 해당 dashboard를 import한다.

다음은 아래와 같이 선택 후 'Import'를 눌러서 Dashboard를 추가한다.

새로 생성한 Dashboard를 통해 아래와 같이 K8s 클러스터의 리소스 사용량을 조회할 수 있다.

 

Kiali

Grafana와 마찬가지로 다음 명령어를 통해 Kiali Dashboard에 연결할 수 있다.

istioctl dashboard kiali

 

 

 

 

What comes next?

여기까지 진행했다면 Istio를 사용할 모든 준비를 마친 셈이다. 아직은 확인할 트래픽이 존재하지 않기 때문에 Dashboard 기능을 제대로 활용할 수 없었지만 Sample App을 배포, 테스트한 다음부터 본격적으로 다뤄보겠다.

 

 

Istio - (3) Gateway와 VirtualService

이번 시간은 본격적인 App 배포에 앞서 Istio의 Gateway와 VirtualService에 대해서 설명하고자 한다. Gateway Public Cloud 환경의 K8s에서 Web Application 배포 경험이 있다면, 외부에서 접근할 수 있도록 Ingr..

cwal.tistory.com

 

'Service Mesh' 카테고리의 다른 글

Istio - (5) Destination Rule 응용  (0) 2021.04.06
Istio - (4) Traffic Management  (0) 2021.04.05
Istio - (3) Gateway와 VirtualService  (1) 2021.03.27
Istio - (1) Introduction  (0) 2021.03.27