AWS공식다큐를 읽어보면, NLB는 CLB와 같이 LoadBalancer type으로 지원됩니다.
따라서 아래와 같이 적용하여서 NLB를 만들어보도록 하겠습니다.
apiVersion: v1
kind: Service
metadata:
name: cb-test-api
namespace: prd-api
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:ap-northeast-2:{account-number}:certificate/{id}
external-dns.alpha.kubernetes.io/hostname: {domain}
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
spec:
ports:
- name: http
port: 80
targetPort: 9000
protocol: TCP
- name: https
port: 443
targetPort: 9000
protocol: TCP
type: LoadBalancer
selector:
app: cb-test-api
위의 service.yaml로 배포해주게 되면 아래와 같이 생성되며,
콘솔에서도 NLB로 정상적으로 잘 생성된 것을 볼 수 있습니다.
그런데 현재, 443에 대한 SSL 인증서가 CLB와는 다르게 적용이 안되는 상태입니다.
구글링을 해서 같은 현상을 가진분들을 많이 봤고, 솔루션이라고 답변한 해당 부분을 적용해봤지만 되지 않았습니다.
구글링 결과 v1.15이상의 쿠버네티스에서는 잘 작동한다는 글을 봤습니다.
https://github.com/kubernetes/kubernetes/pull/74910
해당글의 요점을 보면
TLS는 SSL 프로토콜의 업그레이드 버전이며
CLB에서는 SSL / TLS가 모두로 식별 SSL되지만, ALB / NLB에서는 SSL / TLS가 모두 TLS로 식별됩니다.
CLB에서 NLB로의 지정 혼동이나 마이그레이션을 쉽게 하기 위해서
NLB에서도 어노테이션 service.beta.kubernetes.io/aws-load-balancer-backend-protocol:ssl를 사용 합니다.
라는 글과 함께 해당 내용들을 모두 반영해보았지만 결과는 모두 아래와 같았습니다.
EKS에서 v1.15 이상을 빨리 지원하기를 기다려야할 것 같습니다.
NLB는 Network Intro에서 말씀 드렸 듯 Private Link나
아니면 예상치 못하게 급격하게 쏟아지는 트래픽을 소화하는 등의 서비스에 알맞습니다.
EKS에서 NLB를 사용하는 경우에는 NLB -> Nginx 형태로 구성을 많이 하시는 것 같습니다.
ELB는 워크로드에 알맞게 선택하셔서 사용하시면 될 것 같습니다.
'EKS > LoadBalancer & EXT DNS' 카테고리의 다른 글
EKS LoadBalancer - 4. Nginx Ingress (NLB) (0) | 2020.10.12 |
---|---|
EKS LoadBalancer - 2. Application LoadBalancer (0) | 2020.02.04 |
EKS LoadBalancer - 1. Classic LoadBalancer, External DNS (0) | 2020.02.04 |