본문 바로가기
클라우드/쿠버네티스

☸️ 쿠버네티스(Kubernetes) TLS 부트스트래핑: 안전한 클러스터의 첫걸음

by gasbugs 2025. 9. 12.

안녕하세요! 오늘은 쿠버네티스 클러스터를 더욱 안전하고 효율적으로 운영하기 위한 핵심 기능 중 하나인 TLS 부트스트래핑(TLS Bootstrapping)에 대해 깊이 알아보겠습니다. 🚀 클러스터에 새로운 노드를 추가할 때마다 번거로운 인증서 서명 과정을 거치셨나요? TLS 부트스트래핑은 바로 이 문제를 해결해주는 고마운 친구랍니다!

 


🤔 TLS 부트스트래핑, 대체 뭔가요?

쿠버네티스 클러스터에서 각 컴포넌트들(kubelet, apiserver 등)은 서로 안전하게 통신하기 위해 TLS/SSL 인증서를 사용합니다. 마치 우리가 웹사이트에 접속할 때 'https'를 통해 안전한 연결을 보장받는 것과 같은 원리죠. 🔐

새로운 워커 노드가 클러스터에 참여하려면, 자신을 인증하고 API 서버와 안전하게 통신하기 위한 고유한 TLS 인증서가 필요합니다. TLS 부트스트래핑은 바로 이 새로운 노드가 처음으로 클러스터에 참여할 때, 필요한 클라이언트 TLS 인증서를 동적으로 요청하고 발급받는 메커니즘을 의미합니다.

과거에는 관리자가 직접 각 노드의 인증서를 수동으로 생성하고 서명해서 전달해야 했습니다. 😭 하지만 노드가 수십, 수백 개로 늘어난다면 어떨까요? 상상만 해도 끔찍하죠. TLS 부트스트래핑은 이 과정을 자동화하여 클러스터 확장을 훨씬 쉽고 안전하게 만들어줍니다.


⚙️ 어떻게 작동하나요? (동작 원리)

TLS 부트스트래핑의 전체적인 흐름은 다음과 같이 이루어집니다.

  1. 초기 연결 (Bootstrap Token 사용) 🔑
    • 새로운 노드의 kubelet은 클러스터에 처음 연결할 때, 미리 발급받은 부트스트랩 토큰(Bootstrap Token)이라는 임시 토큰을 사용합니다. 이 토큰은 마치 클럽에 입장하기 위한 일일 입장권과 같아요.
    • kubelet은 이 토큰을 이용해 API 서버에 자신을 인증하고, "안녕하세요! 저 새로 온 노드인데, 정식 인증서 좀 발급해주세요!"라고 요청합니다. 이때 사용하는 설정 파일이 바로 bootstrap-kubeconfig입니다.
  2. 인증서 서명 요청 (CSR 생성) ✍️
    • kubelet은 자신의 개인 키를 생성한 후, 이 키를 기반으로 인증서 서명 요청(Certificate Signing Request, CSR) 객체를 만듭니다. 이 CSR에는 "저는 node-1이라는 노드이고, system:nodes 그룹에 속하고 싶습니다"와 같은 정보가 담겨있습니다.
    • 생성된 CSR은 API 서버로 전송됩니다.
  3. CSR 승인 (관리자의 역할)
    • API 서버는 전달받은 CSR을 검토합니다. 하지만 자동으로 승인해주지는 않아요! 보안을 위해 클러스터 관리자(또는 자동화된 컨트롤러)의 승인이 필요합니다.
    • 관리자는 kubectl get csr 명령어로 대기 중인 CSR 목록을 확인하고, kubectl certificate approve <csr-name> 명령어를 통해 해당 요청이 유효한지 확인 후 승인합니다.
    • 물론, 특정 조건을 만족하는 CSR을 자동으로 승인해주는 컨트롤러를 설정하여 이 과정 또한 자동화할 수 있습니다. (예: kube-controller-manager의 csrapproving 컨트롤러)
  4. 인증서 발급 및 저장 📄
    • CSR이 승인되면, 쿠버네티스 컨트롤러 매니저 내의 CSR 서명 컨트롤러(CSR Signing Controller)가 클러스터의 CA(Certificate Authority) 인증서를 이용해 해당 CSR에 서명하고, 최종 클라이언트 인증서를 발급합니다.
    • kubelet은 발급된 인증서를 API 서버로부터 다운로드하여 자신의 로컬 디스크(--cert-dir에 지정된 경로, 보통 /var/lib/kubelet/pki)에 kubelet-client-current.pem 과 같은 이름으로 저장합니다.
  5. 정식 통신 시작 🤝
    • 이제 kubelet은 임시 부트스트랩 토큰 대신, 정식으로 발급받은 클라이언트 인증서를 사용하여 API 서버와 안전하고 지속적인 통신을 시작합니다.
    • 이후에는 이 인증서를 통해 자신의 신원을 증명하고, 워크로드 관리 등 본연의 임무를 수행하게 됩니다.

👍 TLS 부트스트래핑, 왜 사용해야 할까요? (장점)

  • 보안 강화 🛡️: 각 노드는 고유한 자격 증명(인증서)을 갖게 되며, 이는 수동으로 관리하는 공유 인증서보다 훨씬 안전합니다. 또한, 인증서의 유효기간을 짧게 설정하고 자동으로 갱신(rotate)하도록 구성하여 보안 수준을 더욱 높일 수 있습니다.
  • 운영 효율성 증대 ⚡: 노드를 추가할 때마다 수동으로 인증서를 생성하고 배포하는 번거로운 작업이 사라집니다. 클러스터 확장(Scale-out)이 매우 간편하고 빨라져 관리자의 부담을 크게 줄여줍니다.
  • 중앙 집중식 관리 🏢: 모든 인증서 발급 요청(CSR)이 쿠버네티스 API를 통해 중앙에서 관리되므로, 어떤 노드가 언제 인증서를 요청했는지 추적하고 감사하기 용이합니다.

💡 알아두면 좋은 점!

  • TLS 부트스트래핑은 주로 클러스터에 새로운 노드를 추가할 때 사용되는 기능입니다.
  • 안전한 클러스터 운영을 위해서는 부트스트랩 토큰의 유효기간을 적절히 설정하고, 사용 후에는 삭제하는 것이 좋습니다.
  • CSR을 자동으로 승인하도록 설정할 경우, 신뢰할 수 있는 노드로부터의 요청만 승인하도록 정책을 신중하게 구성해야 합니다.

결론적으로, TLS 부트스트래핑은 쿠버네티스 클러스터의 보안과 확장성을 동시에 잡는 매우 중요하고 유용한 기능입니다. 이 기능을 잘 이해하고 활용한다면, 더욱 견고하고 관리하기 쉬운 클러스터를 구축하실 수 있을 거예요! 😊


쿠버네티스, Kubernetes, TLS, Bootstrap, 인증서, 보안, 클러스터, Kubelet, CSR, 인프라, 자동화