Ingress
서비스 오브젝트가 외부 요청을 받아들이기 위한 것이였다면, 인그레스는 외부 요청을 어떻게 처리할 것인지 네트워크 7계층 레벨에서 정의하는 쿠버네티스 오브젝트임.
인그레스가 제공하는 기능
- 외부 요청의 라우팅
- 가상 호스트 기반의 요청 처리
- SSL/TLS 보안 연결 처리
NodePort, LoadBalancer 타입의 서비스를 사용해도 되는데 왜 인그레스를 사용하는 가?
애플리케이션이 4개의 Deployment가 생성되어 있고, 각각의 서비스를 하나씩 연결 해줬다고 가정해보자.
이러한 방식은 잘 동작하는 것 같지만, 서비스마다 세부적인 설정을 할 때 추가적인 복잡성이 발생하게 된다.
(SSL/TLS 보안 연결, 접근 도메인 및 클라이언트 상태에 기반한 라우팅 등을 구현하려면 각 서비스와 디플로이먼트에 대해 일일이 설정을 해야 하기 때문에 복잡성이 증가)
이럴 때 인그레스 오브젝트를 사용하면 URI 엔드포인트를 단 하나만 생성함으로써 이러한 번거러움을 쉽게 해결할 수 있음.
인그레스를 이용하면 아래의 사진과 같이 요청이 처리된다.
4개의 각각의 서비스에 대해 4개의 URL이 있는 것이 아니라, 인그레스에 접근하기 위한 단 하나의 URI만 존재한다.
따라서 클라이언트는 인그레스의 URI로만 접근하게 되며, 해당 요청은 인그레스에서 정의한 규칙에 따라 처리된 뒤 적절한 파드로 전달된다.
중요한 점은 라우팅 정의나 보안 연결 등과 같은 세부 설정은 서비스와 디플로이먼트가 아닌 인그레스에 의해 수행된다는 점이다.
각 디플로이먼트에 대해 일일이 설정을 적용할 필요가 없이, 하나의 설정 지점에서 처리 규칙을 정의하기만 하면 되기 때문에 편리하게 관리할 수 있다.
인그레스 컨트롤러 설치
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/mandatory.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: potato-ingress
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: api-service
servicePort: 8000
- path: 해당 경로로 들어온 요청을 어느 서비스로 전달할 것인지 정의
- serviceName, servicePort: path로 들어온 요청이 전달 될 서비스와 포트.
Nginx 서비스의 필요성
하지만 Nginx 인그레스 컨트롤러를 설치하는 YAML 파일은 Nginx 웹 서버를 외부로 노출하기 위한 서비스를 생성해주지는 않습니다. 즉 Nginx Deployment만 생성됐을 뿐 아직 Nginx 포드에 접근할 수 있는 상태은 아니라 서비스는 환경에 맞게 직접 생성해야 한다.
1. NodePort 타입의 서비스 생성 (테스트 용)
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
spec:
type: NodePort
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30000
2. LoadBalancer 타입의 서비스 생성 (AWS, GKE 등의 클라우드 환경)
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
spec:
type: LoadBalancer
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https
출처) 시작하세요! 도커/쿠버네티스
'DevOps & SRE > Docker & kubernetes' 카테고리의 다른 글
k8s HPA 동작 방식 및 이슈들 정리 (0) | 2023.05.16 |
---|---|
[쿠버네티스 공부] Namespace (0) | 2021.02.21 |
[쿠버네티스 공부] ConfigMap, Secret (0) | 2021.02.18 |
[쿠버네티스 공부] Deployment란? (0) | 2021.02.16 |
[쿠버네티스 공부] Replicaset은 무엇일까? (0) | 2021.02.11 |