본문 바로가기

⭐ Kubernetes & EKS/Ingress (잉그레스)

Ingress를 활용한 ALB 추가하기

# Ingress는 서비스 이름만 바꿔서 동일한 pod를 실행 시킬수 있다.

아래는 예시이다.

NAME                   CLASS    HOSTS   ADDRESS                                                                      PORTS   AGE
api-ingress            <none>   *       k8s-.ap-northeast-2.elb.amazonaws.com    80      3d23h
web-ingress            <none>   *       k8s-.ap-northeast-2.elb.amazonaws.com   80      5d23h
web-ingress-test-alb   <none>   *       k8s-.ap-northeast-2.elb.amazonaws.com    80      5m11s

위의 내용을 보면 web-ingress,api-ingress와 web-ingress-test-alb는 같은 서비스를 실행한 것이다.

web-ingress-test-alb는 2개의 api와 2개의 컨테이너를 맵핑한 결과이고, 나머지 web-ingress,api-ingress와 web-ingress-test-alb는 2개의 api 컨테이너를 각각 하나씩 올린것 이라고 볼 수 있다. 결국에는 2개를 한꺼번에 ingress로 올리느냐 아니면 각각 하나하나씩 서비스를 따로따로 올리느냐만 다르고  서비스는 같다고 볼 수 있다.

아래의 실행 코드를 보면 명확히 구분이 가능하다.

web-ingress-test-alb는 두개의 api를 컨테이너와 맵핑하여 실행한 것이고, 나머지는 개별로 하나하나씩 api를 컨테이너와 맵핑한 코드이다.

web-ingress-test-alb

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress-test-alb
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: instance
  namespace: namespace
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "web-service"
                port:
                  number: 80
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: "api-service-alb"
                port:
                  number: 9999

web-ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: instance
  namespace: namespace
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "web-service"
                port:
                  number: 80

api-ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: instance
  namespace: namespace
spec:
  rules:
    - http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: "api-service-alb"
                port:
                  number: 9999

결론은 ingress는 이름만 다르게 생성하면 여러개를 만들수 있다. ALB 이름은 다르지만 불러오는 서비스는 같은 종류의 로드밸런서를 여러개 생성 할 수 있다는 뜻이다. 유연한 서비스 연계와 테스트가 가능한 부분이라고 할 수 있다.

# 위의 서비스 구성내용은 아래와 같다. (ingress를 여러개 생성 후 내부 서비스 맵핑)

ingress_alb_관계.drawio
0.00MB

- 위와같이 하나의 ingress가 가변적인 api를 호출할 수 있다. 하나만 호출할수도 있고 다수의 api를 호출할 수도 있다. 이것은 ingeress의 주소만 다르게 하면 새로운 ALB가 생성되기 때문에 동일한 api서비스여도 같은 서비스를 가변적으로 생성 할 수 있다는 의미이다.

 

- 끝 -