Kubernetes

[Istio] Ingress Gateway - Ingress

비번변경 2024. 5. 21. 17:09

개요

쿠버네티스 환경에서 동작하는 서비스를 외부에서 접근할 수 있도록 구성하는 방법은 여러 가지가 존재한다. 그중 2024.04.29-[Istio] Ingress Gateway - Gateway/VirtualService에서는 Gateway와 VirualService를 구성해 외부에서 서비스를 접근할 수 있도록 설정했었다.

이번 글에서는 https://killercoda.com/lorenzo-g의 Ingress - Kubernetes를 따라해보면서  Istio, Kubernetes Ingress 리소스를 구성하여 서비스를 접근할 수 있도록 구성하는 방법을 적어둔다. 아래 그림의 왼편에 해당된다.

애플리케이션 자체는 이미 동작 중인 환경이다.

 

 

Istio Gateway

VirtualService와 Gateway로 구성했을 때와 마찬가지로 Istio Gateway 자체는 필요한 것 같다.

실습 환경에는 LoadBalacner 타입으로 서비스가 구성되어 있는 상태였다.

 

 

Ingress Class

Kubernetes Ingres는 Ingress Class와 Ingress 리소스로 구성된다. 그중 Ingress Class는 nginx ingress controller나 istio controller 등과 같은 컨트롤러를 통해 지원된다.

 

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: istio
spec:
  controller: istio.io/ingress-controller

Ingress Class는 쿠버네티스 1.18 이전에 Ingress에서 어노테이션으로 지원하던 kubernetes.io/ingress.class 항목을 대체한다.

apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    annotations:
      kubernetes.io/ingress.class: nginx
      meta.helm.sh/release-name: notebook
      meta.helm.sh/release-namespace: notebook
      nginx.ingress.kubernetes.io/proxy-body-size: 500m

만약 구성하는 Ingress Class을 기본값으로 사용하고 싶다면 어노테이션에 ingressclass.kubernetes.io/is-default-class를 true로 지정하면 된다.

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: istio
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: istio.io/ingress-controller

 

 

Ingress

Ingress Class를 생성했다면 Ingress를 리소스를 생성한다. 생성 시 필요한 정보는 기존과 다르지 않다. 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
 name: booking-ingress
spec:
 ingressClassName: istio
 rules:
 - host: booking.example.com
   http:
    paths:
    - path: /
      pathType: Prefix
      backend:
       service:
        name: booking-service
        port:
         number: 80

 

 

접근 테스트

이제 구성한 도메인을 사용해 서비스에 접근할 수 있다. istio-ingressgateway가 외부 로드밸런서와 연결되지 않은 상태이므로 노드 포트를 통해 접근하도록 한다.

curl http://booking.example.com:30000/bookings; \
echo;

 

 

참고 문서

Istio 란 무엇이고, 무엇을 할 수 있을까?

https://kube.academy/guides/service-routing-istio-refarch#ingress-controller-in-kubernetes-with-istio

https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/

https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class