Kubernetes 기초 (11) - Cluster IP 실습

이것저것 개발자·2023년 4월 3일
0

kubernetes 기초

목록 보기
11/16

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
profile
조호영, Developing something

0개의 댓글