쿠버네티스 서비스

snooby·2022년 7월 29일
0

🐳 Docker & K8S

목록 보기
9/51
post-thumbnail

쿠버네티스로 만든 모든것들을 사실 외부 사용자가 파드를 이용하게 될 것이다.
그러나 앞선 실습과 개념으로 알알겠지만,
파드는 언제든지 사라질 수 있는 개념이고 그 때마다 IP가 달라진다.

그렇다면 외부에서 파드에 어떻게 접속할 수 있을까?
고정된 IP를 제공하고 사용자가 그곳을 통해 접속할 수 있게해야한다.

이렇게 외부에서 쿠버네티스 클러스터에 접속하는 방법이 서비스이다.

이러한 서비스도 종류가 여러가지 있는데 각 특징에 대해서 알아보자.

  1. ClusterIP
  2. NodePort
  3. LoadBalancer

1. ClusterIP

클러스터 안에 있는 다른 pod들이 접근할 수 있도록 IP를 할당한다.
중요한 것은 내부 IP만을 할당하기 때문에 클러스터 외부에서는 접근이 불가하다.

apiVersion: v1
kind: Service
metadata:  
  name: my-internal-service
spec:
  selector:    
    app: my-app
  type: ClusterIP
  ports:  
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP

결국 이 또한 외부에서는 접근이 안되기 떄문에 클러스터 외부와의 통신을 위해서는 NodePort나 LoadBalancer 서비스가 필요하다.
가장 쉬운방법은 kube-proxy를 통해 port-forwar 시켜 로컬호스트 포트로 접속을 시킬 수 있다.

하지만 실제 서비스를 이렇게 할 수 있는 것은 아니니 다음 서비스 방법을 알아보자.

2. NodePort

모든 쿼너 노드의 특정 포드를 열어놓고 여기로 오는 모든 요청을 노드포트 서비스로 전달합니다.

NodePort처럼 포트를 여는 방법은 2가지가 있다.
1. service 정의한 오브젝트 스팩 파일을 작성하고 실행

apiVersion: v1
kind: Service
metadata:
  name: np-svc
spec:
  selector:
    app: np-pods 
  ports:
    - name: http
      protocol: TCP
      port: 80 # 서비스 포트 
      targetPort: 80 # pod에 접근할 때 사용하는 포트 
      nodePort: 30000 # pod에 열어놓은 포트 
  type: NodePort
  1. expose로 노드포트 서비스 생성
kubectl expose deployment pod명 --type=NodePort --name=서비스명 --port=포드번호

# 서비스 생성확인
kubectl get services

실제 다음처럼 진행하고 접속해보면 잘 접속됨을 볼 수 있다.
접속 주소는 워커노드의 Internal-ip:서비스 포트 이다.

노드포트는 포트를 중복 사용할 수 없어서 1개의 노트포트에 1개의 디플로이먼트만 적용이 가능하다.
여러 디플로이먼트가 있을 때는 노드포트가 사용이 안되는 것.. 이다.

3. LoadBalancer

profile
데이터를 가치있게 다루고 싶은 개발자 🐥

0개의 댓글