쿠버네티스: 엔터프라이즈 가이드 (컨테이너 기술을 활용한 엔터프라이즈 환경 통합과 확장 | 2 판)
Description
도커, 쿠버네티스, 보안, 감사, Istio와 같은 현대적인 컨테이너 및 오케스트레이션 기술에 안내하는데 중점을 두고 있다. 기초적인 내용부터 쿠버네티스 보안, 감사 그리고 최신 트렌드까지 폭넓게 다루고 있으며, 엔터프라이즈 현업에서의 실전 경험과 함께 새로운 도구와 기술을 소개한다. 이 책은 독자들이 현대적인 애플리케이션 배포 및 관리의 복잡한 환경에서 성공하기 위한 실용적인 가이드를 제공한다.
저자

마크 보어쉬테인, 스콧 수로비치

(Marc Boorshtein)
20년 동안 소프트웨어 엔지니어이자 컨설턴트로 일해 왔으며 현재 트레몰로 시큐리티(Tremolo Security, Inc)의 CTO이다. 대기업, 미국 정부 민간 기관, 지방 정부의 공공 안전 시스템을 위한 ID 관리 솔루션을 구축하는 데 대부분의 경력을 보냈다. 최근 인프라 보안 자동화를 위한 오픈 소스 도구를 구축하면서 데브옵스와 쿠버네티스에 ID를 적용하는 데 주력하고 있다. CKAD이며, 인증 및 권한 부여에 대한 질문에 답변하는 쿠버네티스 슬랙 채널에서 자주 볼 수 있다.

목차

1장. 도커 및 컨테이너 기초
__기술 요구 사항
__컨테이너화의 필요성 이해
____쿠버네티스에서 도커를 지원 중단하는 이유
____도커 소개
__도커 이해하기
____컨테이너는 일시적이다
____도커 이미지
____이미지 레이어
____영구 데이터
____컨테이너에서 실행 중인 서비스에 액세스
__도커 설치
____도커 설치 준비
____Ubuntu에 도커 설치
____도커 권한 부여
__도커 CLI 사용
____docker help
____docker run
____docker ps
____docker start and stop
____docker attach
____docker exec
____docker logs
____docker rm
__요약
__문제
2장. KinD를 이용한 쿠버네티스 배포
__기술 요구 사항
__쿠버네티스 컴포넌트 및 오브젝트 소개
____클러스터와 상호 작용
__개발 클러스터 사용
____기본 KinD 쿠버네티스 클러스터로 작업하기
____노드 이미지 이해
____KinD 및 도커 네트워킹
____중첩 인형 추적
__KinD 설치
____KinD 설치 - 사전 조건
______kubectl 설치
____KinD 바이너리 설치
__KinD 클러스터 만들기
____단순 클러스터 생성
____클러스터 삭제
____클러스터 설정 파일 생성
____다중 노드 클러스터 설정
____컨트롤 플레인 및 Kubelet 옵션 커스터마이징
____사용자 지정 KinD 클러스터 만들기
____Calico 설치
____인그레스 컨트롤러 설치
__KinD 클러스터 검토
____KinD 스토리지 오브젝트
____스토리지 드라이버
____KinD 스토리지 클래스
____KinD의 스토리지 프로비저너 사용
__인그레스용 커스텀 로드밸런서 추가
____설치 사전 요구 사항
____KinD 클러스터 설정 생성하기
____사용자 지정 HAProxy 컨테이너 배포
____HAProxy 트래픽 흐름 이해
____kubelet 장애 시뮬레이션
__요약
__문제
3장. 쿠버네티스 부트캠프
__기술 요구 사항
__쿠버네티스 컴포넌트 개요
____컨트롤 플레인 살펴보기
____쿠버네티스 API 서버
____Etcd 데이터베이스
____kube-scheduler
____kube-controller-manager
____cloud-controller-manager
__작업자 노드 컴포넌트 이해
____kubelet
____kube-proxy
____컨테이너 런타임
__API 서버와 상호 작용
____쿠버네티스 kubectl 유틸리티 사용
____Verbose 옵션 이해
____일반 kubectl 명령어
__쿠버네티스 리소스 소개
____쿠버네티스 매니페스트
____쿠버네티스의 리소스는 무엇인가?
____쿠버네티스 리소스 검토
______컨피그맵
______엔드포인트
______이벤트
______네임스페이스
______노드
______퍼시스턴트 볼륨 클레임
______퍼시스턴트 볼륨
______파드
______레플리케이션 컨트롤러
______리소스쿼터
______시크릿
______서비스어카운트
______서비스
______커스텀리소스데피니션
______데몬셋
______디플로이먼트
______레플리카셋
______스테이트풀셋
______HorizontalPodAutoscalers
______크론잡
______잡
______인그레스
______네트워크폴리시
______파드 시큐리티 폴리시
______클러스터롤바인딩
______클러스터롤
______롤바인딩
______롤
______CSI 드라이버
______CSI 노드
______스토리지 클래스
__요약
__문제
4장. 서비스, 로드밸런서, ExternalDNS 그리고 글로벌 밸런싱
__기술 요구 사항
__요청에 대한 워크로드 노출
____서비스 작동 방식 이해
______서비스 생성
______DNS를 사용해 서비스 해결
____다양한 서비스 유형 이해
______ClusterIP 서비스
______NodePort 서비스
______로드밸런서 서비스
______ExternalName 서비스
__로드밸런서 소개
____OSI 모델에 대해서
__레이어 7 로드밸런서
____이름 해석 및 레이어 7 로드밸런서
____이름 해석에 nip.io 사용
____인그레스 규칙 생성
__레이어 4 로드밸런서
____레이어 4 로드밸런서 옵션
____레이어 4 로드밸런서로 MetalLB 사용
______MetalLB 설치
______MetalLB 설정 파일 이해
______MetalLB 컴포넌트
________스피커
________컨트롤러
______로드밸런서 서비스 생성
____MetalLB에 여러 IP 풀 추가
______다중 프로토콜 사용
____여러 가지 프로토콜 문제
____MetalLB와 함께 여러 프로토콜 사용
____공유 IP 사용
__엔터프라이즈를 위한 로드밸런서 강화
__서비스 이름을 외부에서 사용할 수 있도록 설정
____external-dns 설정
____external-dns와 CoreDNS 연동
______CoreDNS에 ETCD 존 추가
________ExternalDNS 연동으로 로드밸런서 서비스 생성
________CoreDNS와 엔터프라이즈 DNS의 연동
____프라이머리 DNS 서버 설정
____CoreDNS로의 DNS 전달 테스트
__멀티 클러스터 간의 로드밸런싱
____쿠버네티스 글로벌 밸런서 소개
____K8GB의 요건
____클러스터에 K8GB 배포
______K8GB 로드밸런싱 옵션 이해
______헬름 차트 값 사용자 정의
______헬름을 사용한 K8GB 설치
____K8GB를 사용한 고가용성 애플리케이션 배포
______커스텀 리소스르 사용해 K8GB에 애플리케이션 추가
______인그레스 어노테이션을 사용해 K8GB에 애플리케이션 추가
______K8GB의 글로벌 로드밸런싱 기능 이해
______K8GB CoreDNS 서버의 동기화 유지
__요약
__문제
5장. 클러스터 인증 연동
__기술 요구 사항
__쿠버네티스가 당신을 어떻게 아는지 이해하기
____외부 사용자
____쿠버네티스의 그룹
____서비스어카운트
__OpenID Connect 이해
____OpenID Connect 프로토콜
____OIDC와 API의 상호 작용을 추적
______id_token
____기타 인증 옵션
______인증서
______서비스어카운트
______TokenRequest API
______커스텀 인증 웹훅
______키스톤
__OpenID Connect에 대한 KinD 설정
____요구 사항에 대한 대응
____쿠버네티스에서의 LDAP 및 액티브 디렉터리 사용
____액티브 디렉터리 그룹을 RBAC 롤바인딩에 매핑
____쿠버네티스 대시보드 액세스
____쿠버네티스 CLI 액세스
____엔터프라이즈 규정 준수 요구 사항
____모든 것을 한데 모으기
____OpenUnison 배포
____OIDC를 사용하기 위한 쿠버네티스 API 설정
____OIDC 연동 확인
____kubectl과 함께 토큰 사용
__클라우드 관리형 클러스터와 인증을 연동하기 위한 가장 도입
____가장이란?
____보안에 관한 고려 사항
__가장을 위한 클러스터 구성
____가장 테스트
__OpenUnison을 사용하지 않는 가장 설정
____가장 RBAC 정책
____기본 그룹
__클러스터에 대한 파이프라인에서 인증
____토큰 사용
____인증서 사용
____안티 패턴 회피
__요약
__문제
6장. 롤 기반 액세스 제어 정책 및 감사
__기술 요구 사항
__RBAC 소개
__롤이란
____롤 식별
____롤 대 클러스터롤
____네거티브 롤
____집계된 클러스터롤
____롤바인딩 및 클러스터 롤바인딩
______클러스터롤 및 롤바인딩 결합
__리소스에 대한 액세스 권한을 부여하기 위해 엔터프라이즈 ID를 쿠버네티스에 매핑
__네임스페이스 멀티테넌시 구현
__쿠버네티스 감사
____감사 정책 만들기
____클러스터에서 감사 활성화
__audit2rbac를 사용한 정책 디버깅
__요약
__문제
7장. 안전한 쿠버네티스 대시보드 배포
__기술 요구 사항
__대시보드에서의 사용자
____대시보드 아키텍처
____인증 방법
__대시보드 보안 위험 이해
____안전하지 않은 대시보드 배포
____토큰을 사용해 로그인
__리버스 프록시로 대시보드 배포
____로컬 대시보드
____기타 클러스터 레벨 애플리케이션
__오픈유니슨과 대시보드 통합
__요약
__문제
8장. 개방형 정책 에이전트를 사용한 보안 확장
__기술 요구 사항
__동적 승인 컨트롤러 소개
__OPA의 정의 및 동작
____O

출판사 서평

◈ 이 책에서 다루는 내용 ◈

◆ KinD를 이용한 다중 노드 쿠버네티스 클러스터 생성
◆ 인그레스, MetalLB, 외부-DNS 및 새로운 샌드박스 프로젝트 쿠버네티스 글로벌 밸런서(K8GB) 구현
◆ OIDC 및 가장(impersonation)을 이용한 클러스터 구성
◆ 이스티오 서비스 메시에 모놀리식 애플리케이션 배포
◆ 엔터프라이즈 인증을 쿠버네티스에 매핑
◆ OPA 및 게이트키퍼를 사용한 클러스터 보안
◆ 팔코, 데브옵스 AI, ECK를 통한 감사 기능 강화
◆ 재해 복구 및 클러스터 마이그레이션을 위한 워크로드 백업
◆ Tekton, 깃랩 및 ArgoCD를 이용한 깃옵스 플랫폼 배포

◈ 이 책의 대상 독자 ◈

여러 엔터프라이즈 환경에서 클러스터를 이용해 수년간 작업한 저자들의 경험을 바탕으로 데브옵스 팀이 쿠버네티스의 기초 이상으로 기술을 확장할 수 있도록 돕기 위해 이 책을 만들었다.
쿠버네티스와 클러스터 설치, 배포 생성, 쿠버네티스 개체 사용의 기본 사항을 소개하는 책이 많다. 우리의 계획은 기본 클러스터를 넘어서는 책을 만드는 것이었고 책의 분량을 적절한 수준으로 유지하기 위해 쿠버네티스의 기본 사항을 다시 살펴보진 않기 때문에 어느 정도 쿠버네티스에 대한 경험이 있는 독자가 읽기에 적합하다.
주요 초점은 엔터프라이즈 기능으로 클러스터를 확장하는 것이지만, 책의 첫 번째 장에서는 도커 핵심 주제와 쿠버네티스 객체를 다시 살펴볼 것이다. 고급 주제들을 다루는 장들을 최대한 활용하려면 쿠버네티스 객체를 확실하게 이해하는 것이 중요하다.

◈ 이 책의 구성 ◈

1장, ‘도커 및 컨테이너 기초’에서는 개발자가 해결해야 할 도커와 쿠버네티스의 문제를 다룬다. 도커 데몬, 데이터, 설치 및 도커 CLI 사용을 포함해 도커의 기초 개념을 소개한다.
2장, ‘KinD를 이용한 쿠버네티스 배포’에서는 단일 노드 클러스터에서 다중 노드 클러스터까지 쿠버네티스 클러스터를 생성할 수 있는 강력한 도구인 KinD를 다룬다. 기본 KinD 클러스터와 사용 방법을 설명한다.
3장, ‘쿠버네티스 부트캠프’에서는 쿠버네티스 기본을 다시 살펴보며, 쿠버네티스를 처음 접하는 경우 클러스터를 포함한 대부분의 객체를 다룰 것이다. 각 객체의 기능과 클러스터에서의 기능에 대한 설명과 함께 각 객체를 설명한다. 이는 객체에 대한 복습 또는 "포켓 가이드"를 의미한다. 각 객체에 대한 모든 세부 정보가 포함돼 있진 않다.
4장, ‘서비스, 로드 밸런서, ExternalDNS 그리고 글로벌 밸런싱’에서는 서비스를 이용해 쿠버네티스 배포를 노출하는 방법을 소개한다. 각 서비스 유형은 예제와 함께 설명되며 레이어 7 및 레이어 4 로드 밸런서를 모두 사용해 서비스 유형을 노출하는 방법을 배우게 된다. Ingress 컨트롤러의 기본 사항을 넘어 MetalLB를 설치해 서비스에 대한 레이어 4 액세스를 제공하는 방법을 설명한다. 또한 기본 쿠버네티스 글로벌 로드 밸런싱을 제공하는 MetalLB 및 K8GB에 의해 노출되는 서비스에 대한 동적 이름 확인 기능을 제공하기 위해 external-dns라는 인큐베이터 프로젝트를 설치해 엔터프라이즈 클러스터에 도움이 되는 두 가지 추가 기능에 대해 알아본다.
5장, ‘클러스터 인증 연동’에서는 "클러스터가 구축되면 사용자가 어떻게 클러스터에 액세스하는가?"라는 질문에 답할 수 있도록 한다. 특히 OpenID Connect의 작동 방식과 이를 이용해 클러스터에 액세스해야 하는 이유를 자세히 살펴본다. 또한 파이프라인에 인증하는 방법을 배우고 마지막으로 피해야 할 몇 가지 안티 패턴을 다루고 이 이유를 설명한다.
6장, ‘롤 기반 액세스 제어 정책 및 감사’에서는 사용자가 클러스터에 액세스할 수 있게 되면 액세스를 제한하는 방법을 알아야 한다고 설명한다. 사용자에게 전체 클러스터를 제공하는지 네임스페이스만 제공하는지에 상관없이 쿠버네티스가 역할 기반 액세스 제어(RBAC) 시스템을 통해 액세스 권한을 부여하는 방법을 알아야 한다. RBAC 정책을 설계하는 방법, 디버깅하는 방법 및 멀티 테넌시를 위한 다양한 전략을 소개한다.
7장, ‘안전한 쿠버네티스 대시보드 배포’에서는 클러스터가 실행되면 사용자가 가장 먼저 보게 되는 쿠버네티스 대시보드를 다룬다. 보안에 대해서는 많은 신화가 있다. 클러스터는 네트워크 대시보드, 로깅 시스템, 모니터링 대시보드와 같은 다른 웹 애플리케이션들로 구성된다. 대시보드가 어떻게 구성돼 있는지, 대시보드를 적절하게 보호하는 방법, 대시보드를 배포하지 않는 방법의 예를 자세히 살펴보고 그 이유에 대해 자세히 설명한다.
8장, ‘Open Policy Agent(OPA)를 사용한 보안 확장’에서는 RBAC를 이용해 구현할 수 없는 정책을 활성화하기 위해 Open Policy Agent 및 게이트키퍼를 배포하는 데 필요한 지침을 제공한다. 게이트키퍼를 배포하는 방법, Rego에서 정책을 작성하는 방법, OPA에 내장된 테스트 프레임워크를 사용해 정책을 테스트하는 방법을 다룬다.
9장, ‘게이트키퍼로 노드 보안 구현’에서는 파드를 실행하는 노드의 보안을 다룬다. 컨테이너를 안전하게 설계하는 방법과 컨테이너가 필요하지 않은 리소스에 액세스하지 못하도록 제한하는 게이트키퍼를 이용해서 정책을 구축하는 방법에 대해 논의한다.
10장, ‘Falco, DevOps AI, ECK를 통한 감사’에서는 쿠버네티스에 API 액세스를 위한 이벤트 로깅이 포함돼 있지만 컨테이너 런타임 이벤트를 캡처하는 기능은 없다는 점을 설명한다. 이러한 제한 사항을 해결하기 위해 우리는 Sysdig가 CNCF에 기부한 Falco라는 프로젝트를 설치할 것이다. Falco를 이용하면 Kubeless 기능을 사용해 Falco에서 캡처한 이벤트를 기반으로 작업을 트리거하는 방법과 FalcoSideKick을 이용해서 Falco에서 캡처한 데이터를 표시해 FalcoSidekick-UI 및 ECK(Elastic Cloud on Kubernetes) 스택에 이벤트를 전달하는 방법을 알아본다.
11장, ‘워크로드 백업’에서는 Velero를 사용해서 재해 복구 또는 클러스터 마이그레이션을 위해 클러스터 워크로드의 백업을 생성하는 방법을 설명한다. 워크로드 예제의 백업을 생성하고 클러스터 마이그레이션을 시뮬레이션하기 위해 백업을 새로운 클러스터로 복원하기 위해 MinIO를 사용하여 S3 호환 스토리지 위치를 직접 생성한다.
12장, ‘Istio 소개’에서는 많은 기업이 보안, 트래픽 라우팅, 인증, 추적, 관측성과 같은 고급 기능을 클러스터에 제공하기 위해 이용하는 서비스 메시를 설명한다. 널리 사용되는 오픈 소스 서비스 메시인 Istio와 해당 아키텍처 그리고 가장 일반적으로 사용되는 리소스를 소개한다. 애플리케이션 예제를 이용해서 Istio를 KinD 클러스터에 배포하고 Kiali라는 도구를 활용해 애플리케이션의 동작을 모니터링하는 방법을 알아본다.
13장에서는 Istio 애플리케이션 빌드 및 배포를 다룬다. Istio를 배포한 후에 이를 이용하는 애플리케이션을 개발하고 배포하고 싶을 것이다. 모놀리스와 마이크로서비스의 차이점과 배포 방법을 살펴보는 것으로 시작한다. 아울러 Istio에서 실행할 마이크로서비스 구축을 단계별로 진행하고 서비스에 대한 인증, 권한 부여, 서비스 간 인증과 같은 고급 주제를 살펴본다. 또한 OIDC 공급자와 JSON 웹 토큰을 사용해 쿠버네티스의 기존 역할을 활용해 Kiali 액세스를 보호하는 방법도 알아본다.
14장, ‘플랫폼 프로비저닝’에서는 GitLab, Tekton, ArgoCD, 게이트키퍼 및 오픈유니슨을 이용해 다중 테넌트 클러스터를 자동화하기 위한 플랫폼을 구축하는 방법을 설명한다. 파이프라인을 구축하는 방법과 파이프라인 생성을 자동화하는 방법을 살펴본다. 파이프라인을 구동하는 데 사용하는 개체들이 서로 어떻게 관련돼 있는지, 시스템 간 관계를 구축하는 방법, 마지막으로 파이프라인 배포 자동화를 위한 셀프 서비스 워크플로우를 만드는 방법을 알아본다.

◈ 옮긴이의 말 ◈

쿠버네티스는 매력적인 서비스입니다. 무척 빠르게 발전하고 있으며 특히 클라우드와 함께 사용할 때의 가능성은 엄청나다고 생각합니다. 물론 지금 이 책이 최신의 기술 트렌드를 모두 반영하고 있진 않지만, 이렇게 정리된 정보가 이제 시작하려는 분이나 쿠버네티스를 좀 더 활용하고자 하는 분께 조금이나마 도움을 드릴 수 있길 바랍니다. 마지막으로 같이 번역에 참여해준 훌륭한 동료들과 이 책의 저자, 출판사에게도 감사를 드립니다.
-강세용

기업은 쿠버네티스를 사용해 유연성과 확장성을 누릴 수 있지만 동시에 보안 정책, 모니터링, 감사 등을 직접 구현해야 합니다. 도커와 쿠버네티스의 기본 개념부터 시작해 RBAC, 팔코Falco, OPA, 이스티오Istio와 같은 오픈소스 도구를 사용한 확장에 대해 실습 위주로 안내하기 때문에 엔터프라이즈에서는 어떤 방향으로 쿠버네티스를 다뤄야 하는지 조언을 얻을 수 있을 것이라고 생각합니다.
-김진웅

2014년부터 AWS Korea에서 솔루션즈 아키텍트와 클라우드 아키텍트로 일하고 있습니다. 쿠버네티스는 최근 컨테이너와 관련한 기술 가운데 가장 뜨거운 주제 중 하나입니다. 아울러 글로벌 회사에서 약 17년가량 일하면서 계속 컨테이너와 관련한 일을 하고 있어 이번 책 번역에 참여하게 돼 매우 기쁩니다. 또한 AWS의 다양한 팀원과 함께 번역과 기부 활동에 동참해 ‘Strive to be Earth’s Best Employer’라는 아마존 리더십 원칙을 실천할 수 있게 기회를 주신 에이콘출판사 여러분께도 감사드립니다.
-김상필

온프레미스에서 이기종 장비들에 컨테이너를 활용해 쉽게 배포를 성공했을 때의 감동이 아직도 생생합니다. 쿠버네티스만큼 역동적이고 빠르게 발전하는 오픈소스는 많지 않다고 생각합니다. 최근엔 스타트업에서 엔터프라이즈에 이르기까지 많은 기업이 쿠버네티스를 도입하고 있습니다. 쿠버네티스를 활