order 서비스
apiVersion: v1
kind: Service
metadata:
name: order
namespace: snackbar
labels:
service: order
spec:
type: ClusterIP # 선언하지 않았을 경우에는 ClusterIP가 기본타입
selector: # 파드 집합 선택자
service: order
ports:
- port: 80 # 노출할 서비스 포트
targetPort: 8080 # 연결할 컨테이너 포트
order deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: order
namespace: snackbar
labels:
service: order
spec:
replicas: 2
selector:
matchLabels:
service: order
template:
metadata:
labels:
service: order
spec:
containers:
- name: order
image: <image-name>:<image-tag>
ports:
- containerPort: 8080
payment 서비스
apiVersion: v1
kind: Service
metadata:
name: payment
namespace: snackbar
labels:
service: payment
spec:
type: ClusterIP # 선언하지 않았을 경우에는 ClusterIP가 기본타입
selector: # 파드 집합 선택자
service: payment
ports:
- port: 80 # 노출할 서비스 포트
targetPort: 8080 # 연결할 컨테이너 포트
payment deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: payment
namespace: snackbar
labels:
service: payment
spec:
replicas: 2
selector:
matchLabels:
service: payment
template:
metadata:
labels:
service: payment
spec:
containers:
- name: payment
image: <image-name>:<image-tag>
ports:
- containerPort: 8080
명령어
snackbar 네임스페이스의 모든 리소스 조회
kubectl get all -n snackbar
- Pod, ReplicaSet, Deployment, Service 생성 확인
생성한 order, payment Service 상세 조회
kubectl get svc -o wide -n snackbar
snackbar 네임스페이스의 모든 Endpoints 리소스 확인
kubectl get endpoints -n snackbar
Service Selector와 매치되는 파드 집합이 없는 경우
- 만약 Service IP로 요청에 실패한다면, Service Endpoints 구성을 확인한다.
(Selector를 잘못 설정헀거나, Pod이 정상적으로 실행되고 있지 않는 상황)
실습시 사용할 명령어
네임 스페이스 생성
kubectl create namespace <namespace>
네임스페이스의 모든 리소스 조회
kubectl get all -n <namespace>
네임스페이스의 Service 상세 조회
kubectl get svc <service-name> -o wide -n <namespace>
Service ClusterIP 조회
kubectl get svc <service-name> -o jsonpath="{.spec.clusterIP}" -n <namespace>
Service간 통신
실습시 사용할 명령어
컨테이너 환경변수 확인
kubectl <pod-name> -n <namespace> --env | grep <service-name>
컨테이너 쉘 접속
kubectl exec -it <pod-name> -n <namespace> -sh
환경변수를 이용해 요청
curl $PAYMENT_SERVICE_HOST:$PSYMENT_SERVICE_PORT
Service 이름을 통해서 요청 전달
kubectl exec -it <pod-name> -n <namespace> -- curl -s <service-name>:<port>
service-name
부분에 <service-name>.<namespace>
이런식으로 명시해주는것이 명확하다 (다른 namespace와의 통신을 위해)
kube-system 네임스페이스의 모든 kube-dns 리소스 조회
kubectl get all -n kube-system | grep kube-dns
네임서버 확인
label 모든 리소스 제거
kubectl delete all -l <label> --all-namespaces