하드닝 가이드 — 스케줄러 설정
하드닝 가이드 — 스케줄러 설정 (scheduler)
쿠버네티스 스케줄러를 더 안전하게 만드는 방법에 대한 문서예요.
쿠버네티스 스케줄러는 컨트롤 플레인의 중요한 컴포넌트 중 하나예요. 이 문서는 스케줄러의 보안 태세(security posture)를 개선하는 방법을 다뤄요.
잘못 구성된 스케줄러는 보안에 영향을 줄 수 있어요. 그런 스케줄러는 특정 노드를 대상으로 삼아, 그 노드와 자원을 공유하는 워크로드나 애플리케이션을 축출할 수 있어요. 이는 취약한 오토스케일러를 공격하는 Yo-Yo 공격과 같은 공격을 돕는 데 쓰일 수 있어요.
kube-scheduler 구성 (kube-scheduler configuration)
스케줄러 인증·인가 커맨드라인 옵션 (Scheduler authentication & authorization command line options)
인증 구성을 설정할 때는 kube-scheduler의 인증이 kube-api-server의 인증과 일관되도록 해야 해요. 어떤 요청에 인증 헤더가 누락되어 있으면, 모든 인증이 클러스터 안에서 일관되도록 kube-api-server를 통해 인증이 이루어져야 해요.
requestheader-client-ca-file: 이 인자를 넘기지 않는 것이 좋아요.profiling: 디버깅 정보를 제공하는 profiling 엔드포인트는 프로덕션 클러스터에서는 활성화하면 안 되므로,false로 설정해서 비활성화해요. 프로덕션에서 profiling은 서비스 거부(denial of service)나 정보 누출의 위험을 제시해요.--profiling인자는 deprecated이며, 이제는 KubeScheduler DebuggingConfiguration으로 제공할 수 있어요. profiling은 kube-scheduler 구성에서enableProfiling을false로 설정해서 비활성화할 수 있어요.authorization-always-allow-paths: 이 경로들은 익명 인증(anonymous authorization)에 적합한 데이터로 응답해야 해요. 기본값은/healthz,/readyz,/livez예요.authentication-skip-lookup: 스케줄러가 인증 구성을 항상 API 서버에서 조회하도록false로 설정해요.authentication-tolerate-lookup-failure: 스케줄러가 인증 구성을 항상 API 서버에서 조회하도록false로 설정해요.authentication-kubeconfig: 스케줄러가 API 서버에서 인증 구성 옵션을 가져올 수 있도록 적절한 kubeconfig를 제공해야 해요. 이 kubeconfig 파일은 엄격한 파일 권한으로 보호해야 해요.
스케줄러 네트워킹 커맨드라인 옵션 (Scheduler networking command line options)
permit-port-sharing: 기본값false. 보안 영향을 이해하고 있다고 확신하지 않는 한 기본값을 사용해요.permit-address-sharing:SO_REUSEADDR을 통한 연결 공유를 비활성화하도록false로 설정해요.SO_REUSEADDR은TIME_WAIT상태에 있는 종료된 연결의 재사용을 초래할 수 있어요.bind-address: 대부분의 경우 kube-scheduler가 외부에서 접근 가능할 필요는 없어요. bind address를localhost로 설정하는 것이 안전한 관행이에요.
스케줄러 TLS 커맨드라인 옵션 (Scheduler TLS command line options)
tls-cipher-suites: 항상 선호하는 cipher suite 목록을 제공해요. 이렇게 하면 안전하지 않은 cipher suite로는 암호화가 일어나지 않아요.
커스텀 스케줄러를 위한 스케줄링 구성 (Scheduling configurations for custom schedulers)
커스텀 스케줄러를 사용할 때도 보안 관행은 동일하게 적용돼요. 인증·인가, 네트워킹, TLS 옵션을 위에서 설명한 것처럼 안전하게 구성하는 것이 중요해요.