apiVersion: v1
kind: Service
metadata:
name: db-svc
spec:
selector:
type: db
ports:
- port: 3306
targetPort: 3306
apiVersion: v1
kind: ConfigMap
metadata:
name: db-cm
data:
MYSQL_ROOT_PASSWORD: "qwer1234"
apiVersion: v1
kind: Pod
metadata:
name: db-pod
labels:
type: db
spec:
containers:
- name: container
image: mysql:8.0.32-debian
envFrom:
- configMapRef:
name: db-cm
apiVersion: v1
kind: Service
metadata:
name: backend-svc
spec:
selector:
type: backend
ports:
- port: 8000
targetPort: 8000
apiVersion: v1
kind: ConfigMap
metadata:
name: backend-cm
data:
DBNAME: "web"
DBUSER: "root"
DBPASS: "qwer1234"
DBHOST: "db-svc"
DBPORT: "3306"
FROM python:3.9
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY r.txt /app/r.txt
COPY . /app
RUN pip install -r r.txt
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ["DBNAME"],
'USER': os.environ["DBUSER"],
'PASSWORD': os.environ["DBPASS"],
'HOST': os.environ["DBHOST"],
'PORT': os.environ["DBPORT"],
'OPTIONS': {
'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"'
}
}
}
apiVersion: v1
kind: Pod
metadata:
name: backend-pod
labels:
type: backend
spec:
containers:
- name: container
image: cis07385/back:1.0
command: ["/bin/sh", "-ec", "python manage.py migrate && gunicorn config.wsgi --bind 0.0.0.0:8000"]
envFrom:
- configMapRef:
name: backend-cm
apiVersion: v1
kind: Service
metadata:
name: frontend-svc
spec:
selector:
type: frontend
ports:
- port: 80
targetPort: 80
apiVersion: v1
kind: ConfigMap
metadata:
name: frontend-cm
data:
BACKEND_SVC_NAME: "backend-svc"
FROM nginx:latest
RUN rm -rf /usr/share/nginx/html/index.html
ADD build /usr/share/nginx/html
RUN rm -rf /etc/nginx/conf.d/default.conf
ADD default.conf.template /etc/nginx/conf.d/default.conf.template
server {
listen 80;
server_name localhost;
location /dev {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://${BACKEND_SVC_NAME}:8000;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
data:
BACKEND_SVC_NAME: "backend-svc"
docker login 명령어로 login 해놓기
docker hub에 namespace에 레포지토리 생성
docker build --tag (namespace)/(repository):(tag) .
docker push (namespace)/(repository):(tag)
apiVersion: v1
kind: Pod
metadata:
name: frontend-pod
labels:
type: frontend
spec:
containers:
- name: container
image: cis07385/front:1.0
command: ["/bin/sh", "-ec", "envsubst '$BACKEND_SVC_NAME' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]
envFrom:
- configMapRef:
name: frontend-cm
위의 명령어를 치면 master node에서 해당 서비스의 클러스터 ip에는 접근할 수 있기 때문에 db의 저장된 값을 볼 수 있다. 필자는 db에 아무것도 저장하지 않았기에 아무것도 뜨지 않는다.
client가 front의 ip로 접속했을 때에는 안 뜬다.
왜냐면 이건 클러스터 내부에서만 쓸 수 있는 서비스이기 때문에 외부 ip에서는 접근이 불가하다.
각 연결되어 있는 노드들끼리만 접속이 가능하다.
나중에는 외부에 있는 사용자들이 쿠버네티스 안에 컨테이너로 만들어져있는 특정 프로그램에 연결되게 하려면, Nodeport 혹은 Loadbalance를 사용해야한다.
우리가 만든 frontend service의 ip만 외부에서 접속할 수 있으면 된다.
frontend 서비스 설정에 들어가서 default로 cluster ip로 설정되어 있는 것을 type:NodePort로 바꾸어 주고 나와서 확인해보면?
특정 주어지는 port로 외부에서 접속이 가능하게 해준다.
그러면 front에 back url을 부여받은 port까지 작성해서 넣어주고, build 파일을 다시 master node에 올려서 이미지를 생성 후, 파드를 재 생성해야한다.
접속은 master의 ip 혹은 node1, node2의 ip에 port로 접속하면 된다.
이건 또 쿠버네티스의 구조와 연관이 있는데 다음시간에..
그런데 사용자들이 30000번대의 port로 브라우저에 접속하지는 않는다.
이건 데모 버전에서 테스트를 할 때에만 사용함. 80번이나 443번을 지정하지 못함.