Posts Kubernetes 4
Post
Cancel

Kubernetes 4

Kubernetes 4


💿 포드의 문제점

image

  • 포드는 일시적으로 생성한 컨테이너 집합
    • 때문에 포드가 지속적으로 생겨났을 때 서비스를 하기에 적합하지 않음
  • IP 주소의 지속적인 변동, 로드밸런생을 관리해줄 또 다른 객체가 필요
  • 이 문제를 해결하기 위해서 서비스라는 리소스가 존재

서비스

  • 서비스의 세션 고정
    • 서비스가 다수의 포드로 구성하면 웹서비스의 세션이 유지되지 않음
    • 이를 위해 처음 들어왔던 클라이언트 IP를 그대로 유지해주는 방법이 필요
    • sessionAffinity: ClientIP라는 옵션을 주면 해결 완료
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - port: 80
      targetPort: 9376
  sessionAffinity: ClusterIP
  • 다중 포트 서비스
    • 여러 포트를 열어서(다양한 프로토콜) 서비스 제공 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376
    - name: https
      protocol: TCP
      port: 443
      targetPort: 9377

💿 Service 노출

  • NodePort: 노드 자체 포트를 사용하여 포드로 리다이렉션
  • LoadBalancer: 외부 게이트웨이를 사용하여 노드 포트로 리다이렉션
    • 자바로 구현 가능한 듯?
  • Ingress: 하나의 IP 주소를 통해 여러 서비스를 제공하는 특별한 메커니즘
    • Nginx

NodePort

노드의 포트를 노출하여 포드로 리다이렉션

image

  • kubectl을 통해 개발자가 api-server에 요청을 보내면 kubelet으로 요청이 전달되고 kubelet이 포드를 컨트롤 한다.
  • 그리고 사용자들이 포드로 제공된 서비스를 이용하기 위해서 노출된 주소 및 포트로 노드에 요청을 보내면 kube-porxy로 전달되어 이를 통해 포드를 사용함

다만 이 둘의 요청은 둘다 node로 들어가기 위해서 노출된 노드의 포트를 사용한다는 공통점이 있음

LoadBalancer

image

L4 장비(외부 게이트웨이)를 사용하여 노드 포트로 리다이렉션

  • 클러스터에 로드밸런싱을 해주는 개체 필요
  • 로드밸런스는 노드포트의 기능을 포함
  • 노출된 하나의 IP를 사용해서 개발자 및 사용자가 Pod에 접근 가능
  • 부하 분산도 가능함

Ingress

image

하나의 IP나 도메인으로 다수의 서비스를 제공

  • Host 부분을 해석하여 규칙에 따라서 Query Resource를 활용하여 서로다른 서비스 사용 가능
This post is licensed under CC BY 4.0 by the author.