우노
[K8S] Service - ClusterIP, NodePort, LoadBalancer 본문
Service란?
- Pod는 IP가 랜덤하게 지정 되고, 재시작 될 때마다 변경되기 때문에, 고정된 엔드포인트로 호출하는 것이 어렵습니다.
- 이때, Service를 사용해 고정된 IP로 Pod에 접근하도록 설정할 수 있습니다.
- 뿐만 아니라, Service를 통해 트래픽이 여러 Pod들에게 로드밸런싱되도록 설정할 수 있습니다.
Service Type
- 서비스 유형은 크게 3가지로 구분됩니다.
- ClusterIP
- NodePort
- LoadBalancer
ExternalName (해당 유형은 생략하겠습니다.)
ClusterIP
디폴트 설정입니다.
ClusterIP 유형은, Service에 클러스터 내부 가상 IP 주소인 ‘ClusterIP’를 할당해, 클러스터 내부에서만 해당 Service에 접근할 수 있도록하는 설정입니다.
예제 생성 코드
apiVersion: v1 kind: Service metadata: name: hello-node-svc spec: type: ClusterIP selector: # 이 서비스가 적용될 파드 정보를 지정 app: hello-node ports: - protocol: TCP port: 80 # Cluster 안에서 내부적으로 Service 객체에 접근하기 위해 사용되는 포트 targetPort: 8080 # Service 객체로 전달된 요청을 Pod로 전달할 때 사용되는 포트
NodePort
NodePort 유형은, 클러스터 내부에서 Service의 가상 IP 주소인 ‘ClusterIP’와 Port를 통해 접근할 수 있을뿐만 아니라,
각 Node의 IP와 설정된 Port를 통해서도 접근이 가능하도록 하는 설정입니다.
예제 생성 코드
apiVersion: v1 kind: Service metadata: name: myapp-service spec: type: NodePort selector: # 이 서비스가 적용될 파드 정보를 지정 app: myapp ports: - nodePort: 30000 # Node에 접근할 때 사용되는 포트 port: 80 # Cluster 안에서 내부적으로 Service 객체에 접근하기 위해 사용되는 포트 targetPort: 80 # Service 객체로 전달된 요청을 Pod로 전달할 때 사용되는 포트
- ClusterIP에 80포트로도 Service에 접근할 수 있지만,
- Node IP에 30000 포트로도 Service에 접근할 수 있게 됩니다.
그러나 직접 노드의 IP를 사용해 접근하는 것은 일반적으로 보안상 권장되지 않으며,
프로덕션 환경에서는 DNS 이름이나 LoadBalancer, Ingress와 같은 다른 서비스 유형을 사용하는 것이 더 안전합니다.
LoadBalancer
Service를 외부에 노출시키는 설정입니다.
따라서, 서비스의 외부 IP에 포트를 통해 서비스에 접근할 수 있게 됩니다.
예제 생성 코드
apiVersion: v1 kind: Service metadata: name: my-loadbalancer-svc spec: type: LoadBalancer selector: app: my-app # 이 서비스가 적용될 파드 정보를 지정 ports: - protocol: TCP port: 80 # Cluster 안에서 내부적으로 Service 객체에 접근하기 위해 사용되는 포트 targetPort: 8080 # Service 객체로 전달된 요청을 Pod로 전달할 때 사용되는 포트
참고
- https://junior-developer.tistory.com/49
- https://kim-dragon.tistory.com/52
- https://velog.io/@hoonki/쿠버네티스-서비스ClusterIP-NodePort-LoadBalancer와-인그레스
- https://bcho.tistory.com/1262
- https://kimjingo.tistory.com/123
- https://seongjin.me/kubernetes-service-types/
- https://융융이.com/148
- https://haemanlee.tistory.com/m/24
- https://medium.com/avmconsulting-blog/external-ip-service-type-for-kubernetes-ec2073ef5442
'DevOps > Kubernetes' 카테고리의 다른 글
[K8S] kubectl config context 명령어 정리 (0) | 2023.08.17 |
---|---|
[K8S] kubectl secret 명령어 (0) | 2023.06.10 |
[K8S] Control Plane, Data Plane이란? (0) | 2023.03.19 |
[K8S] Label, Selector, Annotation (0) | 2023.03.01 |
[K8S] Nodeport, Port, Targetport 정리 (0) | 2023.03.01 |
Comments