본문 바로가기
네트워크/k8s

[k8s] 37. Ingress - Nginx

by Lauren X Ming 2021. 2. 25.

Ingress

사용목적

Service LoadBalancing

  • 쇼핑몰을 운영한다고 가정했을 때, 쇼핑 페이지, 주문센터, 주문 서비스를 파드로 각각 만듦
  • 그 파드에 각각 서비스를 연결
  • 사용자에게는 각 서비스마다 다른 URL을 줌, path가 다름
  • 일반적으로 각 path마다 서비스 IP를 이어주는 L4나 L7 스위치 장비가 있어야 함
  • 쿠버네티스는 Ingress가 이 역할을 함
  • 사용자가 /로 들어오면 쇼핑 페이지로, /customer는 주문센터, /order는 주문 서비스로 연결
  • 별도의 IP 로드밸런싱을 해주는 장비가 필요 없음

Canary Upgarde

  • V1이 서비스가 되는데, V2를 구동시키고 Ingress를 만들어서 두 서비스에 연결
  • 사용자가 Ingress에 접근했을 때 90%는 V1으로, 10%는 V2로 이동하게 할 수 있음

Ingress Controller

  • Ingress 오브젝트는 쿠버네티스가 설치되어 있으면 바로 만들 수 있음
  • Host로 도메인 이름을 넣을 수 있고, 이 도메인으로 들어오는 트래픽은 Path에 따라 서비스로 연결 가능
  • 쿠버네티스에서 이를 동작시키려면 Ingress Controller를 담당하는 별도 플러그인을 설치해야 함
    • NGINX, Kong이 있음
  • Nginx를 설치했다고 하면, Nginx에 대한 Namespace가 생김
  • Namespace에 Deployment와 ReplicaSet, 그리고 실제 Ingress의 구현체인 Nginx Pod 생성
  • Pod은 Ingress 룰이 있는지 보고 룰에 따라 서비스에 연결
  • 룰에따라 해당 서비스에 트래픽이 전달되려면 외부에 접속하는 트래픽은 Nginx Pod를 지나야 함
  • 따라서 외부에서 접속하는 Service를 만들어서 Nginx Pod에 연결시켜줘야 함
    • NodePort나 LoadBalancer로 이를 가능하게 함
  • www.app1.com --> Service --> Nginx Pod --> Path에 따른 서비스 연결
  • Ingress2처럼 추가적으로 Ingress를 추가할 수 있음
  • www.app2.com --> Service --> Ingress2 Nginx Pod --> 서비스
  • 마찬가지로 Ingress3도 추가 가능

Ingress의 기능

Service LoadBalancing

  • 각각의 업무별로 파드와 서비스를 생성
  • 사전에 Nginx Controller를 설치하고 외부와 연결되도록 NodePort 서비스도 만듦
  • 192.168.0.30:30431로 접속하면 파드의 80번 포트로 접속되게 함
  • 이 때, Ingress를 만들고 rule을 각 path마다 의도하는 서비스로 매칭
  • 별도의 도메인 이름을 주지 않았기 때문에, 그냥 사용자가 아이피 주소로 접속하면 연결이 됨

Canary Upgarde

  • www.app.com으로 사용자가 접근하면 svc-v1으로 연결되는 서비스 구성
  • 사용자에게 app이 운용되고 있는 상황에서 svc-v2를 띄움
  • Ingress를 하나 더 만들어서 도메인 이름은 같고, 서비스 이름을 svc-v2를 줌
  • 새로 만든 Ingress에 @weight:10% 어노테이션을 주면 도메인 이름으로 접근하는 트래픽의 10%는 V2로 흘러감
  • 특정 나라별로 테스트하고 싶으면 @header 옵션을 이용해서 Language: kr이면 100% 트래픽으로 svc-v2 파드로 접속

Https

  • Ingress를 통해서 https로 연결할 수 있도록 인증서 관리 가능
  • 파드 자체에서 인증서 관리를 하기 힘들 때 사용
  • Nginx 파드를 https로 사용하려면 443포트로 파드와 연결해야 함
  • Ingress를 만들 때, 도메인과 서비스 이름을 입력하고 tls라는 옵션이 있음
  • tls에 secretName으로 실제 Secret 오브젝트를 연결함
  • Secret 오브젝트 안에는 데이터 값으로 인증서를 담고 있음
  • 이렇게 구성하면 사용자가 도메인 이름앞에 https를 붙여야만 접근할 수 있음

출처

인프런 - 대세는 쿠버네티스

'네트워크 > k8s' 카테고리의 다른 글

[k8s] 39. Autoscaler - HPA  (0) 2021.02.25
[k8s] 38. Ingress - 실습  (0) 2021.02.25
[k8s] 36. StatefulSet - 실습  (0) 2021.02.25
[k8s] 35. StatefulSet  (0) 2021.02.25
[k8s] 34. Kubernetes Dashboard - 실습  (0) 2021.02.24