프로덕션 클러스터에서 보안을 강화하고 문제 해결을 간소화하는 Kubernetes Ephemeral Containers

Kubernetes의 일시적 컨테이너는 운영자가 동일한 Pod 내에 단기적인 컨테이너를 생성하여 실행 중인 Pod를 디버그하고 문제를 해결할 수 있도록 하는 강력한 기능입니다. 이는 별도의 환경에서 재현할 수 없는 문제에 특히 유용합니다. 일시적 컨테이너를 사용하면 실행 중인 Pod에 컨테이너를 연결하고 파일 시스템, 네트워크 설정 또는 실행 중인 프로세스를 검사한 후, Pod의 주요 컨테이너에 영향을 주지 않고 컨테이너를 폐기할 수 있습니다.

일시적 컨테이너란?

일시적 컨테이너는 애플리케이션 작업의 일부로 실행되지 않고 디버깅 목적으로 기존 Pod에 추가되는 특별한 컨테이너입니다. 이들은 Pod 내의 다른 컨테이너와 동일한 리소스(네트워크 네임스페이스, 볼륨 등)를 공유하므로 실시간 진단에 적합합니다. 디버깅이 완료되면 전체 Pod를 다시 생성할 필요 없이 일시적 컨테이너를 제거할 수 있습니다.

주요 포인트

  • 단기: 일시적 컨테이너는 디버깅 또는 문제 해결을 위해서만 사용됩니다.
  • 비파괴적: Pod의 기존 애플리케이션 컨테이너에 영향을 주지 않습니다.
  • 리소스 공유: Pod와 스토리지 볼륨 및 네트워크 네임스페이스와 같은 리소스를 공유하여 디버깅을 더욱 강력하게 만듭니다.

일시적 컨테이너와 관련된 보안 고려사항

일시적인 컨테이너는 프로덕션 포드에 대한 장기적인 접근을 제한하여 보다 안전한 디버깅 접근 방식을 제공합니다. 엄격한 RBAC 규칙을 적용하여 권한이 있는 사용자만 일시적인 컨테이너를 추가하고 실행할 수 있도록 하여 잠재적인 위협의 가능성을 최소화할 수 있습니다. 이러한 컨테이너는 디버깅이 완료되면 사라지기 때문에 공격 면적이 줄어들어 전체 클러스터 보안이 강화됩니다.

사용 사례

  • 애플리케이션 충돌 문제 해결: 충돌하거나 충돌 중인 컨테이너에서 로그를 검사하거나 디버깅 도구를 실행해야 할 때, 일시적인 컨테이너를 사용하면 주 컨테이너의 구성에 영향을 주지 않고 실행 중인 환경에 들어갈 수 있습니다.
  • 네트워크 디버깅: 일시적인 컨테이너에 디버깅 도구(예: tcpdump, netstat)를 설치하여 포드의 네트워크 네임스페이스 내에서 네트워크 문제를 진단할 수 있습니다.
  • 실시간 파일 시스템 검사: 파일 손상 또는 잘못된 파일 경로가 의심되는 경우, 일시적인 컨테이너를 사용하여 실시간으로 파일 시스템을 확인할 수 있습니다.

전제 조건

  • 쿠버네티스 버전: 일시적인 컨테이너는 EphemeralContainers 기능이 일반적으로 사용 가능한(GA) 최소 쿠버네티스 1.23 이상이 필요합니다. 이전 버전의 쿠버네티스에서는 EphemeralContainers 기능 게이트를 활성화해야 할 수 있습니다.
  • kubectl: 로컬 kubectl 클라이언트가 클러스터의 제어 플레인과 같은 버전이거나 최신 버전인지 확인하세요.
  • 충분한 RBAC 권한: kubectl debug 명령을 사용하고 Pods를 업데이트할 권한이 필요합니다 (임시 컨테이너는 Pod의 사양을 업데이트하여 추가됩니다).

단계별 가이드: 임시 컨테이너 사용하기

아래는 EKS (AWS의 Elastic Kubernetes Service), AKS (Azure Kubernetes Service), GKE (Google Kubernetes Engine) 또는 온프레미스 클러스터를 포함한 모든 Kubernetes 환경에서 작동하는 일반적인 프로세스입니다. 우리는 임시 컨테이너를 추가하는 주요 메커니즘인 kubectl debug 명령에 초점을 맞출 것입니다.

클러스터 구성 확인

Shell

 

  • 서버 버전이 적어도 1.23 이상인지 확인하십시오.
  • 클라이언트 버전도 호환되는지 확인하십시오.

EKS 또는 AKS와 같은 관리형 환경에 있는 경우, 클러스터 버전을 클라우드 제공업체의 대시보드나 CLI에서 확인하여 1.23 이상인지 확인하십시오.

디버그하려는 Pod 식별

특정 네임스페이스의 Pods를 나열하십시오:

Shell

 

문제 해결해야 하는 Pod 이름을 선택하십시오. 예를 들어: my-app-pod-abc123.

kubectl debug를 사용하여 임시 컨테이너 추가

kubectl debug 명령을 사용하여 임시 컨테이너를 추가하십시오. 예를 들어, 간단한 Ubuntu 이미지를 사용할 것입니다:

Shell

 

플래그의 설명은 다음과 같습니다:

  • my-app-pod-abc123: 기존 Pod의 이름.
  • –이미지 = ubuntu: 에펨럴 컨테이너에 사용할 도커 이미지입니다.
  • –대상 = my-container: (옵션) 네임스페이스 공유를 위해 Pod 내의 대상 컨테이너를 지정합니다. 일반적으로 이는 Pod 내의 주 컨테이너입니다.
  • –대화형 = true 및 –tty = true: 에펨럴 컨테이너 내에서 쉘 세션을 가져올 수 있습니다.

위의 명령을 실행하면 기존 Pod 내에서 에펨럴 컨테이너 내에서 쉘 프롬프트를 얻을 수 있습니다. 이제 ls, ps, netstat와 같은 디버깅 명령 또는 추가 패키지 설치를 실행할 수 있습니다.

에펨럴 컨테이너 생성 확인

다른 터미널에서 또는 에펨럴 컨테이너의 쉘을 종료한 후에 다음을 실행하십시오:

Shell

 

spec 또는 status 하위에 에펨럴 컨테이너를 설명하는 새로운 섹션이 표시됩니다.

디버그 및 문제 해결

에펨럴 컨테이너 내부에서 다음을 수행할 수 있습니다:

  • 로그 또는 앱 구성을 확인합니다..
  • 네트워크 연결성을 확인하기 위해 curl, wget, telnet과 같은 디버깅 도구를 사용합니다.
  • 응용 프로그램 구성을 확인하기 위해 환경 변수를 검사합니다.
Shell

 

에펨럴 컨테이너 정리

일시적인 컨테이너는 파드가 파괴되거나 수동으로 제거할 때 자동으로 제거됩니다. 전체 파드를 파괴하지 않고 파드에서 일시적인 컨테이너를 제거하려면(지원되는 버전에서) 파드 사양을 패치할 수 있습니다. 그러나 일반적으로 일시적인 컨테이너는 장기간 존재하기 위한 것이 아닙니다. 파드를 삭제하거나 배포를 축소하면 일시적인 컨테이너도 제거됩니다.

관리형 서비스에 대한 특정 참고사항

아마존 EKS

  • 귀하의 EKS 클러스터가 Kubernetes 1.23 이상에서 실행 중인지 확인하십시오.
  • IAM 권한이 kubectl debug를 수행할 수 있도록 설정되어 있는지 확인하십시오.
  • 구버전 EKS(1.22 이하)를 사용 중이라면 EphemeralContainers 기능 게이트를 활성화해야 합니다.

Azure AKS

  • 필요한 경우 Azure CLI(az aks update)를 사용하여 AKS 클러스터를 호환 가능한 버전으로 업그레이드하십시오.

귀하의 kubectl 컨텍스트가 AKS 클러스터로 설정되어 있는지 확인하십시오:

Shell

 

기타 관리형 또는 온프레미스 클러스터

  • 클러스터의 문서를 확인하거나 제공업체에 문의하여 일시적인 컨테이너가 활성화되어 있는지 확인하십시오.
  • 대부분의 최신 온프레미스 솔루션(OpenShift, Rancher 등)은 Kubernetes 1.23 이상에서 기본적으로 일시적인 컨테이너가 활성화되어 있지만, 구버전을 사용 중이라면 기능 게이트를 수동으로 활성화해야 할 수 있습니다.

모범 사례

  • 최소 이미지 사용: 오버헤드를 줄이기 위해 경량 이미지를 선택하십시오(예: busybox, distroless 디버깅 이미지).
  • RBAC 제한: 잠재적인 보안 위험을 최소화하기 위해 일시적인 컨테이너를 생성할 수 있는 대상을 제한합니다.
  • 모든 디버그 세션 기록: 감사 및 준수를 위해 일시적인 컨테이너 사용을 추적합니다.
  • 일시적인 컨테이너에 의존하지 마세요: 디버깅 용도로만 사용됩니다. 영구적인 사이드카 또는 헬퍼 컨테이너가 필요하면 처음부터 Pod 사양에 구성하세요.

결론

일시적인 컨테이너는 기본 애플리케이션 컨테이너에 영향을 주지 않고 실시간으로 문제를 해결할 수 있는 다재다능하고 강력한 방법입니다. EKS, AKS, 온프레미스 또는 기타 관리형 솔루션에서 Kubernetes를 실행하든, 일시적인 컨테이너를 이해하고 사용하면 평균 복구 시간(MTTR)을 크게 줄이고 운영 효율성을 향상시킬 수 있습니다.

이들은 전통적인 문제 해결 방법을 보완하며, 복잡한 애플리케이션 문제를 진단하기 위한 모든 플랫폼 팀의 도구 키트의 일환이 되어야 합니다. 위에 설명된 단계를 따르면, 환경에서 일시적인 컨테이너를 자신 있게 배포하고 디버깅 프로세스를 간소화할 수 있습니다.

저자 노트: 실제 Kubernetes 문제 해결에서 발췌한 이 가이드는 생산 환경에서 Pods를 신속하고 중단 없이 디버깅하는 데 도움을 주는 것을 목표로 합니다.

Source:
https://dzone.com/articles/enhancing-security-troubleshooting-in-production-clusters