개요
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:
Backend 구성
각 백엔드 서비스를 NodePort로 구성한다.(네트워크 상황에 따라 다른 서비스 타입도 사용 가능)
apiVersion: v1
DNS 설정
Route 53에서 Ingress의 DNS 주소를 A record Alias로 등록한다. 즉 spinnaker.testurl.com와 spinnaker-api.testurl.com을 동일한 dns에 alias로 등록한다.