# EKS에서 NLB 적용시 리스너를 여러개 등록하는 과정을 알아보자.
1. TargetGroupBinding을 활용한 구현
- 설치하기
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
kubectl get crd
- 설치 완료
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
customresourcedefinition.apiextensions.k8s.io/ingressclassparams.elbv2.k8s.aws configured
customresourcedefinition.apiextensions.k8s.io/targetgroupbindings.elbv2.k8s.aws configured
2. 사전 준비
- Jenkins를 NLB로 설치 한다. 아래의 코드 참고
- 실행 명령어 : kubectl apply -f {yamlfile_name}
apiVersion: v1
kind: Service
metadata:
name: ingress-nlb
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
#service.beta.kubernetes.io/group.name: nlb-group-01
spec:
selector:
app: jenkins
ports:
- protocol: TCP
port: 8080
targetPort: 8080
#nodePort: 30011
type: LoadBalancer
여기서 ARN 정보가 매우 중요한다. ARN 정보는 아래의 URL에서 확인할 수 있다.
2021.08.10 - [⭐ AWS/AWS 용어정리] - ARN 이란?
2021.04.15 - [⭐ AWS] - ARN 이란?
- 정상적으로 생성이 되면 아래와 같이 NLB 서비스가 생성되고 해당 NLB 서비스안에 리스너 및 타겟그룹도 함께 생성된다.
3. TargetGroupBinding 적용하기
- 예제 애플리케이션 실행하기, 위에서 생성된 타겟그룹에 포함시킬 nginx 웹서버를 생성한다.
- service.yaml 생성 예시, 타입은 노드포트로 생성하면 된다.
apiVersion: v1
kind: Service
metadata:
name: nginx-service
annotations:
alb.ingress.kubernetes.io/healthcheck-path: "/healthy"
spec:
selector:
app: nginx
type: NodePort
ports:
- port: 8080
protocol: TCP
targetPort: 80
- nginx 생성은 아래의 url의 6번을 확인한다.
https://may9noy.tistory.com/517
- 생성된 nginx 리소스 조회
kubectl get pod -n nginx && kubectl get svc -n nginx
NAME READY STATUS RESTARTS AGE
nginx-6595874d85-4gnbg 1/1 Running 0 4h49m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service NodePort 100.00.100.100 <none> 80:31876/TCP 16m
4. 위에서 생성된 nginx 서비스를 jenkins의 리스너 그룹에 포함시키기
- 수동작업 진행 : 일단 Target-Group를 생성해 줘야 한다... 이걸 수동으로 해야한다. ALB는 자동으로 만들어 줬는데... 쩝
아래 URL을 참고하여 타겟그룹을 생성한다.
2023.03.17 - [⭐ AWS/Load Balancing & TargetGroup] - 대상그룹 (TargetGroup) 생성하고 리스너에 등록하기
- 파일명: targetgroup-binding.yaml → 수동으로 생성한 대상그룹의 arn 주소만 아래에 맵핑 시키고 포트만 잘 맞춰주면 문제없이 서비스를 생성하여 사용 할 수 있다.
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
name: nginx-targategroups-binding
namespace: nginx # service_namespace
spec:
serviceRef:
name: nginx-service #K8s Service Name
port: 80 #K8s Service Port
targetGroupARN: arn:aws:elasticloadbalancing:ap-northeast-2:{tg_arn}
targetType: instance
- 생성 후 targetgroupbinding 조회, 정상적으로 생성이 되었다.
kubectl get targetgroupbinding -A
NAMESPACE NAME SERVICE-NAME SERVICE-PORT TARGET-TYPE AGE
nginx nginx-targategroups-binding nginx-service 80 instance 5m51s
5. 서비스 확인하기
- nginx
- jenkins
6. 예제로 sonarqube 서비스 등록하기
- sonarqube 서비스 확인하기, 일단 웹서비스는 아래에 NodePort로 등록된 demo-sonarqube-sonarqube 일 것이다.
kubectl get svc -n sonar-demo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demo-postgre-postgresql ClusterIP 172.20.68.206 <none> 5432/TCP 2d1h
demo-postgre-postgresql-headless ClusterIP None <none> 5432/TCP 2d1h
demo-sonarqube-sonarqube NodePort 172.20.204.209 <none> 9000:30530/TCP 2d1h
- TargetGroupBinding 일명 tgb 생성하기, arn 정보는 위에서 예제를 통해 생성 하였으므로, 해당 정보를 입력해주면 된다.
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
name: sonarqube-tgb
namespace: sonar-demo # service_namespace
spec:
serviceRef:
name: demo-sonarqube-sonarqube #K8s Service Name
port: 9000 #K8s Service Port
targetGroupARN: arn:aws:elasticloadbalancing:ap-northeast-2:{tg_arn}
targetType: instance
- 실행하기
kubectl apply -f tgb-sonarqube.yaml
targetgroupbinding.elbv2.k8s.aws/sonarqube-tgb created
- 적용하면 해당 대상그룹이 아래와 같이 적용 된다. 9000번 포트의 서비스가 삭제되고 NodePort번호가 맵핑된다.
- 약 5분뒤, 정상적으로 서비스가 등록 되었다.
7. sonarqube 서비스 접속하기
- 접속 주소 : nlb주소:9000을 통해 서비스에 접속이 가능하다.
- 위와 같이 모든 서비스가 정상적으로 등록된 것을 확인 할 수 있다.
- 이제 여러 상용 오픈소스들을 포트 기반으로 구분하여 하나의 NLB에서 서비스 할 수 있게 되었다.
번외, ALB에서 TargetGroupBinding 하기
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
name: api-binding
namespace: api-namespace
spec:
serviceRef:
name: api-service #Service Name
port: 8080 #Service Port
targetGroupARN: arn:{arn_address}
targetType: ip #Target Type ip/instance
networking:
ingress:
- from:
- securityGroup:
groupID: sg-name #ALB SG
ports:
- protocol: TCP
- 끝 -
'⭐ AWS > NLB (NerworkLoadBalancer)' 카테고리의 다른 글
NLB가 어떻게 동작하는지 정리 (0) | 2024.03.06 |
---|---|
NLB → ALB(타겟그룹)으로 정의시 확인 사항 (0) | 2024.02.21 |
EKS 환경에서 argocd를 NLB에 등록하여 사용하기 (0) | 2023.03.20 |
ALB VS NLB (0) | 2023.03.17 |