상세 컨텐츠

본문 제목

[Kubernetes] 서비스 (cluster IP, Nodeport, Loadbalancer) 와 인그레스

Devops 도전기/kubenetes

by 끝까지해봐야지 2024. 5. 21. 15:07

본문

 

 

 

서비스(Service)와 인그레스(Ingress)는 모두 쿠버네티스에서 네트워크 트래픽을 관리하는 도구입니다.

공통점:

  1. 네트워크 트래픽을 관리하고 서비스에 대한 접근을 제어합니다.
  2. 쿠버네티스 클러스터 내부에서 서비스를 외부로 노출하는 데 사용됩니다.
  3. HTTP 및 HTTPS와 같은 프로토콜을 사용하여 트래픽을 관리할 수 있습니다.

 

 

 

서비스의 역할: 서비스는 쿠버네티스 클러스터 내의 파드(Pod) 집합에 대한 네트워크 엔드포인트를 제공하고 관리합니다. 이를 통해 파드에 접근할 수 있으며, 로드 밸런싱 및 서비스 디스커버리를 지원합니다.

* 요약: 클러스너 내부 or 외부 -> pod 

 

Ingress 역할: 클러스터 외부에서 안에 있는 파드에 접근할 때 사용하는 방법

* 요약: 클러스터 외부 -> service -> pod

 

 

  • ClusterIP:
    • 내부 클러스터에서만 사용 가능한 가상 IP를 할당하여 서비스에 접근합니다.
    • 클러스터 내부 통신에 사용되며, 외부에서는 접근할 수 없습니다.
    • 파드 간 통신에 사용되어 안전하고 효율적인 내부 통신을 제공합니다.

 

 

 

 

 

 

 

 

 

  • NodePort:
    • 각 노드에 지정된 포트를 통해 외부에서 서비스에 접근합니다.
    • 외부로 노출되며, 로드 밸런싱 없이 노드에 직접 연결됩니다.
    • 테스트 및 개발 환경에서 서비스를 외부로 노출할 때 사용됩니다.
  • Nodeport yaml 예시
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - port: 80
      # By default and for convenience, the `targetPort` is set to
      # the same value as the `port` field.
      targetPort: 80
      # Optional field
      # By default and for convenience, the Kubernetes control plane
      # will allocate a port from a range (default: 30000-32767)
      nodePort: 30007

 

 

 

 

 

 

 

 

 

 

 

 

 

  • LoadBalancer:
    • 클라우드 제공 업체의 로드 밸런서를 사용하여 외부 트래픽을 로드 밸런싱합니다.
    • 외부에서 접근 가능하며, 로드 밸런서를 통해 트래픽이 파드로 분산됩니다.
    • 프로덕션 환경에서 고가용성 및 확장성을 위해 사용됩니다.
  • LoadBalancer yaml 예시
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  clusterIP: 10.0.171.239
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.0.2.127

 

 

 

 

 

 

 

 

 



  • Ingress:
    • HTTP 및 HTTPS 트래픽을 클러스터 내의 서비스로 라우팅하기 위한 규칙을 정의하는 API 객체입니다.
    • 단일 IP 주소 또는 호스트명으로 여러 서비스에 대한 액세스를 제공합니다.
    • 애플리케이션 경로 기반 라우팅, SSL/TLS 종료 및 로드 밸런싱과 같은 고급 기능을 제공하여 외부에서 여러 서비스에 접근하는 데 사용됩니다.
  • ingress yaml 예시
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

 

'Devops 도전기 > kubenetes' 카테고리의 다른 글

[Kubernetes] 인그레스 컨트롤러  (0) 2024.05.23
[Kubernetes] pod 설명  (1) 2024.05.21
[Kubernetes] Yaml 설명  (0) 2024.05.21
[Kubernetes] 설치하기 (minikube)  (0) 2024.05.21
[Kubernetes] 아키텍처  (0) 2024.05.21

관련글 더보기