4-1 ingress, ingress controller란? (Feat. Istio Gateway와 API Gateway)
인그레스(ingress)는 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할 지 정의해둔 규칙들의 모음이다.
인그레스 컨트롤러(Ingress Controller)는 클러스터에서 실행되고 수신 리소스에 따라 HTTP 로드 밸런서를 구성하는 응용 프로그램이다.
- HTTP(s)를 통해 클러스터 내부의 서비스를 외부로 노출
- ingress는 규칙이다. 이것을 ingress controller에 등록시켜준다.
즉 인그레스는 규칙들을 정의해둔 리소스이고, 이를 실제 동작하기 위해서는 인그레스 컨트롤러가 필요하다. - ingress controller에 접근할 때는 service로 접근한다.
(ingress controller를 설치하면 service는 기본적으로 NodePort이다.) - 인그레스 컨트롤러는 자동으로 실행되지 않고 상황에 맞게 적합한 컨트롤러를 선택하여 설치해야 한다.
쿠버네티스에서는 GCE와 NGINX를 오픈소스로 제공하고 있고, 가장 널리 사용된 Ingress Controller는 Nginx, HAProxy, Envoy 등이 있다. - Ingress Controller는 Cluster의 HTTP Service에 대한 통합된 입구를 제공하지만, Ingerss Controller 자체도 Cluster 내부에 Pod로 배포되기 때문에 외부에서 직접 Access 할 수 없다.
Ingress Controller는 NodePort와 LoadBalancer와 함께 작동하여 외부 트래픽이 클러스터로 들어가는 전체 경로를 제공해야한다.
- Kubernetes Ingress는 Istio Control Plane에서 관리할 수 없다. Kubernetes Ingress 규칙으로 생성해야만 하고, 결과적으로 시스템에는 입구용 서비스(Kubernetes Ingress)과 Mesh 내부 Sidecar Proxy이 존재하게 됬습니다. 이러다보니 Service Mesh 작업이 매우 복잡해졌다.
- Kubernetes Ingress는 매우 기본적인 L7 기능만 제공한다. Advanced Routing 규칙, 분산추적, Policy checking, metrics 수집 등 Mesh Sidecar Proxy와 동일한 기능들이 제공되지 않는다.
- 위 문제를 해결하기 위해 Istio Gateway(서비스 매쉬), API Gateway를 고려해봐야한다.
- Istio Gateway와 API Gateway의 차이점은 Istio Gateway는 주로 클러스터 내부의 서비스 간 트래픽을 관리하고 API 게이트웨이는 주로 외부 클라이언트와 내부 서비스 간의 트래픽을 관리한다.
- Kubernetes Ingress는 여전히 많이 사용되지만, 기능의 한계로 인해 복잡한 요구사항을 충족하기 어려운 경우가 많다.
- Ingress 기능
- 외부에서 접속가능한 URL 사용
- 트래픽 로드밸런싱
- SSL 인증서 처리
- 도메인(URL)기반 가상 호스팅 제공
4-2 인그레스 구조
4-3 ingress controller 설치
주소: <https://github.com/kubernetes/ingress-nginx/blob/main/README.md>
- get started 클릭
- 베어메탈 클릭
# 버전 적어주기 (nginx controller v1.8.1은 k8s 버전 1.27, 1.26, 1.25, 1.24까지 지원)
$ kubectl apply -f <https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-**v1.8.1**/deploy/static/provider/baremetal/deploy.yaml>
# 설치안하고 다운로드만 (내용 확인하기 위해)
$ wget <https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/baremetal/deploy.yaml>
4-4 Ingress 규칙을 ingress controller에 등록
**#** ingress-rule.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: marvel-ingress
spec:
ingressClassName: nginx **# kubectl get ingressclass로 확인 name적어주면 됨**
rules:
#- host: "foo.bar.com" # 주석시 *
- http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: marvel-service
port:
number: 80
- pathType: Prefix
path: /pay
backend:
service:
name: pay-service
port:
number: 80
****# ingress 확인
$ kubectl describe ingress marvel-ingress
# ingress 동작 확인
브라우저에서
ip:ingress_NodePort
ip:ingress_NodePort/pay
'쿠버네티스' 카테고리의 다른 글
쿠버네티스(5) - 레이블과 셀렉터 (0) | 2024.07.15 |
---|---|
쿠버네티스(3) - 서비스 (0) | 2024.07.08 |
쿠버네티스(2) - 컨트롤러 (0) | 2024.07.08 |
쿠버네티스(1) - 파드 (1) | 2024.07.05 |
댓글