Myo-Kyeong Tech Blog

[Kubernetes] 쿠버네티스 네트워크 통신 오브젝트 : Service 와 Ingress 본문

DevOps/Kubernetes

[Kubernetes] 쿠버네티스 네트워크 통신 오브젝트 : Service 와 Ingress

myo-kyeong 2024. 5. 6. 01:19
728x90
반응형

Service

  • 각 파드는 고유한 IP를 할당받지만, 동적으로 생성되고 제거되기 때문에 IP 주소가 자주 변경될 수 있음
  • Service는 이러한 파드들에 대한 하나의 고정된 IP 주소와 포트를 제공
    • 파드의 생성과 소멸에 관계없이 일관된 방식으로 파드에 접근할 수 있음

 

Service 유형 : ClusterIP, NodePort, LoadBalancer

1. ClusterIP

  • 기본 서비스 유형, 클러스터 내부에서만 접근 가능한 내부 IP를 할당받음
    • 클러스터 외부에서는 접근할 수 없음
  • ClusterIP 주소로 요청하면, 쿠버네티스는 자동으로 연결된 파드 중 하나로 라우팅하여 처리

[ClusterIP 서비스 YAML 파일 예시]

apiVersion: v1
kind: Service
metadata:
  name: my-web-service  # 서비스 이름
spec:
  type: ClusterIP
  selector:
    app: my-web-app # 어떤 파드들과 연결될지 결정하는 라벨 셀렉터
  ports:
    - protocol: TCP
      port: 80    # 외부에서 접근할 때 사용할 포트
      targetPort: 8080  # 서비스 요청을 받을 파드의 포트

 

 2. NodePort

  • ClusterIP는 내부에서만 통신할 수 있기 때문에 외부 브라우저로는 접근할 수 없음
  • 클러스터 외부에서 파드에 접근하기 위해 사용되는 서비스 유형 
    • 모든 노드에서 특정 포트를 개방하여, 외부에서 그 포트를 통해 파드에 접근 가능
    • NodePort 서비스 생성할 때, 자동으로 30000-32767 범위에서 하나의 포트를 할당하거나, 사용자가 지정한 포트를 사용
    • 지정된 포트는 클러스터의 모든 노드에서 동일하게 열림

[NodePort 서비스 YAML 파일 예시]

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30007  # 외부에서 접근할 때 사용할 노드의 포트, 자동할당 원하지 않을 경우 명시적으로 지정

 

 3. LoadBalancer

  • 외부 트래픽을 클러스터 파드로 분산시키는 데 도움을 줌
    • 모든 파드가 균등한 트래픽을 받아 처리할 수 있게 도와줌
  • 대규모 트래픽 처리하는 프로덕션 환경에서 추천
  • 특히 클라우드 환경에서 매우 유용
    • 대부분의 클라우드 환경에서는 LoadBalancer 타입의 서비스를 쉽게 설정하고 관리 할 수 있음

 

Ingress

  • Service는 IP, 포트로만 접근하는 것이라면 Ingress는 도메인 이름, 도메인 뒤의 path에 따라 접속할 수 있음

 

[Service + Ingress 서비스 YAML 파일 예시]

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: myapp.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

'my-service'는 ClusterIP 서비스로 구성되어 있어 클러스터 내부에서만 접근 가능하며, 'my-ingress'는 외부에서 'myapp.example.com' 도메인으로 들어오는 요청을 'my-service'로 라우팅한다. 


REFERENCE

728x90
반응형