2021/04 8

[CKS] Cluster Setup

Network Policy Default Deny default 네임스페이스에 속한 모든 Pod의 트래픽(ingress, egress)을 차단하는 기본 Network Policy를 아래와 같이 정의한다. apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny spec: podSelector: {} policyTypes: - Egress - Ingress 위 설정은 DNS 서버(ex: coredns)의 접근도 거부되므로, 아래와 같이 DNS 포트는 허용할 수 있다. apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny spec: podSelector: ..

Certified Kubernetes Security Specialist (CKS)

현재 CNCF에서 공인하는 Kubernetes 관련 자격증은 CKA, CKAD, CKS 총 3개이다. 필자는 작년에 CKA, CKAD를 취득했으나, 올해 새로운 학습 목표로 DevSecOps를 공부할겸 CKS 시험도 마저 통과하고자 한다. 자격 개요 Container 기반 어플리케이션 및 Kubernetes 플랫폼에 대한 보안 역량을 검증하는 테스트이다. CNCF에서 주관하는 다른 K8s 자격증(CKA, CKAD)과 동일하게, 별도 구축된 시험 환경에서 각 문제마다 제시하는 요구사항에 맞게 K8s 클러스터를 설정하거나, 리소스를 생성하는 등 단순 이론보다 실제 수행 능력을 평가한다. 2시간 동안 15~20개의 문제를 풀어야 하며, 총 100% 중 67% 이상 득점해야 통과로 문제 난이도에 따라 점수가 다..

DevOps

What is DevOps? DevOps에 대한 정의는 관점에 따라 다를 수 있지만, 일반적으로 개발과 IT 운영의 협업을 통해 제품을 더욱 빠르고 자주 배포함(high deploy rate)과 동시에 신뢰성, 안정성, 보안을 향상시키는 개발 방법론이자 문화라고 할 수 있다. 또한 'DevOps Handbook'의 공동 저자인 John Willis는 자신의 책에서 DevOps를 다음과 같이 정의하고 있다. "DevOps is about humans. DevOps is a set of practices and patterns that turn human capital into high-performance organizational capital." - John Willis DevOps는 기술, 프로세스,..

개발 철학 2021.04.26

ETCD Encryption

Kubernetes Secret 일반적으로 K8s 환경에서 Password, Access Token와 같이 보안에 민감한 데이터를 Secret 리소스로 관리한다. 다음은 간단한 Secret을 생성하는 예시이다. kubectl create secret generic secret1 --from-literal user=admin kubectl create secret generic secret2 --from-literal pass=12345678 secret1: user=admin secret2: pass=12345678 그리고 다음과 같이 위 Secret 2개를 포함하는 Pod을 정의한다. apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers..

Kubernetes 2021.04.21

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