Kubernetes - nginx 파드 배포와 서비스로 외부 연결

2025. 6. 21. 19:02·Kubernetes

쿠버네티스를 구성하는 핵심 리소스

Node

  • 쿠버네티스 클러스터에서 파드(Pod)를 실행하는 실제 컴퓨터다.
  • Minikube에서는 하나의 노드만 존재하며, 그 안에서 모든 리소스가 실행된다.

Pod

  • 컨테이너를 실행하기 위한 최소 실행 단위로, 컨테이너를 감싸는 껍데기다.
  • 보통 하나의 파드에는 하나의 컨테이너가 들어간다.
  • 컨테이너가 꺼지면 함께 없어지기 때문에, 파드를 통해 컨테이너를 관리한다.

ReplicaSet

  • 파드를 여러 개 유지하는 역할을 한다.
  • 예: nginx 파드를 항상 2개 실행 상태로 유지하도록 관리
  • 직접 만들 일은 거의 없고, Deployment가 내부적으로 자동으로 생성한다.

Deployment

  • 우리가 가장 많이 사용하는 리소스이며, 파드의 설정과 개수, 업데이트 전략을 모두 정의한다.
  • 실제 파드는 Deployment → ReplicaSet → Pod의 흐름으로 자동 생성된다.
  • 파드를 직접 만들지 않고, Deployment로 모든 관리를 맡긴다.

관계 구조 요약

Deployment → ReplicaSet → Pod → (실행) → Node
  • 우리는 보통 Deployment만 정의한다.
  • 그 외 리소스들은 쿠버네티스가 자동으로 만들어서 관리한다.

흐름

  • nginx 컨테이너를 쿠버네티스에 배포한다.
  • Deployment를 통해 파드를 생성하고 관리한다.
  • Service를 만들어 외부(브라우저)에서 접속할 수 있게 만든다.

deployment.yaml 작성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Deployment는 nginx 컨테이너를 포함한 파드를 2개 유지하도록 관리한다.(replicas : 2 -> ReplicaSet)

생성 명령어

kubectl apply -f deployment.yaml

 

생성된 리소스 확인

kubectl get deployments
kubectl get pods
kubectl get rs

 

deployment.yaml에서 replicas:2를 설정했기 때문에 nginx 파드 2개가 생성

 

Deployment와 ReplicaSet은 어떤 관계일까?

Deployment만 만들었는데 ReplicaSet이 자동으로 생성되었다. 실제로는 Deployment가 내부적으로 ReplicaSet을 만들고 파드를 유지하도록 함

Deployment → (자동 생성) → ReplicaSet → (관리) → Pod
  • Deployment는 파드의 정의와 개수를 설정하는 상위 리소스다.
  • ReplicaSet은 파드의 실제 복제본을 유지하고 관리한다.
  • 우리는 Deployment만 정의하면, ReplicaSet과 파드는 쿠버네티스가 자동 생성하고 유지한다.

Dashboard에서 확인

Service 생성 (NodePort)

파드는 직접 접근할 수 없으므로, 외부 연결을 위해 Service를 생성해야 한다.

service.yaml 작성

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080

이 설정은 외부에서 minikube IP:30080으로 nginx에 접속할 수 있도록 해준다.

생성 명령어

kubectl apply -f service.yaml

 

minikube IP 확인

minikube ip

 

 

브라우저에서 nginx 접속 확인

브라우저 주소창에 아래와 같이 입력한다:

http://192.168.49.2:30080

nginx의 기본 환영 페이지가 뜨면 배포 성공이다.

접속에러

Minikube가 Docker 드라이버 사용 중일 때는 외부에서 직접 브라우저로 접속하는 것이 차단될 수 있으므로, 터널링 서버를 수동으로 열어야 함

 

해결 방법: 서비스 터널링을 수동으로 열기

minikube service nginx-service

 

  • 브라우저가 자동으로 열리거나. 콘솔에 127.0.0.1:xxxxx 형식의 주소가 다시 표시됨
  • 내부적으로 포트 터널링을 열어서 nginx 서비스에 접근할 수 있음

클러스터 리소스 전체 확인

kubectl get all

 

 

'Kubernetes' 카테고리의 다른 글

Kubernetes - GitOps 기반 배포 자동화 Argo CD  (3) 2025.06.21
Kubernetes - 기초 개념과 클러스터 구조 이해  (0) 2025.06.21
'Kubernetes' 카테고리의 다른 글
  • Kubernetes - GitOps 기반 배포 자동화 Argo CD
  • Kubernetes - 기초 개념과 클러스터 구조 이해
jaeon.cloud
jaeon.cloud
  • jaeon.cloud
    JEONG JAE ON
    jaeon.cloud
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Docker (8)
      • Cloud (7)
      • AWS (14)
      • Network (9)
      • Linux (1)
      • Python (7)
      • Javascript (3)
      • React (5)
      • Project (3)
      • Kubernetes (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    Python
    kubernetes
    3-tier Architecture
    docker
    http
    AWS
    cors
    lambda
    클라우드
    react
    네트워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jaeon.cloud
Kubernetes - nginx 파드 배포와 서비스로 외부 연결
상단으로

티스토리툴바