본문 바로가기

Backend/Docker, k8s

k8s - Service

Service는 고정 IP를 통해 Client로부터 Pod의 일회성으로 인한 IP변동에 대해 알 필요가 없도록 하는 기술이다.

 

ClusterIP

기본 서비스 타입. 클러스터 내부에서 사용 가능

 

예시1 : hostname-server.yaml (deployment)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hostname-server
  labels:
    app: hostname-server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hostname-server
  template:
    metadata:
      labels:
        app: hostname-server
    spec:
      containers:
      - name: hostname-server
        image: takytaky/hostname
        ports:
        - containerPort: 80

 

예시2 : clusterip-hostname.yaml (service)

apiVersion: v1
kind: Service
metadata:
  name: clusterip-hostname-service
spec:
  type: ClusterIP
  selector:
    app: hostname-server
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

 

.spec.type : ClusterIP는 기본

.spec.selector: app.hostname-server

ports: port(svc):80, targetPort(container): 80

service 실행 확인

service endpoint를 확인하려면

kubectl describe svc {service_name}

 

linux 내에서 확인하려면

iptables -t nat -s | grep {service_name}

 

이런 규칙은 Master node뿐만 아니라 worker node에도 똑같이 설정되어 있다. 이런 규칙을 배포하는 pod가 바로 kube-proxy이다. 아래 명령어로 확인해보자

kubectl get ds -n kube-system

 

* sessionAffinity : 연결 요청시 규칙

 - NONE : 임의 pod 연결

 - ClientIP : 같은 Client면 같은 pod을 연결

 - timeoutSeconds : 클라이언트 정보가 유지되는 시간(기본값 3hours)동안 같은 pod 연결

 

service 제거를 하려면

kubectl delete svc {service_name}

 

 

NodePort : ClusterIP + Export IP(Node IP)를 같이 사용

apiVersion: v1
kind: Service
metadata:
  name: nodeport-hostname-service
spec:
  type: NodePort
  selector:
    app: hostname-server
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080

.spec.ports

 - port(svc가 수신할 port)

 - targetPort(container가 수신할 port)

 - nodePort(30000~32767 범위) (Node가 수신할 port)

 

 

'Backend > Docker, k8s' 카테고리의 다른 글

Docker + Frontend(Nginx, React) + Backend(Nginx, Gunicorn, Django, PostgreSQL)  (7) 2023.06.20
Docker Compose - tutorial  (0) 2023.06.18
Docker - Tutorial  (0) 2023.06.17
k8s - Pod  (0) 2023.04.27
Docker - ubuntu에 Docker 설치  (0) 2023.04.26