전에 AWS Load Balancer Controller에 대해 소개드린 적이 있습니다. AWS Load Balancer Controller를 이용해 ALB를 생성하면 기본적으로 HTTP 리스너를 사용합니다.
더 보안적인 HTTPS 리스너를 사용하려면 추가적인 설정이 필요합니다.
준비
EKS - AWS Load Balancer Controller 실습에서 ALB 생성까지 진행합니다.
[AWS] EKS - AWS Load Balancer Controller
EKS에서 Service를 생성할 때마다 외부 트래픽을 받기 위해 ALB나 NLB를 생성해야 합니다. 이것은 매우 귀찮은 일이고, AWS WAF 같은 리소스가 추가로 붙으면 더 까다로워질 것입니다. 이것을 해결하기
arcozz.tistory.com
또한, 도메인 하나를 구입하셔야 합니다. 저는 Route53에서 구입했습니다.
인증서 발급
이제 HTTPS의 암호화 역할을 하는 인증서를 발급합시다. 인증서 발급에는 AWS Certificate Manager를 사용합니다.
AWS Certificate Manager(ACM)는 AWS 웹 사이트와 애플리케이션을 보호하는 퍼블릭 및 프라이빗 SSL/TLS X.509 인증서와 키를 만들고, 저장하고, 갱신하는 복잡성을 처리합니다.
AWS Certificate Manager로 SSL/TLS 인증서를 무료로 발급 / 관리할 수 있다는 것이 장점입니다.
ACM 콘솔에 접속하여 Request a certificate 버튼을 누릅니다.
퍼블릭 인증서를 발급합니다. Next를 누릅니다. (프라이빗 인증서를 발급하려면 AWS Private Certificate Authority 서비스를 이용해야 합니다.)
FQDN으로 각자 발급한 전체 도메인 네임을 입력합니다.
도메인 검증 방법으로 각자 편한 방법을 선택합니다. 저는 Route53으로 DNS 설정을 변경할 수 있기 때문에 DNS validation을 선택했습니다. Key algorithm으로는 가장 많이 쓰이는 RSA 2048를 선택하겠습니다.
Request 버튼을 눌러 인증서를 생성하고, 각자 선택한 방법으로 도메인을 검증합니다.
DNS validation 같은 경우, 주어지는 CNAME name과 value를 DNS 서비스로 등록하면 됩니다.
Route53에 Hosted zone이 있는 경우, Create records in Route 53을 눌러 편리하게 등록할 수 있습니다.
인증서 상태가 Issued로 변경되면 등록이 완료된 것입니다.
Ingress 재생성
Ingress yaml 파일을 다음과 같이 변경합니다. 추가된 annotation에 대해 설명드리겠습니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
annotations:
alb.ingress.kubernetes.io/load-balancer-name: demo-alb
alb.ingress.kubernetes.io/target-type: instance
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-2:073813292468:certificate/51005391-65aa-4e74-bbf4-a6961f704dd2
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
alb.ingress.kubernetes.io/ssl-redirect: '443'
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: demo
port:
number: 80
certificate-arn 옵션으로 인증서를 지정합니다.
alb.ingress.kubernetes.io/certificate-arn: $CERTIFICATE_ARN
listen-ports 옵션으로 ALB의 리스너 포트를 설정합니다. 80번과 443번을 설정했습니다.
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
ssl-redirect 옵션으로 80번 포트 (HTTP)로 접속했을 때 443 포트 (HTTPS)로 Redirect 되게 설정했습니다.
alb.ingress.kubernetes.io/ssl-redirect: '443'
이제 apply를 통해 변경된 Ingress yaml을 적용시킵니다.
kubectl apply -f ingress.yaml
HTTPS 확인
이제 DNS 서비스(Route53)를 이용해 도메인으로 접속했을 때 ALB로 라우팅 되도록 설정합니다.
이제 해당 도메인으로 접속하면 HTTPS로 접속된 nginx 페이지를 볼 수 있습니다.
오늘의 글은 여기까지입니다. 감사합니다!
'AWS' 카테고리의 다른 글
[AWS] DataSync로 S3 버킷을 다른 계정으로 마이그레이션하기 (4) | 2024.12.28 |
---|---|
[AWS] ArgoCD Image Updater로 이미지 자동 배포 (with ECR) (4) | 2024.02.28 |
[AWS] Managed Service for Apache Flink로 스트리밍 데이터 분석 - Studio notebooks (2) (2) | 2024.02.16 |
[AWS] Terraform으로 EC2 Instance 생성하기 (0) | 2024.01.19 |
[AWS] AWS Config로 Security group 감시하기 (0) | 2024.01.02 |