강의 정보
- 러닝스푼스에서 2023년 4월 ~ 6월 간 강의한 쿠버네티스 딥다이브 2기 를 듣고 정리한 내용입니다.
강의 필기록 원본이라 글이 좀 어수선할 수 있습니다.
Kubernetes 역사
Container
- 리눅스 부팅시에 rootfs 마운트 + init 프로세스 실행하는 것이 전부니까 rootfs 를 속이면 특정 프로세스를 격리할 수 있지 않나: chroot 의 개념 (파일시스템의 격리)
- cpu, mem 등의 자원도 격리해보자: 구글의 cgroup 프로젝트
- 위 두개의 기술로 IBM 에서 만든 가상화 (프로세스 격리) 프로젝트: LXC (Linux Container)
- 하지만 LXC 너무 사용하기 힘듦 (약간 라이브러리같은 느낌): 사용자 친화적인 Docker 탄생 (dotclound, 현재 Docker Inc. 의 전신)
- 참고) The future of Linux Containers
- 이 영상에 docker run 처음 실행하는 부분이 맛도리다
Borg
- Bord 프로젝트에 대한 Google 논문
- Google Research - Large-scale cluster management at Google with Borg
- EuroSys 2015 - Large-scale cluster management at Google with Borg
- 읽어봄즉하다: Borg 에서 얻은 교훈이 어떻게 Kubernetes 에 녹아들어갔나
Kubernetes
- API 서버하고 etcd 만 있으면 일단 모든 기능이 작동한다
- Controller manager 나 Scheduler 는 편의를 위한 컴포넌트
- etcd 의 시작: 그냥 한 박사과정의 인턴이 재미로 만들어본 프로젝트였다
- 쿠버네티스에서 모든 통신은 mTLS (양방향 TLS) 로 이루어진다
- kube-apiserver front proxy 옵션
- kube-apiserver Proxy auth: NGINX 가 kube-apiserver 앞에 있을 때 NGINX 인증서를 처리해버리면 apiserver 에는 인증서가 도달하지 못하기 때문에 NGINX 에게 Authorization header 를 붙여서 보냈을 때 NGINX 가 Auth 를 확인하고 권한이 있다고 판단되면 NGINX 가 마치 client 처럼 kube-apiserver 에 요청을 보내주는 기능
- --requestheader-allowed-names=front-proxy-client
- --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
- --requestheader-extra-headers-prefix=X-Remote-Extra-
- --requestheader-group-headers=X-Remote-Group
- --requestheader-username-headers=X-Remote-User
- 그럼 vcluster 애서도 이걸 사용하면 TLS passthrough 안쓰고 할 수 있는거 아닌가
- 일단 vcluster 의 apiserver 에 해당 설정이 들어가있기는 하다
- kube-scheduler 가 default serviceaccount 를 생성해주는 역할도 해준다