인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박승환님의 프로필 이미지
박승환

작성한 질문수

비전공자도 이해할 수 있는 쿠버네티스 입문/실전

[예제] 백엔드(Spring Boot) 서버와 MySQL 연동하기

pod는 정상적인데 페이지가 안나와요

작성

·

21

0

image.pngimage.png

pod, service, deployment 정상적으로 실행되는데 페이지가 작동하지 않는다고 나옵니다 Hello,World 가 나와야하는데 무엇이 문제일까요

답변 1

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 승환님! 잘 질문 주셨습니다:)

작성하신 모든 yaml 파일 전부 복사 붙여넣기 해서

보여주실 수 있으실까요~??

 

그리고 kubectl get service 라는 명령어 입력 후

출력되는 결과 값들도 같이 캡쳐해서 보내주시기 바랍니다!

 

같이 확인 도와드릴게요~!!

박승환님의 프로필 이미지
박승환
질문자

image.png

 

 

스프링부트 service

apiVersion: v1
kind: Service

metadata:
  name: test-service

spec:
  type: NodePort
  selector:
    app: backend-app
  ports:
    - port: 8080
      nodePort: 30000
      targetPort: 8080
      protocol: TCP

 

스프링부트 deployment

apiVersion: apps/v1
kind: Deployment

metadata:
  name: test-deployment

spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-app

  template:
    metadata:
      labels:
        app: test-app

    spec:
      containers:
        - name: test-container
          image: test-server
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
          env:
            - name: DB_HOST
              value: mysql-service
            - name: DB_PORT
              value: "3306"
            - name: DB_NAME
              value: kub-practice
            - name: DB_USERNAME
              value: root
            - name: DB_PASSWORD
              value: password123

 

mysql deployment

apiVersion: apps/v1
kind: Deployment

metadata:
  name: mysql-deployment

spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-db

  template:
    metadata:
      labels:
        app: mysql-db
    spec:
      containers:
        - name: mysql-container
          image: mysql
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  key: mysql-root-password
                  name: mysql-secret
            - name: MYSQL_DATABASE
              valueFrom:
                configMapKeyRef:
                  key: mysql-database
                  name: mysql-config
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-pvc

 

mysql service

apiVersion: v1
kind: Service

metadata:
  name: mysql-service

spec:
  type: NodePort
  selector:
    app: mysql-db
  ports:
    - port: 3306
      protocol: TCP
      nodePort: 30003
      targetPort: 3306

 

mysql pv

apiVersion: v1
kind: PersistentVolume

metadata:
  name: mysql-pv

spec:
  storageClassName: my-storage
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

 

mysql pvc

apiVersion: v1
kind: PersistentVolumeClaim

metadata:
  name: mysql-pvc

spec:
  storageClassName: my-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

 

mysql configmap

apiVersion: v1
kind: ConfigMap

metadata:
  name: mysql-config

data:
  mysql-database: kub-practice

 

mysql secret

apiVersion: v1
kind: Secret

metadata:
  name: mysql-secret

stringData:
  mysql-root-password: password123
JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

답변해주셔서 감사합니다!

 

작성해주신 yaml을 보니 스프링부트 deployment의 yaml에서 selector 부분이
잘못 작성되어 있습니다!

 

스프링부트 Service에서는 spec.selector.app의 값이
backend-app으로 설정되어 있으나
스프링부트 deployment에서는 backend-app이 아닌
test-app으로 설정되어 있습니다.
정상적으로 작동하려면 Service에서의 값과
deployment에서의 값을 일치시켜주어야 합니다!

 

위 내용을 반영해보신 뒤에 또 에러가 발생하시면

Spring Boot가 실행되는 Pod의 로그도 같이 캡쳐하신 뒤에

다시 한 번 질문 남겨주세요:D

박승환님의 프로필 이미지
박승환

작성한 질문수

질문하기