오브젝트 사용해보기

Jaca·2022년 8월 11일
0

구성한 클러스터를 기반으로 여러가지 오브젝트를 사용해보고자 한다.
모든 오브젝트를 다룰수는 없으니 Deployment와 각종 Service 들을 사용해보고자 한다.

사전 준비

Flask

파드가 생성 되었을 때 어떤 노드에 스케쥴링 되는지 확인해보기 위해 접근 시 호스트네임을 리턴하는 Flask를 준비했다.

추후 배포 과정과 URL 기반 트래픽 분산 등의 확장과 K8S 이상의 확장까지 고려하고 있다.

Image

FROM python:3.9.4

RUN mkdir -p /root/k8s-web
WORKDIR /root/k8s-web
COPY . .
RUN python -m pip install --upgrade pip
RUN pip install -r ./requirements.txt

EXPOSE 5000
CMD python main.py

위 파일을 기반으로 Dockerfile을 작성해 이미지를 빌드해서 docker hub의 private repo에 올려두었다.

private repo이기 때문에 image pulling시 별도의 설정이 필요하다.
https://kubernetes.io/ko/docs/tasks/configure-pod-container/pull-image-private-registry/

Deployment 생성

  • web-dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
  labels:
    app: flask-web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: flask-web
  template:
    metadata:
      labels:
        app: flask-web
    spec:
      containers:
      - name: k8s-web
        image: maduee2/k8s-web:0.1
        ports:
        - containerPort: 5000
      imagePullSecrets:
      - name: regcred

deployment를 만들고 클러스터에 생성한다.
kubectl apply -f web-dp.yaml

Service 생성

외부에서 앱에 접근이 불가능하다면 의미가 없으므로, Service를 붙여 본다.

NodePort

apiVersion: v1
kind: Service
metadata:
  name: web-np
  labels:
    app: flask-web
spec:
  selector:
    app: flask-web
  ports:
    - name: np
      protocol: TCP
      port: 5000
      targetPort: 5000
      nodePort: 30000
  type: NodePort

잘 생성되었는지 확인하고 GCP에서 Nodeport인 30000번 포트를 열고 외부에서 접근해본다.

IP 정보를 가리기 위해 return 값만 확인한다.
잘 접근되긴 하나 한 IP로만 접근하는데 모든 pod으로 통신이 가는 것을 확인할 수 있다.

이는 Service가 자신에게 연결된 Pod를 구분없이 아무나 연결하기 때문인데,
이것을 막으려면 yaml 파일에 externalTrafficPolicy: Local 옵션을 추가해서 해당 IP에 맞는 node로만 연결할 수 있다.

LoadBalancer

apiVersion: v1
kind: Service
metadata:
  name: web-lb
spec:
  selector:
    app: flask-web
  ports:
    - port: 80
      targetPort: 5000
  type: LoadBalancer
  loadBalancerIP: 외부 IP 할당 시도해보았음..ㅠ

위 yaml 파일로 LoadBalancer를 만들어 보았다.

생성은 잘 되지만 EXTERNAL-IP가 할당이 되지 않는다.
퍼블릭 클라우드 업체를 사용하면 LB 타입을 사용할 수 있다고 여기저기서 들었는데, 새 FIP를 생성해서 IP를 부여해봐도 할당되지 않는다.
아마 k8s 서비스를 사용해서 FIP를 할당해야 할 것 같다.
혹시 누가 나에게 답을 알려주지 않으려나..ㅠ

온프레미스 환경에서는 LB를 공부할 때 Metal LB를 통해 많이 하기 때문에, 나도 Metal LB라도 사용해 볼까 했는데
어짜피 그래도 FIP를 할당할 수 없고 L2 통신용으로만 사용 가능할테니,
굳이 지금도 할 수 있는 것을 할 필요는 없을 것 같아 넘어가도록 하자..

LoadBalancer에 부여된 Cluster-IP로도 충분히 L2 접근이 가능하다.

profile
I am me

0개의 댓글