호랑이한테물릴래

쿠버네티스 서비스와 인그레스 본문

DevOps/Kubernetes

쿠버네티스 서비스와 인그레스

호랑이한테물릴래 2022. 9. 12. 18:41
반응형

서비스와 인그레스는 같은 네트워크 관련 오브젝트로, 쿠버네티스의 각 컨테이너의 네트워크 포워딩과 설정에 관여한다고 볼 수 있다.

https://subicura.com/k8s/guide/ingress.html#ingress-%E1%84%86%E1%85%A1%E1%86%AB%E1%84%83%E1%85%B3%E1%86%AF%E1%84%80%E1%85%B5

서비스(Service)

위 이미지에서 보는 것처럼, 서비스는 같은 역할과 서비스를 하는 여러 POD를 하나로 묶어서 관리하는 오브젝트라고 볼 수 있다. 파드가 새로 생성될 때마다 동적으로 IP를 할당할 수 있다. 간단히 말해서 서비스는 트래픽을 파드로 전달만하는 역할을 한다. 

여기서 서비스는 여러 종류를 가진다.

ClusterIP, NodePort

1) ClusterIP

내부에서만 접근할 수 있는 IP를 할당한다. 그래서 외부에서 접속이 불가능하다. 그러나 kubeproxy를 활용하면 접근할 수 있다

2) NodePort

클러스터의 모든 노드로 외부에서 접근할 수 있는 포트를 개방한다. NodePort가 설정되면 {클러스터 임의 노드 IP} : {지정 포트번호} 

클러스터 내의 모든 노드들이 공인 IP를 갖게되면 외부에서도 접근할 수 있다.

3) LoadBalancer

로드밸런서는 서비스에 외부 접근이 가능한 공인 IP를 할당한다. 이는 Cloud Provider들이 이 기능을 지원해야만 가능하다. 그래서 쿠버네티스와 클라우드 서비스와 연동한다.

그러나 이 로드밸런서는 서비스 1개당 로드밸런서 1개가 요구되기 때문에 각 서비스마다 IP 주소를 갖게 되어 비용이 많이 드는 단점이 있다.

그래서 나온 것이 상위 개념인 Ingress다.

인그레스(Ingress)

인그레스는 하나의 IP로 여러 서비스를 노출할 수 없는 로드밸런서 서비스의 한계를 해결한다. 서비스들을 묶는 서비스의 상위 객체라고 볼 수 있다.

L7영역에서 통신할 때 사용된다. 아래는 설정을 위한 YAML 파일의 코드 예시다. foo.mydomain.com과 mydomain.com의 path는 다르다.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  backend:
    serviceName: other
    servicePort: 8080
  rules:
  - host: foo.mydomain.com
    http:
      paths:
      - backend:
          serviceName: foo
          servicePort: 8080
  - host: mydomain.com
    http:
      paths:
      - path: /bar/*
        backend:
          serviceName: bar

Ingress는 IP가 아닌, URL 기반의 경로를 찾아준다. URL 경로 요청을 어떤 서비스로 연결하라는 '규칙'을 정의하게 된다.그럼 규칙에 맞게 경로는 찾는 행위는 '인그레스 컨트롤러(Ingress controller)'가 하게 된다.

이를 통해 하나의 IP 주소 안에 여러 서비스를 노출시킬 수 있다. 

그리고 모든 서비스들은 같은 L7 프로토콜에서 사용된다.


서비스는 같은 동작을 하는 파드를 묶어, IP를 할당하여 트래픽이 파드로 전달 하는 역할을 한다. 하지만 각 서비스마다 IP를 할당하는 비효율을 해결하기 위해서 인그레스를 통해 URL에 따라 서비스를 라우팅한다.

https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0

 

Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what?

Recently, someone asked me what the difference between NodePorts, LoadBalancers, and Ingress were. They are all different ways to get…

medium.com

 

반응형
0 Comments
댓글쓰기 폼