2020. 2. 19. 20:36ㆍdevops/kubernetes
ingress
kubernetes에 특별한 요청이 올 때 어떻게 처리할 것인지 도와주는 기능을 합니다.
기능
1. 외부 요청의 라우팅: /apple, /apple/red 등과 같이 특정 경로로 들어온 요청을 어떠한 서비스로 전달하는 라우팅ㅇ 규칙을 설정할 수 있습니다.
2. 가상 호스트 기반의 요청 처리: 같은 IP에 대해 다른 도메인 이름으로 요청이 도착했을 때, 어떻게 처리할 것인지 정의할 수 있습니다.
3. SSL/TLS 보안 연결 처리: 여러 개의 서비스로 요청을 라우팅할 때 보안 연결을 위한 인증서를 쉽게 적용할 수 있습니다.
하지만 기존의 NodePart, LoadBalancer 등의 서비스로도 충분히 위기능을 이용할 수 있을 것 같은데 ingress는 왜 사용해야 할까요?
만약 위와 같이 ingress없이 service 두개를 이용한다면 두개 모두에게 라우팅 규칙 및 TLS/SSL 등의 상세한 옵션들을 모두 적용해야 합니다.
하지만 아래와 같이 Ingress Controller를 적용해주면 해당 설정들을 Ingress Controller에만 적용시켜주면 되고 추가로 서비스에 이용할 필요 없습니다.
즉 외부 요청에 대한 처리 규칙을 쿠버네티스 자체의 기능으로 편리하게 관리할 수 있다는 것이 인그레스의 핵심입니다.
인그레스의 구조
인그레스 생성하기
apiVersion: networking.k8s.io/v1beta1
king: Ingress
metadata:
name: ingress-example
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: hoony.example.com
http:
paths:
- path: /capital
backend:
serviceName: test-svc
servicePort: 80
yaml 파일을 위와 같이 작성했습니다. anotations는 추후에 설명하고 spec의 내용에 집중해야하합니다. host에는 해당 주소로 접속할 경우 규칙을 적용합니다.
http 방법으로 적용하며 path는 hoony.example.com/capital 로 요청을 보낼경우 응답한다.
backend는 요청을 어떤 서비스와 port에 전달해줄지 결정합니다.
kubectl apply -f 파일 이름 // ingress 만들기
kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
ingress-example hoony.example.com 80 28s
위와 같이 ingress를 만들었다고 특별한 일이 일어나는 것은 아닙니다. 인그레스는 인그레스 컨트롤러라는 특수한 서버에 적용해야만 사용할 수 있습니다. 실제로 그 요청을 받아 들이는 것은 컨트롤러입니다.
인그레스 컨트롤러에는 여러가지가 있는데 Nginx, Kong, GKE에서 제공되는 클라우드 엔진이 있습니다. 이 포스트에서는 nginx를 사용해보겠습니다.
nginx 설치 // pod, deployment가 시작하는데 시간이 걸릴 수 있습니다. 필자의 경우 9분정도 걸렸습니다.
kubectl apply -f \
https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
GKE 설치
https://github.com/kubernetes/ingress-gce
kubectl get pods,deployment -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/nginx-ingress-controller-68d6b775d8-6pg22 0/1 ContainerCreating 0 2m50s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.extensions/nginx-ingress-controller 0/1 1 0 2m50s
'devops > kubernetes' 카테고리의 다른 글
kubernetes 리소스의 관리와 설정 - Configmap, Secret (0) | 2020.02.19 |
---|---|
kubernetes 리소스의 관리와 설정 - namespace (0) | 2020.02.19 |
kubernetes started(5) 서비스(Service) (0) | 2020.02.15 |
kubernetes started(4) 디플로이먼트(Deployment) (0) | 2020.02.15 |
kubernetes started(3) 레플리카 셋(Replica Set) (0) | 2020.02.15 |