본문 바로가기
쿠버네티스

쿠버네티스(4) - 인그레스

by 왈레 2024. 7. 15.

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

댓글