본문 바로가기

k8s

[k8s]쿠버네티스 워크로드, 네트워킹

1. Pod와 컨테이너
1.1. Pod 기본 개념
- Pod는 쿠버네티스에서 가장 기본이 되는 배포 단위
- 하나 이상의 컨테이너를 포함할 수 있으며 네트워크와 스토리지 자원을 공유
- Pod 내의 모든 컨테이너는 동일한 노드에서 실행
- 각 Pod는 고유한 IP 주소를 할당받음
- Pod 내 컨테이너들은 localhost를 통해 서로 통신 가능

1.2. Pod 패턴
- 사이드카 패턴
  * 메인 컨테이너를 보조하는 추가 컨테이너 구성
  * 로그 수집기, 모니터링 에이전트 등으로 활용
  * 메인 컨테이너의 기능을 확장하거나 강화

- 앰배서더 패턴
  * 프록시 역할을 하는 컨테이너 추가
  * 네트워크 연결을 단순화하고 추상화
  * 서비스 디스커버리나 연결 관리를 담당

- 어댑터 패턴
  * 데이터 변환이나 프로토콜 변환을 담당
  * 외부 시스템과의 통합을 위한 인터페이스 제공
  * 표준화된 출력 형식으로 변환하는 역할

2. 워크로드 리소스
2.1. Deployment
- Pod의 선언적 업데이트를 관리하는 상위 수준 리소스
- 주요 기능:
  * 무중단 업데이트와 롤백 지원
  * 버전 관리 및 이력 추적
  * 자동 복구 및 스케일링
- Deployment 예시

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 200m
            memory: 256Mi


2.2. StatefulSet
- 상태를 가진 애플리케이션을 위한 특별한 워크로드
- 주요 특징:
  * 안정적인 고유 네트워크 식별자 제공
  * 순차적인 배포와 스케일링
  * 영구 스토리지 자동 프로비저닝
- 활용 사례:
  * 데이터베이스 클러스터 (MySQL, PostgreSQL)
  * 메시지 큐 시스템
  * 분산 캐시 시스템

2.3. DaemonSet
- 모든 노드에서 Pod를 실행하도록 보장
- 주요 용도:
  * 시스템 메트릭 수집기
  * 로그 수집기 (Fluentd, logstash)
  * 노드 모니터링 에이전트
- 노드 선택기를 통한 특정 노드 타겟팅 가능

3. 서비스와 네트워킹
3.1. 서비스 타입
- ClusterIP
  * 클러스터 내부 통신용 기본 서비스
  * 안정적인 내부 IP 제공
  * 로드밸런싱과 서비스 디스커버리 제공

- NodePort
  * 모든 노드의 특정 포트를 통해 서비스 노출
  * 포트 범위: 30000-32767
  * 개발 환경이나 테스트용으로 적합

- LoadBalancer
  * 클라우드 공급자의 로드밸런서와 통합
  * 외부 트래픽을 자동으로 분산
  * 프로덕션 환경에서 주로 사용

3.2. Ingress
- L7 계층의 로드밸런싱 제공
- 주요 기능:
  * URL 기반 라우팅
  * SSL/TLS 종료
  * 이름 기반 가상 호스팅
- Ingress 컨트롤러 예시:
  * NGINX Ingress Controller
  * HAProxy Ingress
  * Traefik

3.3. 네트워크 정책
- Pod 간 트래픽 제어를 위한 방화벽 규칙
- 네임스페이스 간 통신 제어
- 마이크로서비스 보안을 위한 필수 요소