Table of Contents
apiVersion: v1
kind: Service
metadata:
name: order # <서비스명>
namespace: snackbar
labels:
service: order
project: snackbar
spec:
type: ClusterIP
selector: # <Deployment 오브젝트 매핑>
service: order
project: snackbar
ports:
- port: 80 # <서비스 오브젝트의 포트>
targetPort: 8080 # <Deployment 오브젝트에서 원하는 컨테이너의 포트>
---
apiVersion: v1
kind: Service
metadata:
name: payment
namespace: snackbar
labels:
service: payment
project: snackbar
spec:
type: ClusterIP
selector:
service: payment
project: snackbar
ports:
- port: 80
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: order
namespace: snackbar
labels: # <서비스가 매핑하기 위해 찾는 부분>
service: order
project: snackbar
spec:
replicas: 2
selector: # <복제할 파드 매핑>
matchLabels:
service: order
project: snackbar
template:
metadata:
labels:
service: order
project: snackbar
spec:
containers:
- name: order
image: yoonjeong/order:1.0
ports:
- containerPort: 8080 # <서비스 오브젝트의 targetPort와 일치시키는 부분>
resources:
limits:
memory: "64Mi"
cpu: "50m"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: payment
namespace: snackbar
labels:
service: payment
project: snackbar
spec:
replicas: 2
selector:
matchLabels:
service: payment
project: snackbar
template:
metadata:
labels:
service: payment
project: snackbar
spec:
containers:
- name: payment
image: yoonjeong/payment:1.0
ports:
- containerPort: 8080
resources:
limits:
memory: "64Mi"
cpu: "50m"
kubectl create namespace snackbar
kubectl apply -f ./snackbar/service-deployment.yaml
kubectl get all -n snackbar
kubectl get svc -o wide -n snackbar
kubectl get endpoints -n snackbar
- 서비스 오브젝트를 만들면 컨테이너에 엔드포인트 오브젝트 자동 생성
kubectl exec -it order-5d45bf5796-j4g7w -c order -n snackbar -- /bin/sh
cat /etc/resolv.conf
서비스 관련 환경변수는 모든 오브젝트에 저장됨
order 컨테이너에 payment 서비스 관련 환경변수도 저장되어 있음 -> 환경 변수로 통신할 수 있게함
curl ${PAYMENT_SERVICE_HOST}:${PAYMENT_SERVICE_PORT}
payment 서비스를 이용해서 통신하는 방법
# 여기서 payment는 Service 오브젝트의 metadata.name에 해당한다
curl payment:80
만약 다른 네임스페이스에 있는 파드인 경우 <서비스명>.<네임스페이스명> 으로 하면된다.네임스페이스명>서비스명>
curl payment.snackbar:80