Tools/K8S

Kubernetes Services

칼쵸쵸 2023. 3. 19. 21:03

- 서비스

애플리케이션의 다양한 구성요소에서의 통신을 위해 사용함

내부의 모든 파드들 간의 연결뿐만 아니라 클러스터 외부와의 연결도 담당함

1. NodePort

쿠버네티스 노드의 ip (192.168.1.2)이고 노드 내부의 파드의 ip는 10.244.0.2인상태에서

외부(192.169.1.10)가 파드에 접속하는 방법

파드의 80 포트(targetPort)를 서비스(10.106.1.12)의 80(port)으로 연결하고 해당 서비스를 노드의 특정포트(nodePort, 30000~32767)에 연결하여 사용함

apiVersion : v1
kind : Servcie
metatdata :
	name: myapp-service
    
spec:
	type: NodePort
	ports:
	  - targetPort:80
		port:80
		nodePort:30008
    selector:
        app: myapp
        type: front-end

노드포트는 지정하지 않을시에 자동으로 지정함

사실 80포트를 사용하는 포드는 여러 개 존재할 수 있음

따라서 Selector 가 필요함

연결하려는 파드의 라벨에 해당하는 정보 app, type을 정의해 줘야 됨

부하 분산으로 같은 라벨로 여러 개의 파드가 생성된 상황에서도 라벨에 해당하는 파드간의 로드밸런싱함

새로 생성되는 파드들에 대해서도 같은 서비스에 연결되도록 쿠버네티스가 자동으로 설정함

 

 

2. ClusterIP

프런트엔드, 백엔드, 캐시 서버등 다양한 종의 파드가 존재함

프런트는 백엔드로 , 백엔드는 DB로 연결하도록 해야 됨

각 파드는 모두 ip를 가지고 있으나 파드 생성, 삭제에 따라서 항상 변함

프런트 -> 백으로 연결이 갔을 때 어떤 파드에게 연결을 주어야 하는가 하는 것을 결정하는 인터페이스가 존재해야 됨

각 계층 별로 파드를 늘리고 줄일 때 네트워크 관련된 문제를 해결하기 위해서 cluster ip가 필요함

클러스터 내부의 파드간의 네트워크를 위해 존재

apiVersion : v1
kind : Servcie
metatdata :
	name: back-end
    
spec:
	type: ClusterIP
	ports:
	  - targetPort:80
		port:80
        
    selector:
        app: myapp
        type: back-end

host = metadata.name

port = ports.port

meatadata.name : ports.port로 접속하면 해당 종류의 파드에 접속하게 됨

 

3. 클라우드 로드 밸런서

클라우드 플랫폼과 연동하여 클러스터 외부에서 접근하는 요청을 로드밸런싱함

apiVersion : v1
kind : Servcie
metatdata :
	name: myapp-servcie
    
spec:
	type: LoadBalancer
	ports:
	  - targetPort:80
		port:80
        name:webport
    selector:
         app: webserver

위와 같이 생성할 경우 외부에서 접근하는 external ip는 aws, gcp등과 같은 주소로 할당받게 되며

해당 주소와 ports.port를 통해서 외부에서 접근이 가능해짐

 

practice

1) How many Services exist on the system?

- kubectl get services

NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1    <none>        443/TCP   11m

2) What is the targetPort configured on the kubernetes service?

- kubectl describe service kubernetes

Name:              kubernetes
Namespace:         default
Labels:            component=apiserver
                   provider=kubernetes
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.43.0.1
IPs:               10.43.0.1
Port:              https  443/TCP
TargetPort:        6443/TCP
Endpoints:         192.15.34.3:6443
Session Affinity:  None
Events:            <none>

 

'Tools > K8S' 카테고리의 다른 글

Kubernetes ReplicaSet  (0) 2023.07.01
Kubernetes Config  (1) 2023.06.17
Kubernetes Scheduling  (0) 2023.03.20
Kubernetes namespace  (0) 2023.03.19
Kubernetes Core concept  (0) 2023.03.18