쿠버네티스/이론

쿠버네티스 Ingress 란?

황동리 2024. 11. 4. 16:00
반응형

Ingress 란?

 

외부 클라이언트가 k8s 클러스터 내부의 서비스에 접근할 수 있도록 도와주는 API 객체 입니다.

 

Ingress의 주요 기능을 알아보면

  • URL 및 호스트 기반 라우팅
    URL 경로에 따라 다른 서비스로 라우팅을 할 수 있습니다.
  • TLS(HTTPS) 지원
    TLS 인증서를 설정하여 HTTPS 트래픽을 처리할 수 있습니다.
  • 로드밸런싱
    로드 밸런싱을 통해 트래픽을 여러 파드로 분산시킬 수 있습니다.
  • Ingress는 애플리케이션 계층 (HTTP)에서 작동하여 Service가 할 수 없는 쿠키 기반 세션 어피니티 등과 같은 기능을 제공합니다.

Ingress를 설치하여 실습을 통해 좀 더 자세하게 알아보겠습니다.


 

우선 Ingress를 사용하려면 Ingress-Controller가 필요합니다.

 

저는 Helm 차트를 통해 Nginx-Ingress-Controller를 설치하였습니다.

Helm 설치

Helm 공식 홈페이지에 설치 방법이 나와있습니다.

# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
# chmod 700 get_helm.sh
# ./get_helm.sh

Nginx-Ingress 설치

Helm 차트를 통해서 설치해보도록 하겠습니다.

# kubectl create namespace nginx-ingress
# helm repo add nginx https://helm.nginx.com/stable
# helm install my-nginx-ingress nginx/nginx-ingress --version 1.4.0 --namespace nginx-ingress

 

설치가 완료되면 아래 이미지와 같이 설치가 됩니다.

 

Ingress 테스트

 

이제 Ingress를 생성하여 테스트 해보겠습니다.

아래 yaml 파일의 내용 대로 Ingress를 생성 해보았습니다.

설명을 덧붙혀보자면,

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: kubia.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kubia-manual
            port:
              number: 80
  • ingressClassName: nginx
    => 앞서 설치한 Ingress-Controller의 이름을 적어주면 됩니다.
  • host: kubia.example.com
    => host에 적힌 도메인은 현재 사용하고 있는 DNS 서버에 정의 되어야 합니다.
  • 그리고 생성한 서비스 이름과 사용되는 Port를 적어주면 됩니다.

 

이제 curl 명령어로 확인해봅니다.

# curl http://kubia.example.com

 

이번엔 TLS 트래픽 처리하도록 Ingress 구성 해보도록 하겠습니다.

 

먼저 key와 cert파일을 생성해주도록 하겠습니다.

# openssl genrsa -out tls.key 2048
# openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj "/CN=kubia.example.com"

 

생성한 key, cert 파일로 Secret을 생성 해줍니다.

# kubectl create secret tls tls-secret --cert tls.cert --key tls.key

 

secret 생성 확인

# kubectl get secret

 

이제 Ingress.yaml 파일을 수정 해줍니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  ingressClassName: nginx 
  tls:							# tls 부분 설정 추가
  - hosts:						# tls 설정할 hosts 지정
    - kubia.example.com			# tls 설정할 hosts 지정
    secretName: tls-secret		# 앞서 생성한 Secret 지정
  rules:
  - host: kubia.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kubia-manual
            port:
              number: 80

 

결과 확인

# curl -k -v https://kubia.example.com

 

이상 입니다.

참고
Kubernetes-In-Action 책에 있는 내용을 참고 하였습니다.

반응형