Kubernetes

Kubernetes 기초 - Ingress(1)

사실 나도 모름 2023. 12. 20. 18:04
  1. Ingress 란             ←  오늘 볼 내용
  2. Ingress Controller 설치             ←  오늘 볼 내용
  3. 실습

1. Ingress 란

인그레스(Ingress)도 API 중에 하나다.

쿠버네티스에서 HTTP나 HTTPS를 통해 클러스터 내부의 서비스를 외부로 노출하는 역할을 한다.

인그레스의 기능은 다음과 같다.

  • Service에 외부 URL을 제공 : 인그레스를 사용하면 클러스터 외부에서 특정 URL 또는 도메인으로 들어오는 트래픽을 쿠버네티스 내부의 서비스로 라우팅할 수 있다.
  • 트래픽을 로드밸런싱 : 인그레스는 백엔드 서비스에 대한 트래픽 로드 밸런싱을 제공한다. 여러 백엔드 서비스로 들어오는 트래픽을 분산하여 서비스의 가용성과 성능을 향상시킬 수 있다.
  • SSL 인증서 처리 : 인그레스를 통해 HTTPS 트래픽을 처리할 수 있으며, SSL 인증서를 관리하여 보안 통신을 제공할 수 있다.
  • Virtual hosting을 지정 : 인그레스는 가상 호스팅을 지원하며, 단일 IP 주소 또는 도메인에 여러 서비스를 호스팅할 수 있다. 각 서비스는 고유한 경로 또는 도메인에 매핑될 수 있다.

 

https://kubernetes.io/docs/images/ingress.svg

 

 

 

인그레스는 서비스에 대한 룰을 정의하여 어떻게 트래픽을 적절한 서비스로 라우팅할 것인지 지정하는 API고 인그레스 컨트롤러는 정의된 인그레스 규칙에 따라 트래픽을 라우팅하는 역할을 한다.

인그레스 컨트롤러는 쿠버네티스에서 기본적으로 제공하는 것은 아니고 다양한 오픈 프로젝트나 벤더들을 통해 제공되는데 우리는 Nginx Ingress Controller를 통해 구현해볼 예정이다.

 

https://kubernetes.io/docs/images/ingressFanOut.svg

 

인그레스 yaml 구조

 

Ingress의 yaml파일 구조는 다음과 같다.

참고용으로만 알아두자.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-page
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /
        pathType: ImplementationSpecific	# default
        backend:
          service:
            name: home
            port:
              number: 80
      - path: /login
      	pathType: ImplementationSpecific	# default
        backend:
          service:
            name: login
            port: 
              number: 80

 

 

백엔드 부분을 다음과 같이 써도 동일한 결과가 나온다.

path: /
  backend:
    serviceName: home
    servicePort: 80
path: /login
  backend:
    serviceName: login
    servicePort: 80

 

 

위 Ingress는 URL주소 뒤에 / 를 붙이는 경우 홈 페이지를 표시하고 /login 을 붙이는 경우 로그인 페이지 표시하도록 Rule을 정의한 것이다.

 

 

 

 


2. Ingress Controller 설치

그럼 Nginx Ingress Controller를 설치해보자.

별로 어렵진 않고 yaml 파일 하나만 실행하면 끝이다.

 

https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters

 

Installation Guide - Ingress-Nginx Controller

Installation Guide There are multiple ways to install the Ingress-Nginx Controller: with Helm, using the project repository chart; with kubectl apply, using YAML manifests; with specific addons (e.g. for minikube or MicroK8s). On most Kubernetes clusters,

kubernetes.github.io

 

 

위 가이드를 통해 설치하되 AWS와 같은 퍼블릭 클라우드 환경이 아닌 프라이빗 클라우드나 VM을 통해 설치하는 경우에는 Bare-metal 쪽의 가이드로 설치한다.

 

 

yaml파일의 구성 내용을 보고 싶다면 아래 명령을 통해 yaml파일을 다운로드받은 후 확인해보면 된다.

# 파일 다운로드
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/baremetal/deploy.yaml

 

 

굳이 다운로드하기 싫다면 그냥 바로 실행해도 상관없다.

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

deploy.yaml

 

파일의 이름은 deploy.yaml이다.

내부에는 Namespace부터 시작해서 ServiceAccount, Role, Job과 같은 다양한 컨트롤러와 API들이 있는데 그 중에서 우리가 저번에 배운 Service가 있다.

ClusterIP, NodePort 등의 Service도 함께 배포해서 단일진입점을 만들고 노드들의 포트를 예약하게 되어 있다.

 

 

# 파드 확인
kubectl get pod -n ingress-nginx

# 서비스 확인
kubectl get svc -n ingress-nginx

ingress-nginx 네임스페이스에 있는 파드
ingress-nginx 네임스페이스에 있는 서비스

 

 

정상적으로 설치를 완료하였다.

생성된 ingress controller에게 rule을 정의하여 바인딩하기만 하면 실제 웹서비스와 같은 형태의 운영을 할 수 있게 된다.

 

 

 

실습 내용은 웹페이지를 구현 후에 올릴 예정이다.

 

 


 

 

https://kubernetes.io/docs/concepts/services-networking/ingress/

 

Ingress

Make your HTTP (or HTTPS) network service available using a protocol-aware configuration mechanism, that understands web concepts like URIs, hostnames, paths, and more. The Ingress concept lets you map traffic to different backends based on rules you defin

kubernetes.io

 

 

아래 영상을 참고했습니다.

https://youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&si=hbPclcPuc-6lTNdE

 

[따배쿠] 쿠버네티스 시리즈

 

www.youtube.com

 

'Kubernetes' 카테고리의 다른 글

Kubernetes 기초 - Label(2)  (0) 2023.12.21
Kubernetes 기초 - Label(1)  (0) 2023.12.21
Kubernetes 기초 - Service(3)  (0) 2023.12.19
Kubernetes 기초 - Service(2)  (0) 2023.12.19
Kubernetes 기초 - Service(1)  (0) 2023.12.18