Print
카테고리: [ Amazon Web Services ]
조회수: 73672

개요

EKS에서 Ingress Controller를 사용하여 ALB를 배포할 때, 단일 ALB로 복수의 도메인에 대해 서비스 할 수 있도록 설정한다. 

 

Ingress Annotation 설정

Ingress 배포용 manifest에 애노테이션을 추가하여 ALB에 여러 옵션을 줄 수 있다. 

kubernetes.io/ingress.class: alb 배포할 Ingress LB 타입을 ALB로 설정한다. 

 

alb.ingress.kubernetes.io/scheme: internet-facing internet-facing 또는 internal로 배포 여부를 정의한다. (subnet에 부착된 태그를 기반으로 LB의 위치가 정해진다.)

alb.ingress.kubernetes.io/certificate-arn: <ACM_ARN> ACM 인증서가 적용된다.

alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443},{"HTTP":80}]'  리슨 포트와 프로토콜 정의한다. 

alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'  actions.<SERVICE_NAME>을 통해 ALB의 HTTP->HTTPS 리다이렉트를 구성할 수 있다.

alb.ingress.kubernetes.io/security-groups:<SECURITY_GROUP_ID>  SG를 지정할 경우 Ingress의 SG가 해당 SG로 지정된다. inbound-cidrs 등의 다른 애노테이션을 오버라이딩 한다. 

alb.ingress.kubernetes.io/inbound-cirds:10.0.0.0/8  접근 제어 할 IP와 포트를 정의할 수 있다. security-groups가 이 애노테이션에 우선하여 적용된다. 수동으로 SG 설정을 변경하더라도 Controller가 manifest에 정의된대로 돌려놓는다. 

 

ALB Rule 설정

spec.rule을 통해 ALB의 rule을 설정할 수 있다. 위의 애노테이션에서 적용한 actions.ssl-redirect에 의해 80으로 들어오는 요청은 443으로 리다이렉트 된다.

spinnaker.testurl.com로 들어오는 HTTPS 요청은 spin-deck-ingress 서비스의 9000포트로 전달된다.

spinnaker-api.testurl.com 으로 들어오는 요청은 spin-gate-ingress 서비스의 8084 포트로 전달된다. 


 
  rules:
    - host: spinnaker.testurl.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: ssl-redirect
              servicePort: use-annotation
          - path: /*
            backend:
              serviceName: "spin-deck-ingress"
              servicePort: 9000
    - host: spinnaker-api.testurl.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: ssl-redirect
              servicePort: use-annotation
          - path: /*
            backend:
              serviceName: "spin-gate-ingress"
              servicePort: 8084

 

Backend 구성

각 백엔드 서비스를 NodePort로 구성한다.(네트워크 상황에 따라 다른 서비스 타입도 사용 가능)


 
apiVersion: v1
kind: Service
 
metadata:
  name: spin-deck-ingress
  namespace: spinnaker
spec:
  selector:
    app: spin
    cluster: spin-deck
  ports:
  - name: spin-deck-port
    nodePort: 31490
    port: 9000
    protocol: TCP
    targetPort: 9000
  type: NodePort
---
apiVersion: v1
kind: Service
 
metadata:
  name: spin-gate-ingress
  namespace: spinnaker
spec:
  selector:
    app: spin
    cluster: spin-gate
  ports:
  - name: spin-gate-port
    nodePort: 31491
    port: 8084
    protocol: TCP
    targetPort: 8084
  type: NodePort

DNS 설정

Route 53에서 Ingress의 DNS 주소를 A record Alias로 등록한다. 즉 spinnaker.testurl.com와 spinnaker-api.testurl.com을 동일한 dns에 alias로 등록한다.