참고) 쿠버네티스 기본 개념
https://velog.io/@kimkevin90/Kubernetes-3-kubectl-Practice
FROM node:alpine
WORKDIR /app
COPY package.json ./
RUN npm install
COPY ./ ./
CMD ["npm", "start"]
docker build -t lim/posts:0.0.1 .
apiVersion: v1
kind: Pod
metadata:
name: posts
spec:
containers:
- name: posts
image: lim/posts:0.0.1
apiVersion: apps/v1
kind: Deployment
metadata:
name: posts-depl
spec:
replicas: 1
selector:
matchLabels:
app: posts
template:
metadata:
labels:
app: posts
spec:
containers:
- name: posts
image: lim/posts:0.0.1
방법1)
방법2)
apiVersion: apps/v1
kind: Deployment
metadata:
name: posts-depl
spec:
replicas: 1
selector:
matchLabels:
app: posts
template:
metadata:
labels:
app: posts
spec:
containers:
- name: posts
image: lim/posts:latest
apiVersion: v1
kind: Service
metadata:
name: posts-srv
spec:
type: NodePort
selector:
app: posts
ports:
- name: posts
protocol: TCP
port: 4000
targetPort: 4000
apiVersion: apps/v1
kind: Deployment
metadata:
name: event-bus-depl
spec:
replicas: 1
selector:
matchLabels:
app: event-bus
template:
metadata:
labels:
app: event-bus
spec:
containers:
- name: event-bus
image: limkevin1313/event-bus
---
apiVersion: v1
kind: Service
metadata:
name: event-bus-srv
spec:
selector:
app: event-bus
ports:
- name: event-bus
protocol: TCP
port: 4005
targetPort: 4005
apiVersion: v1
kind: Service
metadata:
name: posts-clusterip-srv
spec:
selector:
app: posts
ports:
- name: posts
protocol: TCP
port: 4000
targetPort: 4000
결과
Post서비스
await axios.post('http://event-bus-srv:4005/events', {
type: 'PostCreated',
data: {
id, title
}
});
Event-Bus
axios.post("http://posts-clusterip-srv:4000/events", event).catch((err) => {
console.log(err.message);
});
참고) https://kubernetes.github.io/ingress-nginx/deploy/
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-srv
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: posts.com
http:
paths:
- path: /posts
pathType: Prefix
backend:
service:
name: posts-clusterip-srv
port:
number: 4000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-srv
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: posts.com
http:
paths:
- path: /posts/create
pathType: Prefix
backend:
service:
name: posts-clusterip-srv
port:
number: 4000
- path: /posts
pathType: Prefix
backend:
service:
name: query-srv
port:
number: 4002
- path: /posts/?(.*)/comments
pathType: Prefix
backend:
service:
name: comments-srv
port:
number: 4001
- path: /?(.*)
pathType: Prefix
backend:
service:
name: client-srv
port:
number: 3000
apiVersion: skaffold/v2alpha3
kind: Config
deploy:
kubectl:
# yaml파일 path
# 실행 : skaffold dev
manifests:
- ./infra/k8s/*
build:
local:
push: false
artifacts:
- image: limkevin1313/client
context: client
docker:
dockerfile: Dockerfile
sync:
manual:
- src: "src/**/*.js"
dest: .
- image: limkevin1313/comments
context: comments
docker:
dockerfile: Dockerfile
sync:
manual:
- src: "*.js"
dest: .
- image: limkevin1313/event-bus
context: events-bus
docker:
dockerfile: Dockerfile
sync:
manual:
- src: "*.js"
dest: .
- image: limkevin1313/moderation
context: moderation
docker:
dockerfile: Dockerfile
sync:
manual:
- src: "*.js"
dest: .
- image: limkevin1313/posts
context: posts
docker:
dockerfile: Dockerfile
sync:
manual:
- src: "*.js"
dest: .
- image: limkevin1313/query
context: query
docker:
dockerfile: Dockerfile
sync:
manual:
- src: "*.js"
dest: .
skaffold dev
참고 : Microservices with Node JS(Stephen Grider)