본문 바로가기

* Twodragon/보안 강의 (Course)

클라우드 시큐리티 과정 5기 - 7회차 Docker 및 Kubernetes 이해

안녕하세요, Twodragon입니다. 

이번 포스트에서는 클라우드 보안 과정 5기의 Dcoker 및 Kubernetes 이해에 관련된 내용을 다루고자 합니다. 이 과정은 게더 타운에서 진행되며, 각 세션은 20분 강의 후 5분 휴식으로 구성되어 있습니다. 이러한 구성은 온라인 강의의 특성상 눈의 피로를 줄이고, 멘티 분들의 집중력을 최대화하기 위함입니다. 여러분들과 함께 다양한 Dcoker 및 Kubernetes 관련 주제를 깊이 있게 다루어 보고자 합니다.

 

7회차 Docker 및 Kubernetes 이해 (from ChatGPT)

 


 

10:00 - 10:20 근황 토크 & 과제 피드백

  • 한 주간의 근황 공유 및 토론
  • 영상 & 과제 피드백: 어려웠던 점, 개선점 공유
  • 보안 이슈 논의

10:25 - 11:00 컨테이너와 Docker, Kubernetes

  • Docker 이해
  • Kubernetes 이해

11:10 - 11:40 Kubernetes 네트워크 및 보안

  • Kubernetes 네트워크
  • Kubernetes 보안

11:50 - 12:00 필수적인 실습을 통한 이론 정리 


근황 토크 & 과제 피드백

첫 세션에서는 근황 토크와 멘티들 간의 영상 및 과제 토론, 그리고 과제 피드백을 진행합니다. 과제를 통해 학습자들이 경험한 어려움, 개선점 등을 공유하며, 최근 취약점 관련 보안 업데이트 권고 사항을 논의합니다.

최근 취약점 업데이트 및 사이버 보안 주의보를 요약했습니다 :

  • 기업 문자발송 시스템 및 계정 해킹을 통한 스팸문자 발송 증가에 따른 주의 필요 (2024-06-01): 최근 문자발송 시스템 해킹으로 스팸 문자 발송이 증가하여 기업의 보안 점검 및 국민의 주의가 필요합니다. 관리자 단말 보호조치, 웹서버 취약점 점검, 비밀번호 강화 등 보안 조치를 강화해야 합니다. 
  • 정부기관 사칭 피싱메일 주의 및 도메인 보안설정 권고: 최근 해커가 정부기관을 사칭한 피싱메일을 유포하여 사용자 주의가 필요합니다. 이메일 발신자의 진위 여부를 확인하고 메일 보안 표준기술을 적용해야 합니다.
  • GitLab은 XSS 취약점(CVE-2024-4835)을 해결한 보안 업데이트를 발표했으므로, 영향을 받는 버전을 사용하는 시스템은 최신 버전으로 업데이트해야 합니다.

컨테이너와 Docker, Kubernetes

  • 컨테이너와 Docker의 흐름 : https://www.inflearn.com/blogs/3576 
  • DevOps 한방 정리 : https://www.inflearn.com/blogs/4047
  • Docker: 컨테이너 기반 애플리케이션을 쉽게 만들고 배포할 수 있게 해주는 오픈 소스 플랫폼입니다. Docker를 사용하면 개발자가 애플리케이션을 컨테이너 이미지로 패키징하고, 이를 어디서나 실행할 수 있게 됩니다.
  • VM vs 컨테이너: VM은 하이퍼바이저를 통해 완전한 운영체제를 가상화하여 각기 다른 환경을 제공합니다. 반면, 컨테이너는 호스트 운영체제의 커널을 공유하여 더 경량화된 환경을 제공합니다.
  • 컨테이너와 DevOps: 컨테이너는 CI/CD 파이프라인에서 중요한 역할을 합니다. 개발, 테스트, 배포의 각 단계에서 동일한 환경을 제공하여 일관성을 유지할 수 있습니다.
 

[쿠버네티스] 컨테이너 한방 정리 #3 - 일프로님의 블로그 - 인프런 | 커뮤니티

[쿠버네티스] 컨테이너 한방 정리 #3 - 해당 블로그는 [쿠버네티스 어나더 클래스] 강의에 일부 내용입니다. 많은 관심 부탁 드려요!강의 링크 : https://inf.run/NzKy  기술의 흐름으로 이해하는 컨테

www.inflearn.com

 

[kubernetes] 데브옵스 한방정리 #8 - 일프로님의 블로그 - 인프런 | 커뮤니티

[kubernetes] 데브옵스 한방정리 #8 - 해당 블로그는 [쿠버네티스 어나더 클래스] 강의에 일부 내용입니다. 많은 관심 부탁 드려요!강의 링크 : https://inf.run/NzKy 이번 블로그에서는 아래 DevOps를 구성

www.inflearn.com

  • Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 시스템입니다. Google에서 개발하였으며, 현재는 CNCF(Cloud Native Computing Foundation)에서 관리하고 있습니다.

쿠버네티스의 구성 요소 간 통신 (컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 도서)

Kubernetes와 Docker의 차이점

  • Docker는 컨테이너 생성 및 관리를 위한 도구
  • Kubernetes는 이러한 컨테이너들을 오케스트레이션하여 대규모 분산 시스템을 관리
  • Docker는 단일 노드 환경에서의 애플리케이션 실행을 중점
  • Kubernetes는 다중 노드 환경에서의 애플리케이션 배포, 확장, 자가 복구 등을 자동화

 

 

Minikube를 이용한 Kubernetes 실습

Minikube는 로컬에서 Kubernetes 클러스터를 실행할 수 있게 해주는 도구입니다. 이를 통해 Kubernetes의 기본 개념과 동작 방식을 쉽게 이해할 수 있습니다.

#minikube 설치 및 시작
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start

 

#Pod생성
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
kubectl expose deployment hello-minikube --type=NodePort
#Pod확인
kubectl get pod

Kubernetes 네트워크

  • Pod: 쿠버네티스에서 가장 작은 배포 단위로, 하나 이상의 컨테이너로 구성됩니다. 각 Pod는 고유한 IP 주소를 가지며, 이 IP를 통해 다른 Pod와 통신할 수 있습니다.
  • Network Namespace: 각 Pod는 고유의 네트워크 네임스페이스를 가지며, 이 네트워크 네임스페이스를 통해 다른 Pod와 격리됩니다.
  • 서비스(Service): 여러 Pod를 하나의 네트워크 엔드포인트로 묶는 추상화 계층입니다. 서비스는 클러스터 내에서 안정적인 네트워크 접점을 제공하여, Pod가 삭제되거나 생성되어도 항상 동일한 주소로 접근할 수 있게 합니다.
  • ClusterIP: 기본 서비스 유형으로, 클러스터 내에서만 접근 가능한 가상 IP를 제공합니다.
  • NodePort: ClusterIP에 추가하여, 클러스터 외부에서 노드의 특정 포트를 통해 접근할 수 있게 합니다.
  • Load Balancer: 클라우드 제공자의 로드 밸런서를 사용하여 외부에서 접근할 수 있는 서비스를 제공합니다.
  • DNS: 쿠버네티스는 DNS를 사용하여 서비스 디스커버리를 지원합니다. 각 서비스는 DNS 엔트리를 가지며, 이를 통해 서비스 이름으로 다른 서비스에 접근할 수 있습니다.
  • 네트워크 플러그인 CNI(Container Network Interface): 다양한 네트워크 플러그인을 지원하는 표준 인터페이스입니다. 일반적인 CNI 플러그인으로는 Calico, Flannel, Weave 등이 있습니다. 각 플러그인은 네트워크 격리, 네트워크 정책, IPAM(IP Address Management) 등을 제공합니다.
  • 네트워크 정책: 네트워크 트래픽을 제어하기 위한 규칙 집합으로, 어떤 Pod가 다른 Pod에 접근할 수 있는지 정의합니다. 이를 통해 보안을 강화할 수 있습니다.

쿠버네티스 네트워크의 주요 특성

  • IP-per-Pod: 각 Pod는 고유한 IP를 가지며, 같은 네임스페이스 내에서 직접 통신할 수 있습니다.
    예시) 각 방은 고유의 전화번호를 가지고 서로 통화할 수 있습니다.
  • Flat Network: 모든 Pod는 평면 네트워크를 구성하며, 같은 네임스페이스 내에서 서로 통신할 수 있습니다.
    예시)  방 A에서 방 B로 이동하려면 복도만 지나면 됩니다.
  • 포트 충돌 없음: 각 Pod가 고유한 IP를 가지므로, 포트 충돌 없이 동일한 포트를 사용할 수 있습니다.
    예시) 방 A와 방 B가 모두 1234번을 사용하더라도, 방 A의 전화는 101-1234, 방 B의 전화는 102-1234로 각각 고유하게 구분됩니다.

이러한 네트워크 특성 및 구성 요소를 통해 쿠버네티스는 확장성과 유연성을 제공하며, 클러스터 내 다양한 애플리케이션이 원활하게 통신할 수 있도록 지원합니다.

컨테이너 및 Kubernetes 보안

Kubernetes 환경에서 보안은 매우 중요합니다. 다음은 보안 강화를 위한 몇 가지 팁입니다.

  • 네트워크 보안 (네트워크 정책 설정): 네트워크 정책을 통해 Pod 간의 통신을 제어합니다.
     예시) 특정 네임스페이스 내의 Pod들만 서로 통신할 수 있도록 하거나, 특정 IP 범위에서만 접근할 수 있도록 제한합니다.
  • 접근 제어 (RBAC, Role-Based Access Control): 사용자와 서비스의 권한을 최소화하여 관리합니다.
    예시) 개발자는 애플리케이션 배포 권한만, 운영자는 클러스터 관리 권한만 가지도록 설정합니다.
  • 컨테이너 이미지 보안 (컨테이너 이미지 서명): 신뢰할 수 있는 컨테이너 이미지만 사용하도록 이미지 서명을 검증합니다.
    예시) Notary, Cosign과 같은 도구를 사용하여 컨테이너 이미지 서명을 검증합니다.
  • 런타임 보안  Pod Security Admission (PSA): Pod의 보안 설정을 검토하고 제한하는 메커니즘으로, Pod Security Policies(PSP)를 대체합니다. PSA를 통해 Pod가 생성되기 전에 보안 규칙을 적용합니다.
    예시) Pod가 루트 권한으로 실행되지 않도록 하거나, 특정 네트워크 접근을 제한하는 규칙을 설정합니다.
  • 시크릿 및 구성 관리 (Kubernetes Secrets): 시크릿을 사용하여 암호, 토큰, 키와 같은 민감한 데이터를 안전하게 저장하고 관리합니
    예시) 애플리케이션의 데이터베이스 암호를 시크릿으로 저장하여 환경 변수로 불러와 사용합니다.
  • 모니터링 및 감사 : 클러스터의 활동을 모니터링하고 로그를 수집하여 이상 징후를 조기에 탐지합니다. 그리고, 쿠버네티스의 감사 로그를 활성화하여 클러스터에서 발생하는 모든 이벤트를 기록하고 분석합니다.
    예시) Prometheus, Grafana, ELK 스택 등을 사용하여 클러스터 상태와 로그를 모니터링합니다. 그리고, kubectl 커맨드 사용 기록, API 요청 등의 활동을 감사 로그에 기록하여 보안 분석에 활용합니다.
  • 자동화된 보안 도구 (CI/CD 파이프라인 보안 및 보안 툴): CI/CD 파이프라인에서 이미지 스캔을 자동화하여 취약점이 있는 이미지를 배포하지 않도록 합니다. 그리고, 다양한 보안 도구를 사용하여 클러스터와 컨테이너의 보안을 강화합니다.
    예시) Jenkins, GitLab CI, CircleCI 등의 파이프라인에서 Clair, Trivy와 같은 도구를 사용하여 이미지 스캔을 통합합니다. 그리고, Aqua Security, Twistlock, Sysdig Secure 등의 도구를 사용하여 런타임 보안, 이미지 스캔, 네트워크 보안 등을 강화합니다.

종합적으로 쿠버네티스 및 컨테이너 보안을 위해서는 네트워크 정책, 접근 제어, 이미지 서명 검증, 런타임 보안, 시크릿 관리, 모니터링 및 감사, 자동화된 보안 도구 등의 다양한 전략을 통합적으로 적용하는 것이 중요합니다. 이러한 방법들을 통해 쿠버네티스 환경의 보안을 전반적으로 강화할 수 있습니다.

필수적인 실습을 통한 이론 정리 

이번 포스팅에서는 Docker와 Kubernetes에 대해 알아보았습니다. Docker는 컨테이너를 사용하여 애플리케이션의 이식성을 높이고, Kubernetes는 이러한 컨테이너를 효과적으로 관리합니다. 두 기술을 활용하면 클라우드 환경에서의 애플리케이션 배포와 관리를 자동화할 수 있습니다. 실습을 통해 직접 경험해 보시기 바랍니다.