전공영역 공부 기록

쿠버네티스 Ingress를 이용한 nginx서비스 배포

악분 2020. 12. 3. 08:52
반응형

이번 글에서는 쿠버네티스 ingress를 이용해서 nginx서비스를 배포하고 접근하는 방법을 살펴봅니다.

※ pod, deployment, service에 대한 지식 필요

ㅁ 실습환경

- virtualbox로 설치한 쿠버네티스

- master node 1개, worker node 1개

 

ㅁ 영상: https://youtu.be/ASQ9iuSmnMU

 


 

1. 기존 서비스를 이용한 접근

쿠버네티스에서 운영하는 컨테이너에 접근하기 위해서 서비스를 만듭니다. 그리고 "NodeIP:서비스포트"로 컨테이너에 접근하죠. 예를 들어 그림1에서는 NodeIP:32468을 요청하면 서비스에 연동된 nginx컨테이너로 접근합니다.

그림1 서비스 접근 ​

 


2. Ingress를 이용한 접근

각 서비스를 생성하고 접근할 때마다 각각 고유한 포트를 입력해줘야 합니다. N개의 서비스에 접근하려면 N개의 포트번호를 관리해야한다는 뜻이죠.

Ingress는 서비스 포트를 적지 않고 경로로 접근(라우팅)하게 해줍니다. 예를 들어 서비스 포트를 입력하는 대신 /Login페이지를 요청하면 서비스1로 연결되고, /Logout페이지를 요청하면 서비스2로 연동을 해주는 역할이 Ingress입니다.

그림2 ingress 접근

 


3. Nginx-Ingress Controller 설치

Ingress를 사용하기 위해서는 Ingress-Controller를 설치해야합니다. 간단하게 설치할 수 있는 컨트롤러는 Nginx-controller입니다. 저는 로컬환경에서 쿠버네티스를 운영하기 때문에 문서[1]에서 제공하는 "Bare-metal"설치 방법을 따랐습니다.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml

 

ingress-nginx-controller pod가 running상태이면 설치가 끝난 겁니다.

그림3 nginx-ingress-controller설치 확인

 

서비스의 포트를 확인하고 접근이 가능한지 확인합니다. ingress에 서비스가 연동되어 있지 않기 때문에 503에러가 발생한 것이 정상입니다.

그림5 ingress 요청

 


4. deployment와 service 생성

nginx이미지를 사용한는 deployment를 생성합니다. 그리고 해당 deployment를 연결시키는 서비스를 생성합니다. 간단한 예제이기 때문에 명령어로 생성했습니다.

 

kubectl create deploy nginx --image=nginx
kubectl expose deploy nginx --type=NordPort --port=80 --target-port=80

 

 

생성한 서비스 포트를 확인하고 접속이 잘 되는지 확인합니다.

그림6 서비스 요청 성공

 


5. Ingress 생성

공식문서[2]에서 제공하는 yaml파일을 활용해서 ingress를 생성합니다. host는 별도로 운영체제의 hosts파일을 설정해주셔야 합니다(리눅스: /etc/hosts, 윈도우: c:\Windows\System32\Drivers\etc\hosts).

※아래 ingress설정은 foo.bar.com/abc경로 요청이 오면 nginx서비스 80번 포트로 해당 요청을 넘겨주겠다는 의미입니다.

 

kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: "foo.bar.com"
    http:
      paths:
      - path: /abc
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80

 


 

6. Ingress 접속(연결 요청)

[그림 5]에서 확인한 ingress주소에서 /abc경로를 입력하면 nginx 메인 페이지가 화면에 나옵니다.

그림7 ingress연결 요청 성공

 


7. 참고자료

▶ [1] ingress-controller 설치문서: https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal

▶ [2] ingress공식문서: https://kubernetes.io/ko/docs/concepts/services-networking/ingress/

반응형