Home [Kubernetes]Service 개념
Post
Cancel

[Kubernetes]Service 개념

Service

동일한 서비스를 제공하는 Pod 그룹의 단일 진입점을 제공

  • 동일한 서비스를 제공하는 여러 Pod를 접근하기 위한 하나의 Virtual IP 진입점을 생성

Definition

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
  name: webui-svc
spec:
  clusterIP: 10.96.100.100
  selector:
    app: webui
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Service Type

  • 기본 환경의 deploy
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    # deploy
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: webui
    spec:
    replicas: 3
    selector:
      matchLabels:
        app: webui
    template:
      metadata:
        name: nginx-pod
        labels:
          app: webui
      spec:
        containers:
        - name: nginx-container
          image: nginx:1.14
    

ClusterIP (default)

  • Pod 그룹의 단일 진입점(Virtual IP) 생성
  • client가 cluster IP를 접근한다면 이를 적당히 분배하는 Load balancer 역할

예시

10.100.100.100:80 접근 시 app:webui label을 가진 pod에 랜덤으로 접근

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Service
metadata:
  name: clusterip-service
spec:
  type: ClusterIP
  clusterIP: 10.100.100.100
  selector:
    app: webui
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
1
2
3
4
5
6
7
8
9
10
master@k8s-master:~/kubernetes/7$ curl 10.100.100.100
<!DOCTYPE html>
<html>
<head>
  ...
</head>
<body>
  ...
</body>
</html>

NodePort

  • ClusterIP 생성 후, 모든 Worker Node에 외부에서 접속 가능한 포트 개방

예시

nodeIP:30200 접근 시 app:webui의 레이블을 보유한 pod의 10.100.100.200의 80포트로 접근

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Service
metadata:
  name: nodeport-service
spec:
  type: NodePort
  clusterIP: 10.100.100.200
  selector:
    app: webui
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30200

LoadBalancer

  • 클라우드 인프라스트럭처(AWS, Azure, GCP 등)나 오픈스택 클라우드에 적용
  • LoadBalancer를 자동으로 프로 비전하는 기능 지원
  • 클라이언트가 Load balancer로 접근할 시 Pod로 Forwarding

예시

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
  name: loadbalancer-service
spec:
  type: LoadBalancer
  selector:
    app: webui
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

ExternalName

  • 클러스터 안에서 외부에 접속 시 사용할 도메인을 등록해서 사용
  • 클러스터 도메인이 실제 외부 도메인으로 치환되어 동작

예시

externalname-svc.default.svc.cluster.local

  • *.default.svc.cluster.local 이라는 쿠버네티스의 기본 도메인 네임스페이스

```yaml apiVersion: v1 kind: Service metadata: name: externalname-svc spec: type: ExternalName externalName: google.com

This post is licensed under CC BY 4.0 by the author.