Information Security Study

240328 쿠버네티스와 컨테이너 개념, 실습 환경 설정 (가상머신 설정, 쿠버네티스 설치 전 필요 도구 세팅) 본문

네트워크 캠퍼스/쿠버네티스

240328 쿠버네티스와 컨테이너 개념, 실습 환경 설정 (가상머신 설정, 쿠버네티스 설치 전 필요 도구 세팅)

gayeon_ 2024. 3. 29. 01:58

쿠버네티스와 컨테이너

 

쿠버네티스(Kubernetes)

  • 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 플랫폼이다.
  • Google에서 개발한 컨테이너 오케스트레이션 시스템의 오픈 소스 버전이다.
  • 컨테이너는 응용 프로그램, 라이브러리 및 종속성을 하나의 패키지로 묶는 가벼운 방법을 제공한다.
  • 애플리케이션의 환경에 관계없이 일관된 실행을 보장한다.

 

 

컨테이너

  • 격리된 환경에서 실행되며 호스트 운영 체제와 커널을 공유한다.
  • 컨테이너는 가상 머신보다 가볍고 빠르며 일관된 배포 및 실행 환경을 제공한다.

 

 

Kubernetes의 주요 기능

 

자동화된 배포 및 롤아웃

: Kubernetes는 새로운 애플리케이션 버전을 배포하고 이전 버전과 새 버전 사이의 전환을 관리한다. 롤아웃 중에 장애가 발생하면 자동으로 롤백한다.

 

자원 관리

: Kubernetes는 애플리케이션에 필요한 리소스를 관리하고 자원 사용률에 따라 확장하거나 축소한다. 이를 통해 애플리케이션의 성능을 최적화하고 비용을 절감할 수 있다.

 

자동화된 복구

: 어떤 노드나 컨테이너가 고장나면 Kubernetes는 자동으로 해당 컨테이너를 다른 노드로 이동시키거나 복구한다.

 

서비스 디스커버리와 로드 밸런싱

: Kubernetes는 서비스를 내부 또는 외부로 노출하고 자동으로 로드 밸런싱을 수행하여 트래픽을 분산한다.

 

보안

: Kubernetes는 네트워크 정책 접근 제어 및 보안 컨텍스트 관리를 통해 클러스터 보안을 강화한다.

 

 

 

 

오케스트레이션 (쿠버네티스 컨테이너

 

  • 오케스트레이션은 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 프로세스이다.
  • 이를 통해 애플리케이션의 운영을 단순화하고 확장성을 높이며 가용성을 보장한다.
  • 여러 컨테이너를 유기적으로 제어하도록 도와준다.

 

 

오케스트레이션의 목표

 

  1. 배포 관리
    • 목적
      • 새로운 애플리케이션 버전을 클러스터에 배포하고, 이전 버전과의 전환을 원활하게 처리한다. 또한 롤백과 같은 배포 관련 이슈를 자동으로 처리하여 서비스의 가용성과 안정성을 유지한다.
    • 기능
      • 배포 전략 설정: 롤링 업데이트, 블루/그린 배포 등 다양한 배포 전략을 설정하여 애플리케이션을 안전하게 업데이트한다.
      • 배포 오케스트레이션: 애플리케이션 배포 프로세스를 자동화하고 배포 중 발생할 수 있는 문제를 감지하고 처리한다.
  2. 제어 및 모니터링
    • 목적
      • 클러스터의 상태를 모니터링하고, 애플리케이션의 동작을 제어하여 원활한 운영을 보장한다. 이는 클러스터의 건강 상태를 유지하고 장애 발생 시 조치를 취함으로써 가용성을 최대화한다.
    • 기능
      • 리소스 모니터링: 클러스터 내 리소스 사용량을 모니터링하고, 이를 기반으로 리소스를 효율적으로 할당한다.
      • 이벤트 및 로그 모니터링: 애플리케이션의 이벤트와 로그를 모니터링하여 문제를 신속하게 진단하고 해결한다.
      • 자동화된 조치: 모니터링 결과에 따라 자동으로 조치를 취하여 장애를 방지하거나 최소화한다.
  3. 스케일링
    • 목적
      • 애플리케이션의 부하에 따라 자동으로 클러스터의 크기를 조정하여 성능을 최적화하고, 사용자의 요구에 따라 신속하게 대응한다.
    • 기능
      • 수평 스케일링: 애플리케이션 인스턴스의 개수를 자동으로 조정하여 부하를 분산하고, 사용자 요청에 대응한다.
      • 수직 스케일링: 애플리케이션의 각 인스턴스에 할당된 자원(메모리, CPU 등)을 자동으로 조정하여 성능을 최적화한다.
  4. 네트워킹
    • 목적
      • 컨테이너 간 통신을 관리하고, 서비스를 외부로 노출하여 사용자의 요청을 처리한다. 이는 애플리케이션의 네트워킹 환경을 관리하여 안전하고 효율적인 통신을 지원한다.
    • 기능
      • 서비스 디스커버리: 서비스를 동적으로 발견하고, 클라이언트 요청을 해당 서비스로 라우팅한다.
      • 로드 밸런싱: 네트워크 트래픽을 분산하여 서비스의 가용성을 높이고, 부하를 균형있게 분배한다.
      • 네트워크 정책: 네트워크 규칙을 설정하여 보안을 강화하고, 네트워크 트래픽을 제어한다.

 

 

서비스 디스커버리

: 각 pod를 DNS에 등록하고 ip를 부여해주며 필요에 따라서 로드밸런싱 수행한다.

 

 

자동화된 롤아웃, 롤백

: pod상태에 따라 자동으로 교체한다. 실패한 배포는 되돌릴수도 있다.

 

 

자체 복구

: pod의 상태를 체크해서 실패한 pod는 자동으로 복구. pod 장애 발생시 복구가 확인되기 전까지 외부 통신 차단한다.

 

 

자동 패킹

: pod가 요구하는 자원을 효율적으로 할당한다.

 


실습 환경 설정 

 

가상머신 세팅 -> 노션 참고

 

 

net-tools 설치

 

 

 

nano, ssh-import-id, tree 설치

 

 

 

apt update

 

 

 

방화벽 오픈

 

 

 

SWAP메모리는 쿠버네티스에서 권장되지 않는다.

 

컨테이너는 프로세스이기 때문에 기본적으로 메모리 영역에서 처리되는데

pod가 SWAP메모리에 배정되는 순간 실제 메모리보다 훨씬 성능이 안 좋은 영역에서 돌아서

다른 부분까지 병목을 유발할 수 있다.

 

그래서 스왑메모리는 사용 해제를 해야 한다.

 

free를 swapoff 전후로 실행해서 스왑메모리 할당이 꺼진 것을 확인한다.

 

위 사진에서 마지막 sudo sed~~ 명령어로 재부팅 시에도 스왑을 사용할 수 없도록 했다.

 

 

 

ntp를 설치하여 본체와 컨테이너 간 시간 동기화 설정을 한다.

 

 

 

ntp를 재기동하여 시간싱크로를 맞춘다.

 

 

 

위 명령어로 시차 보정 정보를 확인할 수 있다.

 

 

 

패킷 포워딩을 하기 위해 ip_forward 값을 1로 수정한다.

변경은 root로만 가능하다.

 

 

 

container d를 사용하도록 명령어를 추가했다.

또한 modeprobe 프로그램에서 overlay와 br_netfilter를 커널에서 쓸 수 있도록 등록했다.

 

 

---powershell로 환경 변경

 

 

노드간 통신을 위한 iptables에 브릿지 관련 설정을 추가했다.