IT/Kubernetes

[kubernetes/쿠버네티스] nginx 서버 배포하기

HK92 2024. 7. 5. 22:01

0. 작업 순서

1) nginx 배포

2) service 배포

3) 접속 테스트

1. Nginx 배포하기

  • yaml파일을 활용해서 nginx를 배포해보겠다.

yaml 파일 생성

# vi nginx-deploy.yaml           # 아래 내용으로 yaml 파일 생성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-server
  labels:
    app: server
spec:
  replicas: 2                             # pod 생성 수
  selector:
    matchLabels:
      app: server
  template:
    metadata:
      name: nginx-server
      labels:
        app: server
    spec:
      containers:
        - name: server
          image: nginx:latest
          ports:
            - containerPort: 80       # 컨테이너 port 80 오픈

  • pod 생성 후 Cluster 내부에서는 통신이 가능하지만, 컨테이너의 port를 열어주지 않으면 외부와 통신이 불가능하다.
  • nginx는 기본적으로 80 포트를 오픈하기 때문에 추가로 컨테이너 port 80을 열어주었다.

nginx 배포

# kubectl create -f nginx-deployment.yaml           # 생성한 yaml로 nginx 배포

pod 2개를 포함하는 deployment 1개가 실행되는 것을 확인

 

2. Service 배포하기

  • yaml파일을 생성하여 service를 배포해보겠다.

yaml 파일 생성

# vi nginx-service.yaml           # 아래 내용으로 yaml 파일 생성

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: server
spec:
  selector:
    app: server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---                                            # 하나의 파일에 여러 내용을 "---" 을 통해 작성할 수 있다. 
apiVersion: v1
kind: Service
metadata:
  name: nginx-service-node
  labels:
    app: server
spec:
  selector:
    app: server
  type: NodePort                    # 지정하지 않으면 기본적으로 ClusterIP로 생성됨
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080               # nodePort를 통해 외부와 통신가능

  • nginx-service와 nginx-service 두개를 작성하였습니다.
  • 차이점은 nodePort 유무입니다.

Service 배포

# kubectl create -f nginx-service.yaml         

서비스 2개가 생기는 것 확인

  • service의 type에서 nginx가 ClusterIP, NodePort 두 개가 생성되어 있다.
  • 기본적으로 지정하지 않으면 ClusterIP로 생성됩니다.(외부 통신 불가 상태)
  • NodePort에서 80:30080/TCPServicePort:NodePort/Protocol 형태이다.

3. 테스트 결과

  • 저는 virtualbox로 구성되어 있는 환경이라 포트포워딩을 걸어 준 상태입니다.

정상 접속 확인

 

정리

  • 맨 처음 deployment로 2개 pod가 생성되었고 1,2번 node에 각 1개씩 pod가 배포되었다.
  • NodePort로 설정된 Service로 인해 외부에서 접속이 가능한 상태이다.
  • 각 노드에 pod가 배포되어 있기 때문에 각 노드IP에 30080 포트로 접속이 가능하다.