- External ALB를 통해 외부에서 접근
nginx가 설치되어있는 ec2로 트래픽 전달 443 port
Forward to target group
- nginx-tg
- 80 port는 443 port로 리다이렉트 해주는 rule
- Redirect to HTTPS://#{host}:443/#{path}?#{query}
- Status code: HTTP_301
- Group-level stickiness: Off
- nginx ec2 tagetgroup은 HTTP:80으로 트래픽을 받음
- 443으로 받으면 내부 nginx에도 tls 설정이 필요함.
- 그런데 external alb에서 이미 검증을 하기때문에 tls 종료가 일어나도 외부에선 https로 접근이 가능하기 때문에 이렇게 구성
- domain 주소를 바탕으로 nginx에서 각각의 internal-lb로 라우팅
nginx.conf
upstream cd {
server internal-megatree-cd-alb.ap-northeast-2.elb.amazonaws.com:80; # CD 어플리케이션의 Internal ALB}
server {
listen 80;
server_name grafana.co.kr; # CD에 대한 서브도메인
location / {
proxy_pass http://cd;
proxy_set_header Host grafana.co.kr;
}
}
아래 예시는 cd라는 이름의 upstream(변수 개념)
80포트로 grafana.co.kr라는 도메인으로 접근이 된걸 감지하면 proxy-pass를 통해 앞에 선언한 upstream cd로 트래픽을 흘려보내고 host_header를 grafana.co.kr로 바꿈
그러면 cd internal lb로 트래픽이 가면 80 port의 rule에 따라
HTTP Host Header* is grafana.co.kr, AND Path Pattern is / 룰을 적용해 grafana taget group으로 보냄
Forward to target group
- grafana
grafana는 tagetgroupbinding을 통해 NodePort로 생성된 서비스와 80포트를 포트포워딩 해서 30000~ 포트로 연결
tagetgroupbinding을 사용하면 저 포트포워딩을 자동으로 진행
target Type도 인스턴스와 IP 두개가 있는데 targetgroup의 설정에 따라 다름
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
labels:
ingress.k8s.aws/stack: cd-alb
name: grafana-tgb
namespace: monitoring
spec:
ipAddressType: ipv4
serviceRef:
name: grafana
port: 80
targetGroupARN: arn:aws:elasticloadbalancing:ap-northeast-2::targetgroup/grafana/
targetType: instance
namespace와 serviceRef로 서비스를 바인딩하면
자동으로 Tagetgroup에 NodePort로 배포된 port가 할당
구축순서
nginx ec2 생성 -> nginx 설치
external alb 생성 -> 리스너 룰, nginx ec2 tg 생성, DNS 주소 할당
eks cluster 생성 -> 서비스 배포
internal alb 생성 -> 리스너 룰, tg 생성(tg health check code 200-399)
eks에서 tgb 배포 -> dns 설정
nginx ec2에서 internal alb 접근하며 conf 세팅
연동 확인
'Engineering' 카테고리의 다른 글
Performance Test 환경구성 (0) | 2024.04.01 |
---|---|
Grafana Mimir란? && 설치 테스트 (1) | 2024.03.08 |
AWS EKS ALB 하나로 여러 Ingress 구성 ( Ingress Group, TargetGroupBinding) (0) | 2024.02.06 |
eksctl로 eks 구축해보기 with 스팟 인스턴스 (0) | 2024.01.25 |
OpenTelemetry Beginner & Kubernetes (1) | 2024.01.24 |