k8s 42

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 - (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

Amazon EKS Tutorial - Part.4

Application 배포 새로운 클러스터 생성 본격적으로 EKS 클러스터에 App을 배포하는 과정에 대해 알아보자. 실습 환경 구성을 위해 기존 클러스터는 제거하고 아래 명령어로 새로운 클러스터를 생성한다. 이번엔 yaml 파일을 사용하는 대신 Imperative 방식으로 진행하였다. eksctl create cluster \ --name eks-from-eksctl \ --version 1.19 \ --region ap-northeast-2 \ --nodegroup-name workers \ --node-type t3.medium \ --nodes 2 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --ssh-public-key eks-access \ --man..

Cloud 2021.03.17

Amazon EKS Tutorial - Part.3

EKS 클러스터 확장 이전 시간에 t2.small 타입의 인스턴스 3개로 구성된 nodegroup 1개를 갖는 EKS 클러스터를 구성하였다. 계속해서 이번 시간엔 기존 클러스터를 확장하는 방법에 대해 알아보고자 한다. Amazon EKS Tutorial - Part.2 EKS 클러스터 생성 지난 시간에 이어 eksctl을 사용하여 AWS에 EKS 클러스터를 생성하는 과정에 대해 설명한다. Amazon EKS Tutorial - Part.1 Kubernetes on AWS AWS에서 Kubernetes 클러스터를 구축 및 운영하는.. cwal.tistory.com Node 갯수 변경 이전 시간에 생성한 Cluster와 소속 nodegroup의 상태이다. 클러스터가 정상적으로 생성되었으며, nodegroup..

Cloud 2021.03.16

Amazon EKS Tutorial - Part.2

EKS 클러스터 생성 지난 시간에 이어 eksctl을 사용하여 AWS에 EKS 클러스터를 생성하는 과정에 대해 설명한다. Amazon EKS Tutorial - Part.1 Kubernetes on AWS AWS에서 Kubernetes 클러스터를 구축 및 운영하는 방법은 다양하다. EC2 인스턴스로부터 k8s를 직접 설정하거나 Kops를 통해 구축을 자동화하되 사용자가 직접 운영하는 방식, 그리고 EKS cwal.tistory.com 우선 우리가 생성하고자 하는 클러스터의 스펙은 다음과 같다. Region: ap-northeast-2 (Seoul) 1 Nodegroup 3 Worker nodes Instance Type: t2.small SSH 접근 허용 eksctl에서 클러스터를 생성할 수 있는 방법은..

Cloud 2021.03.15

Amazon EKS Tutorial - Part.1

Kubernetes on AWS AWS에서 Kubernetes 클러스터를 구축 및 운영하는 방법은 다양하다. EC2 인스턴스로부터 k8s를 직접 설정하거나 Kops를 통해 구축을 자동화하되 사용자가 직접 운영하는 방식, 그리고 EKS를 사용하여 모든 관리 영역을 AWS에 위임하는 방식이다. AWS EKS EKS는 Elastic Kubernetes Service의 약자로 AWS가 2018년 6월부터 고가용성, 확장성, 보안을 강조하며 출시한 Kubernetes 서비스다. Control Plane(ex: master node, etcd) 영역을 AWS에서 전부 관리해주므로 사용자는 온전히 Application에만 집중할 수 있으며, k8s에 대한 이해도가 낮더라도 쉽게 사용가능한 장점이 있다. 물론 mast..

Cloud 2021.03.13

Container Runtime과 Docker

Container Runtime Docker나 Kubernetes 사용자라면 컨테이너 런타임(Container Runtime)이라는 단어를 종종 들어봤을 것이다. 컨테이너의 개념은 상당히 명확하지만 이에 반해 컨테이너 런타임이 구체적으로 어떤 역할을 맡고 있는지 설명하기란 쉽지 않다. Docker 자체가 컨테이너 런타임인가? kubelet은 Docker와 어떤 방식으로 상호작용하여서 컨테이너를 실행하는가? 이번 시간엔 컨테이너 런타임의 정확한 개념과 기능에 대해 알아보고자 한다. Docker와 Container 기술 표준 우선 Docker의 역사에 대해 짚고 넘어갈 필요가 있다. 2013년에 공개된 Docker는 그동안 어렵게만 여겨졌던 Linux 컨테이너 기술을 쉽게 다룰 수 있도록 아래와 같은 기능을..

Kubernetes 2021.03.09