[DevOps] K8s Routing Service

illilili·2025년 6월 18일

DevOps

목록 보기
7/12
post-thumbnail

✅ Service

Kubernetes에서 클러스터 내의 Pod들(마이크로서비스)에 접근하기 위해 사용하는 라우터 역할의 객체

  • Service는 클러스터 내부 또는 외부에서 지속적이고 안정적인 접속 경로를 제공
  • 연결된 Pod에 요청을 프락시(proxy) 방식으로 전달

🔹 Service 기본 템플릿

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: order
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  type: ClusterIP # 또는 NodePort, LoadBalancer

🔹 대상 컨테이너 배포

kubectl create deploy order --image=ghcr.io/acmexii/order-liveness:latest

✅ ClusterIP 타입 Service 생성 (클러스터 내부 접근 전용)

kubectl expose deploy order --type=ClusterIP --port=8080 --target-port=8080
kubectl get service
kubectl get service order -o yaml  # Selector 확인

🔹 클라이언트용 Pod 생성 및 내부 접속 테스트

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: siege
spec:
  containers:
  - name: siege
    image: apexacme/siege-nginx
EOF
kubectl exec -it siege -- /bin/bash
http http://<ClusterIP>:8080


✅ NodePort 타입 Service 생성 (외부에서 접근 가능)

kubectl delete service order
kubectl expose deploy order --type=NodePort --port=8080 --target-port=8080
kubectl get service  # NodePort 확인

🔹 접근 테스트

kubectl get pod -o wide           # 어떤 노드에 Pod가 있는지 확인
kubectl get nodes -o wide         # Node IP 확인

🔹 siege Pod에서 접속

http http://<NodeIP>:<NodePort>

특정 노드에 Pod가 없더라도 접속 가능한 이유는 kube-proxy가 모든 노드에 네트워크 라우팅 규칙을 설정(IPTables)하기 때문


✅ LoadBalancer 타입 Service 생성 (외부 인터넷에서도 접근 가능)

kubectl delete service order
kubectl expose deploy order --type=LoadBalancer --port=8080 --target-port=8080
kubectl get service  # External-IP 확인

🔸 Web browser에서 접속 가능

  • http://<External-IP>:8080

🔹 Kube-DNS 기반 이름 접근

🔸 siege Pod

http http://order:8080

  • 생성된 Service는 자동으로 Kube-DNS에 A 레코드로 등록
  • 삭제 시 DNS 레코드도 자동 제거

🔸 DNS 정보 확인

kubectl get service -n kube-system
cat /etc/resolv.conf  # 컨테이너 내부 DNS 서버 확인

profile
코코딩딩

0개의 댓글