전공공부
[K8S - CKA] Ingress 본문
1. What is Ingress
인그레스는 무엇일까요? 예시로 application을 Deployment로 만들어 두고 NodePort로 구성한 Service와 연결해서 사용하면 바깥에서 접근 가능한 application을 만들 수 있습니다.자 그렇다면 실제로 우리가 사용 할 때 노드 포트 IP로 접근하고 포트 번호를 쳐서 웹 서버에서 접근 하나요? 당연히 아니죠.
http://test.com 이런식으로 사용하게 되죠.
실제로는 GCP를 사용하면 Service에 LoadBalancer 케이스로 지정하고 gcp LB를 통해서 들어오게 됩니다. 그렇다면 API를 여기에 더해서 쓰면 어떻게 해야하죠? 그리고, Spring Cloud Gateway로 나눠진 MicroService는 어떻게 해야 할까요? 각각을 하나의 요청 서버로 요청을 하는 것 처럼 해야 합니다. /apparel -> gcp load-balancer /video -> gcp load-balancer-2
이러한 처리를 ingress가 처리를 합니다. SSL 구현도 되죠. L7 LB를 구성하는것이 ingress 인데요.
그런 처리를 ingress가 어떻게 한 번에 할 까요?
2. Ingress
Ingress는 solution 여러개를 묶어서 하나의 개체로 등장 시킨 것입니다. 예를 들면 HAProxy, NGINX 같은 것을요.
상세히 알아봅시다.
Ingress Resource
Ingress를 정의하는 yaml을 의미합니다.
생각보다 많이 짧아서 간단하게 쳤지만 실제 운영시에는 Prefix로 어떤 /api 요청이 들어오면 모든 요청은 어떤 서비스로 보낸다와 같은 작업들이 가능합니다.
딱 봐도 굉장히 심플하게 이해가 가능한데요. /bar으로 들어오면 service1 의 port 80으로 요청을 보낸다는 것이죠.
여기서 헷갈릴 수 있는 포인트는
annotations.nginx.ingress.kubernetes.io/rewrite-target: / 이 부분이라고 생각드는데요 이 부분을 셋팅하면
만일 여러분이 foo.bar.com/bar 를 요청하면 저는 foo.bar.com/ 으로 bar-service로 요청을 보내게 됩니다.
그리고, rewirt-target 셋팅을 하지 않으면 bar-service로 가긴하지만 foo.bar.com/bar로 bar-service로 API 요청이 들어가게 되어서 내부적으로 API Setting을 올바로 타기가 힘들 겁니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-wildcard-host
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: "foo.bar.com"
http:
paths:
- pathType: Prefix
path: "/bar"
backend:
service:
name: bar-service
port:
number: 80
- host: "*.foo.com"
http:
paths:
- pathType: Prefix
path: "/foo"
backend:
service:
name: service2
port:
number: 80
Ingress Controller
초보자 분들이 처음 Ingress를 셋팅 할 때 착각 할 수 있는 부분이 있는데 ingress resource 부분을 셋팅하면 자동으로 SSL 처리와 LB 처리가 되고 NGINX 셋팅이 된다고 믿을 수 있으나 이는 틀렸습니다. ingress resource만 존재하면 아무것도 행동하지 않죠. 그래서, ingress Controller를 셋팅합니다. 꼭, 개발자가 하나의 솔루션 이상은 사용해야 하는데요. GCE, NGINX가 쿠베 프로젝트에서 꾸준히 사용되고 있으므로 NGINX, GCE 등을 사용하는 것을 추천합니다.
처음 이 그림을 보면 되게 생소하실 것 같습니다만 모두 NGINX-CONTROLLER를 설치하기 위해서 필수적으로 필요합니다.
Deployment에는 NGINX-Controller를 배포하기 위해서 셋팅이 되어있고 자세히 보면 args로 설정된 NGINX 설정을 ConfigMap으로 불러와서 Deployments를 직접 리디플로이 시키지 않고 ConfigMap을 Runtime으로 수정하여서 XFF 설정 ,SSL 설정 등을 할 수 있습니다.
Service는 당연히 외부와 통신하기 위해서 존재하구요. ServiceAccount의 경우에는 앞에서 배웠던 인가처리를 하기 위해서 존재합니다. id가 무엇이면 Role을 개발자 권한을 주겠다는 방식으로 사용하는 것을 추천합니다. (RBAC)
[여담]
사실 운영을 하면서 깨달은 부분이 많아서 생략된 설명들이 상당히 많습니다.
하지만, 추상적으로 이해되는 부분들이 분명히 존재 할 거고 해당 개체들을 완전히 이해하기 위해서는 직접 한 번 K8S Cluster를 구성하면서 깨달음이 필요해 보입니다.
강좌에서는 Ingress Controller 구성을 할 수 있고 Ingress Resource를 직접 제작 할 수 있는 플랫폼을 제공하고 있습니다.
'Study > K8S' 카테고리의 다른 글
[CKAD] 자격증 후기 (0) | 2024.04.21 |
---|---|
[K8S - CKA] Designing Cluster (0) | 2024.03.03 |
[K8S - CKA] DNS in K8S (0) | 2024.02.15 |
[K8S - CKA] Service Networking (1) | 2024.02.15 |
[K8S] SidecarContainer가 존재하는 Pod의 HPA 적용기 (1) | 2024.01.27 |