본문 바로가기

⭐ Kubernetes & EKS/서비스 (Service)

서비스와 클러스터IP

# 서비스와 클러스터IP 소개

- 로드밸런싱, 포드를 선택하는 역할

- port: 서비스를 할 포트

- targetPort: pod의 포트

- selector는 label과 관련되어 있고, 해당 selector를 기준으로 로드밸런싱 등 작업을 수행한다.

- yaml 파일들중 ports 처럼 복수의 값을 부여하는 경우 - 을 기준으로 단을 구분한다.

# 서비스 관련 실습은 GKE에서 실행

kubectl create deploy --image=gasbugs/http-go http-go --port=8080 --dry-run=client -o yaml  > http-go-deploy.yaml

vim http-go-deploy.yaml

# 서비스 추가하기

쿠버네티스 공식사이트 검색 > service > service-Kubernetes > kind: 검색

# 서비스 내용 추가

apiVersion: v1
kind: Service
metadata:
  name: http-go-svc
spec:
  selector:
    run: http-go
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
---

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: http-go
  name: http-go
spec:
  replicas: 1
  selector:
    matchLabels:
      run: http-go
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: http-go
    spec:
      containers:
      - image: gasbugs/http-go
        name: http-go
        ports:
        - containerPort: 8080
        resources: {}
status: {}

- 서비스포트 -> pod 포트

- port: 서비스할 포트

- port: pod들의 포트

# 작성한 yaml파일 실행하기

kubectl create -f http-go-deploy.yaml

kubectl get all

# 서비스 정보 확인하기

- ip 까지 할당 받았는지 확인하기

kubectl get pod -o wide

- 서비스의 ip 기억하기

kubectl describe svc

- Endspoints 에 서비스ip와 port를 확인 할 수 있다.

# 스케일링 하기

kubectl scale deploy http-go --replicas=5

kubectl get pod -w

kubectl get pod -o wide

kubectl describe svc

- http-go-svc 의 정보를 확인하면 ip가 총 5개가 할당된것을 확인 할 수 있다.

# edit으로 svc를 수정해보자.

kubectl edit svc http-go-svc

spec 정보에 sessionAffinity 라는 정보를 수정해보자.

sessionAffinity: ClientIP

- 저장이 안될경우 wq! 로 저장을 한다.

kubectl get svc

# 클러스터 IP 정보를 가지고 접속해보자

kubectl run -it --rm --image=busybox bash

wget -O- -q [ 클러스터 IP]

wget -O- -q 10.108.2.7

- 접속을 해보면 해당 서비스는 로드밸런싱 되지 않는다. 이유는 클라이언트IP를 부여해 놓았기 때문이다.

- 내부의 서비스를 공유하기 위한 서비스라고 생각하면 쉽다.