NodePort 기반 배포
Update: 2025-01-25 / 40min
Overview
nodeport 타입의 service는 Node(EC2인스턴스)의 포트를 통해서 서비스로 전달하는 방식입니다. 특정 노드로 유입 시킨 이후에 Service에서 로드밸런싱을 사용할 수 있습니다.하지만 최초 모든 트래픽이 하나의 노드로 집중되기 때문에 이에 대한 설계 고려가 필요합니다.
Nodeport 이해
nodeport type의 service는 클러스터에서 실행되는 서비스를 Node의 포트를 외부에 노출 시켜서 사용하는 방식입니다. NodePort로 노드그룹의 각 워커 노드의 공인 IP(ENI)에서 서비스를 노출 시키게 됩니다.
이 NodeIP:NodePort는 30000~32767번 포트를 사용하게 되며, NodePort 서비스가 라우팅 되는 ClusterIP 서비스가 자동 생성됩니다.
1.Nodeport 동작 방식
외부 사용자는 Node(EC2)의 공인 IP/Port로 접근하게 됩니다.
공인 IP/Port로 접근한 트래픽은 Node(EC2)의 IPTable 규칙에 의해 Cluster IP/Port로 이동합니다.
IPTable 규칙에 의해 PoD 분산하게 됩니다.

아래와 같이 새로운 Namespace와 Pod를 생성합니다.
생성한 pod를 확인합니다.
shell 연결을 편리하게 접속하기 위해 아래와 같이 IDE terminal 의 bash profile에 등록합니다.
2.NodePort Service 시험
Nodeport service를 배포합니다.
Nodeport service yaml은 아래와 같이 구성되어 있습니다.
nodePort Service가 정상적으로 배포되었는지 확인합니다.
아래와 같은 구성이 배포되었습니다. 외부에 Node IP:30080 으로 노출되어 있으며, Cluster 8080으로 Forwarding됩니다. 이후 Iptable에 의해 Pod들로 80 Port로 로드밸런싱됩니다.

pod shell로 접속해서 Service A Record를 확인해 봅니다.
Yaml 파일에 정의된 Service의 NodePort는 EKS Node에서 허용되지 않은 서비스 포트입니다. 허용하기 위해 Security Group을 추가합니다.
Public-SG 라는 이름으로 Security Group을 생성합니다.
AWS Console 또는 아래의 Shell을 통해 실행합니다.
아래와 같이 Security Group을 생성합니다.
VPC Name:
Security Group Name:
생성한 Security Group을 아래 Managed Node Group 인스턴스에 적용합니다.
Enter the Node Name (노드 이름 입력):
Enter the Security Group Name (Security Group 이름 입력):
아래는 AWS Console에서 작업하는 방법이므로, 위의 Shell을 실행한 경우는 생략합니다.
TCP 30080-30090 허용

아래와 같이 Security Group이 생성됩니다.


Pod가 배포된 Node를 AWS 관리콘솔 - EC2 대시보드에서 선택합니다. 해당 EC2 대시보드에서 인스턴스를 선택합니다. 이 랩에서는 "eksworkshop-managed-ng-public-01-Node"에 배포됩니다.
생성한 Public-SG 라는 Security Group을 해당 인스턴스에 적용합니다.

eksworkshop-managed-ng-public-01-Node 들의 EIP를 확인합니다.
아래와 같이 EC2 Public IP 주소와 Nodeport로 접속해 봅니다.
Node에서 iptable에 설정된 NAT Table, Loadbalancing 구성을 확인해 봅니다.
Nodeport 기반 Service 구성
이제 실제 웹서비스를 배포해 봅니다.
namespace : nodeport-test
ecsdemo-frontend service type : nodePort
3.배포용 yaml 복제.
NodePort 타입의 서비스 구성을 위해서 LAB에서 사용할 App을 IDE Terminal에서 복제합니다.
Application 배포
4.namespace 생성
이제 Namespace를 먼저 생성합니다.
5. Application , Service 배포
nodeport 용 어플리케이션과 서비스를 배포합니다.
정상적으로 배포되었는지 확인해 봅니다.
아래와 같은 결과를 볼 수 있습니다.
6. 서비스 확인
정상적으로 배포되었는지 확인합니다.
Output wide 옵션을 통해서 실제 Pod가 배포된 Node를 확인합니다.
아래 Node 이름을 확인 할 수 있습니다.
Node 이름을 아래와 같이 상세하게 확인 할 수 있습니다.
이제 해당 인스턴스의 공인 IP로 브라우저를 통해서 접근해서 서비스를 확인해 봅니다. Node의 IP 주소는 EC2 서비스 대시 보드에서 확인 할 수 있습니다.

eksworkshop-managed-ng-public-01-node 들의 EIP를 확인합니다.
eksworkshop-ng-public-01-Node 의 IP 주소를 확인하고 , 브라우저에서 아래와 같이 주소를 입력합니다.
아래와 같은 결과를 확인할 수 있습니다. Pod를 1개 배포했기 때문에 1개의 Pod로 라우팅 되는 것을 확인할 수 있습니다.

이제 Pod를 3개로 늘려서 서비스를 확인해 봅니다.
Pod 3개로 브라우저에서 정상적으로 서비스 되는지 확인해 봅니다.
Last updated
Was this helpful?