[11월 2주차]로컬 환경, MSA 구성하기

carlkim·2023년 10월 19일
0

• 마이크로 소프트 스토어 - > ubuntu download
• MYSQL DB 설치(도커 컨테이너)
• k3d 설치
• 백엔드 앱 파드 생성
• 프론트앤드 파드 생성
• 인그레스 설치
윈도우 OS 환경에 WSL, DOCKER-DESKTOP 사용해서 구성하였습니다.
다음과 같은 아키텍쳐로 구성 할 것입니다.

마이크로 소프트 스토어 - > ubuntu download
시작 위치 → microsoft store 클릭

우분투 검색 → 20.04 or 18.04 선택

사전 조건
도커 설치
https://docs.docker.com/engine/install/ubuntu/
KUBECTL 설치
https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
MYSQL DB 설치(도커 컨테이너)
Docker-compose로 mysql 띄우기.
k3d 설치
k3d 설치
wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
k3d 클러스터 설치
k3d cluster create --api-port 6550 -p "9090:80@loadbalancer" --agents 2
네임스페이스 생성
kubectl create ns api
kubectl create ns frontend
백엔드 앱 파드 생성
서비스와 디플로이먼트 생성.
apiVersion: apps/v1
kind: Deployment
metadata:
name: board-api
namespace: api
spec:
selector:
matchLabels:
app: board-api
template:
metadata:
labels:
app: board-api
spec:
containers:
- name: board-api
image: mirrorkyh/osc-board-api:k3d
ports:
- name: http

          containerPort: 8080

apiVersion: v1
kind: Service
metadata:
name: board-api-svc
namespace: api
spec:
selector:
app: board-api
ports:
- protocol: TCP
port: 8080
targetPort: http
backend app이 k3d → 로컬에 도커로 뜬 mysql에 도달할 수 있게 url 설정
host.k3d.internal 로 지정해준다.
spring:
datasource:
driver-class-name : com.mysql.cj.jdbc.Driver

url: jdbc:mysql://host.docker.internal:3306/oscboard?serverTimezone=Asia/Seoul&characterEncoding=UTF-8

# 아래처럼 로칼 호스트 쓰면 k8s로 띄웠을 때 로컬의 띄운 도커 mysql을 못봐

url: jdbc:mysql://localhost:3306/oscboard?serverTimezone=Asia/Seoul&characterEncoding=UTF-8

k3d 환경에서 기동

url: jdbc:mysql://host.k3d.internal:3306/oscboard?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
username: root
password: 1q2w3e4r

프론트앤드 파드 생성
서비스와 디플로이먼트 생성.
apiVersion: apps/v1
kind: Deployment
metadata:
name: board-front
namespace: frontend
spec:
selector:
matchLabels:
app: board-front
template:
metadata:
labels:
app: board-front
spec:
containers:
- name: board-front
image: mirrorkyh/osc-board-front-java:v1
ports:
- name: https

          containerPort: 9090

apiVersion: v1
kind: Service
metadata:
name: board-front-svc
namespace: frontend
spec:
type: NodePort
selector:
app: board-front
ports:
- protocol: TCP
port: 9090 # 8080 해도 상관없다.
targetPort: https
k3d 환경에 뜬 api 앱을 바라볼 수 있게 설정해줍니다.
server:
port: 9090

custom:
api:
baseurl: http://board-api-svc.api:8080

# 쿠버네티스 서비스를 바라보게함
# http://(api 서비스이름).(네임스페이스이름)

인그레스 설치
ingress 를 frontend 네임스페이스에 설치
osc-board-frontend.com 호스트 이름으로 등록
127.0.0.1 로컬호스트 이름으로 등록할 것.
osc-board-frontend.com/ 으로 들어오면 9090 포트로 보내주는 인그레스이다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: osc-board-frontend-ingress
namespace: frontend
spec:
rules:
- host: osc-board-frontend.com # host에 등록을 해줘야 작동한다
http:
paths:
- backend:
service:
name: board-front-svc
port:
number: 9090
path: /
pathType: Prefix
호스트 파일을 열어 인그레스 호스트 네임을 입력해준다.

성공적으로 인그레스가 frontend 서비스에 붙는 것을 확인 할 수 있습니다

후기
1. 아키텍쳐에 대해 이해하는 과제였습니다.
2. 코드를 만드는 것도 중요하지만 네트워크 설정이 매우 어렵다는 것을 알게되었습니다.
3. k3d, kind 는 매우 좋은 설치 인터페이스 같습니다.

profile
기본부터 가면 됩니다.

0개의 댓글