쿠버네티스 클러스터 안에서 실행된 Pod 대해 액세스할 때는 서비스(Service)를 정의합니다. 서비스는 쿠버네티스의 네트워크를 관리하는 것으로, 몇 가지 종류가 있습니다.
Cluster IP
서비스에 의해 할당되는 IP 주소에는 Cluster IP와 External IP가 있습니다. Cluster IP는 클러스터 안의 Pod끼리 통신하기 위한 Private IP이며 External IP는 클러스터 외부에 공개하는 IP 주소입니다.
클러스터 내부에서만 접근할 수 있으며, 외부에서 접근이 불가능하므로 Port Forwarding이나 Proxy를 통해 접근해야합니다.또한 서비스 타입을 별도로 지정하지 않으면 ClusterIP가 Default로 설정됩니다.
CluterIP 예시
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
type: ClusterIP
ports: 9000, targetPort는 8080이므로 9000포트로 연결이 요청되면 Pod의 8080번으로 연결된다는 의미
NodePort
노드포트는 모든 워커들의 특정 포트를 이용하여 접근하도록 설정하는 타입입니다. Pod가 탑재된 Node에 접근할 수 있는 포트를 외부로 노출시킵니다. 포트당 하나의 서비스를 사용하며 30000~32767 사이의 포트를 사용합니다. 노드포트 또한 클러스터 아이피가 있으며, 쿠버네티스 클러스터의 모든 노드에 똑같은 포트가 할당되게 됩니다.
NodePort 예시(yaml)
apiVersion: v1
kind: Service
metadata:
name: svc-2
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
nodePort: 30000
type: NodePort
Load Balancer
Nodeport 타입을 확장시켜 실질적으로 서비스를 외부에 노출할 수 있는 서비스로 Node에 트래픽을 분산시켜주는 역할을 합니다. 이 Load Balancer는 쿠버네티스에서 자동으로 생성되지 않아서 IP를 할당해주는 plugin이 설치되어 있어야합니다.
AWS, GCP, Azure 등의 쿠버네티스 플랫폼을 사용할 경우 외부 IP를 지원해주는 플러그인이 설치되어있어 Load Balancer 타입의 서비스를 생성할 경우 외부에서 접속할 IP를 알아서 만들어줍니다.
로드밸런서 예시(yaml)
apiVersion: v1
kind: Service
metadata:
name: svc-3
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
type: LoadBalancer
참고
https://kubetm.github.io/k8s/03-beginner-basic-resource/service/
'About > Kubernetes' 카테고리의 다른 글
[k8s] 매니페스트 파일 작성 방법 (0) | 2022.01.04 |
---|---|
[k8s] 애플리케이션 설정 정보 관리(ConfigMap/Secrets) (0) | 2022.01.04 |
[k8s] Pod의 특징 (Container, Label, NodeSelector) (0) | 2022.01.04 |
[k8s] 쿠버네티스의 서버 구성(마스터와 노드) (1) | 2021.12.30 |
[k8s] 스케쥴링과 서비스 디스커버리 (2) | 2021.12.30 |