분류 전체보기 77

Kubernetes와 TLS

Kubernetes Components 아래 그림과 같이 Kubernetes에 존재하는 모든 Component 간 통신은 HTTPS를 기반으로 이루어지며, 모든 트래픽이 암호화되므로 데이터의 신뢰성과 보안을 보장할 수 있다. 일반적으로 K8s Component 사이에서 이루어지는 작업은 다음과 같이 요약할 수 있다. kube-apiserver -> etcd: kube-apiserver는 etcd에 접근할 수 있는 유일한 Component로, K8s 클러스터의 상태를 Key-Value 형식으로 etcd 저장소에 관리한다. kubelet -> kube-apiserver: Worker에 배치된 kubelet은 자신이 생성해야할 Pod 정보를 kube-apiserver로부터 가져온다. kube-apiserver..

Imperative Vs. Declarative

Kubernetes Object를 생성하는 방식은 크게 두가지이다. Shell에서 직접 명령어를 실행하거나, 별도의 파일에 Object를 정의하는 방식이다. Infrastructure as Code 관점에선 이를 각각 Imperative(명령형) 접근, Declarative(선언형) 접근으로 구분한다. 예를 들어 Imperative 방식은 택시 기사에게 직진, 좌회전, 우회전 등으로 경로를 일일이 설명하면서 목적지까지 도착하는 반면, Declarative 방식은 기사에게 자신의 목적지를 알려주면 구체적인 설명없이도 알아서 도착하는 것으로 생각할 수 있다. Infrastructure as Code 보다 프로그래밍적인 예시로, nginx 서버를 가상머신에 배포하는 과정을 Code로 비교해보자. Imperat..

Kubernetes 2021.04.08

Istio - (5) Destination Rule 응용

Destination Rule 지금까지 실습 과정 중 Destination Rule은 Pod의 Label을 통해 서비스의 Subset을 분류하는데만 사용하였다. 하지만 Destination Rule을 설정하여 다음과 같이 더욱 정교한 트래픽 관리가 가능하다. Load balancing(round robin, random, least connection) Rate limiting(connection pool 크기 조절) Circuit breaker(outlier detection) Load balancing DestinationRule이 정의되지 않은 서비스는 K8s Service의 L4 Load Balance가 적용된다. Round Robin DestinationRule에 trafficPolicy 항목을..

Service Mesh 2021.04.06

Istio - (4) Traffic Management

Traffic Management Service Mesh 안에 생성된 Pod의 모든 트래픽은 Sidecar Proxy에 의해 Intercept 되는 것은 이미 배웠다. 이를 통해 Kiali Dashboard에서 트래픽이 어디에서 와서 어디로 가는지에 대한 Telemetry를 시각적으로 확인할 수도 있었다. 이번 시간엔 VirtualService와 DestinationRule을 통해 트래픽을 조건에 맞게 제어하고 관리함으로써 Kubernetes 경험을 확장할 수 있는 Traffic Management 기능에 대해 알아보자. Weighted Routing Canary Release는 새로운 버전을 배포하기 전, 일부 사용자에게만 적은 확률로 서비스를 제공하는 방식으로 리스크를 줄이는 기법 중 하나이다. K8..

Service Mesh 2021.04.05

Terraform - (1) 소개 및 설치

Terraform Terraform을 간단히 소개하자면, 다양한 Cloud Provider(ex: AWS, Azure)의 플랫폼을 지원하는 IaC툴이다. IaC(Infrastructure as Code) 개념이 아직 낯설다면 아래 링크를 참고하길 바란다. 코드형 인프라(IaC)란? 코드형 인프라(Infrastructure as Code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말합니다. www.redhat.com 설치 Ubuntu/Debian 계열의 Linux는 apt를 통해 Terraform을 설치할 수 있다. $ curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - $ sudo apt-..

IaC 2021.03.29

Istio - (3) Gateway와 VirtualService

이번 시간은 본격적인 App 배포에 앞서 Istio의 Gateway와 VirtualService에 대해서 설명하고자 한다. Gateway Public Cloud 환경의 K8s에서 Web Application 배포 경험이 있다면, 외부에서 접근할 수 있도록 Ingress Controller를 사용해봤을 것이다. 여러 개의 서비스를 노출해야 하는 상황에서, 모든 Service를 Loadbalancer 타입으로 생성하기엔 비용과 흩어진 Entrypoint 등의 문제가 발생한다. 이런 문제를 해결하기 위해 Ingress Controller를 최전선에 두고 Ingress Rule을 추가하여 Hostname과 Path에 따라 지정된 서비스로 Routing할 수 있었다. 다만 K8s에서 기본적으로 제공하지 않고 Th..

Service Mesh 2021.03.27

Istio - (2) Istio 설치(EKS)

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분 정도 기다리..

Service Mesh 2021.03.27

Istio - (1) Introduction

Service Mesh Service Mesh는 Application을 구성하는 Microservice간의 통신을 제어하거나, 추적할 수 있는 별도의 Infrastructure Layer를 의미한다. L7에서 HTTP URL Path, Header 등을 기반으로 동작하며, 보통은 Proxy를 비즈니스 로직을 수행중인 Microservice 옆에 Sidecar로 붙여서 Network Traffic을 대신 전달(routing)하는 방식으로 구성한다. 그렇다면 왜 Service Mesh가 필요할까? 기존 Monolithic Application의 경우 로그 파일을 직접 확인하거나, tcpdump 등으로 패킷 내용을 추적하여 트러블슈팅이 가능했다. 또한 Process, Thread 간의 데이터 전달은 인스턴스 ..

Service Mesh 2021.03.27

Amazon EKS Tutorial - Part.6

Cluster Autoscaler 이번 시간엔 K8s 클러스터 Worker Node의 갯수를 유동적으로 늘리거나 줄일 수 있는 Cluster Autoscaler에 대해서 알아보자. 이 기능은 AWS가 아닌 Kubernetes에서 진행중인 공식 프로젝트 중 하나이며, 다음과 같은 상황에서 클러스터의 사이즈가 자동으로 조절된다. Resource가 부족하여 Pod을 생성할 수 없는 경우 => 새로운 Worker Node 추가 일정 시간 동안 Resource 사용량이 기준에 못미친 Node 발생 => 해당 Node 제거 Cluster Autoscaler를 설치하기 전, K8s와 AWS의 권한과 관련된 IRSA의 개념을 설명하고 넘어가겠다. IRSA 모든 Pod은 ServiceAccount(SA)가 존재하며, 해..

Cloud 2021.03.22

Amazon EKS Tutorial - Part.5

ELB Access Log 저장 - S3 Bucket 이전에 배포했던 Guestbook App의 앞에는 ELB와 Ingress Controller가 위치한다. 이번 시간은 사용자가 서비스에 접근하기 위해서 반드시 거쳐야 하는 ELB의 Access Log를 S3에 저장하는 방법에 대해 다뤄보려고 한다. Amazon EKS Tutorial - Part.4 Application 배포 새로운 클러스터 생성 본격적으로 EKS 클러스터에 App을 배포하는 과정에 대해 알아보자. 실습 환경 구성을 위해 기존 클러스터는 제거하고 아래 명령어로 새로운 클러스터를 생성 cwal.tistory.com 가장 먼저 S3 Bucket을 생성한다. AWS 콘솔의 Amazon S3 > Buckets 메뉴에서 생성 가능하다. Buck..

Cloud 2021.03.20