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 |