강의 정보

강의 필기록 원본이라 글이 좀 어수선할 수 있습니다.

Kubernetes 역사

Container

  • 리눅스 부팅시에 rootfs 마운트 + init 프로세스 실행하는 것이 전부니까 rootfs 를 속이면 특정 프로세스를 격리할 수 있지 않나: chroot 의 개념 (파일시스템의 격리)
  • cpu, mem 등의 자원도 격리해보자: 구글의 cgroup 프로젝트
  • 위 두개의 기술로 IBM 에서 만든 가상화 (프로세스 격리) 프로젝트: LXC (Linux Container)
  • 하지만 LXC 너무 사용하기 힘듦 (약간 라이브러리같은 느낌): 사용자 친화적인 Docker 탄생 (dotclound, 현재 Docker Inc. 의 전신)

Borg

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 를 생성해주는 역할도 해준다