쿠버네티스 시작하기 3편

김성민·2024년 3월 30일
0

kubernetes

목록 보기
3/3

1편 : 쿠버네티스 시작하기 1편

2편 : 쿠버네티스 시작하기 2편

이전 편에서 쿠버네티스 구성과, deployment 에 대해 알아보았다.
이번 편에서는 쿠버네티스에서 어떻게 pod 의 어플리케이션을 실행하는지 확인해보자.

mas 환경에서는?

예를 들어 백엔드의 API 를 제공하는 서비스가 존재하고, 프론트엔드가 작업한 서비스는 백엔드 API 서비스를 호출해야 한다고 가정하자.
백엔드가 제공하는 서비스의 ip 주소를 host 로 호출하면 정상적으로 사용 할 수 있을 것이다.
매우매우 일반적인 사용 방법이다.
하지만 클라우드 환경에서는 각 서비스의 ip 주소가 변경될 수 있고 이때마다 클라이언트가 host ip 를 변경해 줄 수는 없다.
mas 환경에서는 이 상황을 해결하기 위해 "서비스 디스커버리" 를 사용한다.

쿠버네티스에서는?

쿠버네티스에서는 이런 서비스 디스커버리를 사용하지 않고, 자체적으로 각 pod 에 고유한 내부 ip 를 부여하고 이 pod 집하에 대해 단일 DNS 를 제공함으로써 로드벨런싱이 이루어 질 수 있도록 한다.

즉, 쿠버네티스 service 를 통해 클라이언트는 백엔드 pod 의 ip 가 변경되거나 상태가 변경됨에 상관 없이 다른 pod 집합을 호출할 수 있는 것이다.
이렇게 디커플링이 이루어진다.

service 작성해보기

일전에 작성했던 nginx pod를 실행시키는 yml 파일이다.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: proxy
spec:
  containers:
  - name: nginx
    image: nginx:stable
    ports:
      - containerPort: 80
        name: http-web-svc
// kubectl apply -f {yml파일}
// pod
NAME                                    READY   STATUS              RESTARTS        AGE
pod/nginx                               1/1     ContainerCreating   0               6s


// service
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE

이 nignx pod 를 호출하기 위한 service 를 작성해본다.
service 는 pod 생성 yml 아래 붙인다.

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app.kubernetes.io/name: proxy
  ports:
  - name: name-of-service-port
    protocol: TCP
    port: 80
    targetPort: http-web-svc

이 서비스의 내용은 이렇다.
1. app.kubernetes.io/name: proxy 라는 레이블을 가진 pod 에서 port 가 80인 pod 를 select 한다.
2. 쿠버네티스는 이 서비스가 해당 레이블을 가진 pod 를 지속적으로 탐색하도록 한다.

그리고 다시 pod 를 실행해본다면 service 가 생성되었을 것이다.

// pod
NAME                                    READY   STATUS              RESTARTS        AGE
pod/nginx                               1/1     ContainerCreating   0               6s


// service
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/nginx-service   ClusterIP   10.102.128.241   <none>        80/TCP    5s

이렇게 쿠버네티스가 service 를 사용해 pod 간 통신 하는 방법을 알아보았다. 생각보다 간단하지만 이 내용은 단순 기초일뿐 더 많은 옵션과 방법이 존재하니 아래 쿠버네티스 공홈을 참고하자.
https://kubernetes.io/ko/docs/concepts/services-networking/service/

0개의 댓글