본문 바로가기

EKS/LoadBalancer & EXT DNS

EKS LoadBalancer - 3. Network LoadBalancer

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

 

add TLS support for NLB / fix several NLB bugs by M00nF1sh · Pull Request #74910 · kubernetes/kubernetes

What type of PR is this? /kind feature What this PR does / why we need it: Add TLS support for NLB Fix several NLB bugs(around targetGroup naming/tagging) Which issue(s) this PR fixes: Fixes #7329...

github.com

 

해당글의 요점을 보면

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는 워크로드에 알맞게 선택하셔서 사용하시면 될 것 같습니다.