ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • K8S API 서버의 gRPC 지원?
    Kubernetes 2025. 3. 2. 10:10
    728x90

    Kubernetes API 서버 자체는 gRPC를 직접 지원하지 않지만, 일부 내부 및 확장 기능에서 gRPC 기반 통신을 활용하는 부분이 있음.


    1️⃣ Kubernetes API 서버는 RESTful API 기반

    • Kubernetes API 서버는 기본적으로 HTTP/HTTPS REST API 를 제공함.
    • 모든 공식 API 엔드포인트는 JSON 형식으로 데이터를 주고받음.
    • 예제:
       
      curl -X GET https://<API_SERVER>:6443/api/v1/pods
    • kubectl 역시 RESTful API를 사용해서 Kubernetes와 상호작용함.

    2️⃣ Kubernetes 내부에서 gRPC가 사용되는 곳

    비록 API 서버가 gRPC를 직접 노출하지는 않지만, Kubernetes 내부적으로 gRPC 기반 통신이 사용되는 몇 가지 요소가 있음.

    etcd (Kubernetes의 key-value 저장소)

    • Kubernetes의 상태 데이터를 저장하는 etcdgRPC를 통해 데이터를 주고받음.
    • API 서버는 etcd에 데이터를 저장하거나 불러올 때 gRPC를 사용.
    • 하지만 API 서버가 외부 클라이언트에게 직접 gRPC를 제공하는 것은 아님.

    gRPC 기반의 확장 기능 (CRD, API Aggregation, gRPC Gateway)

    1. Custom Resource Definition (CRD) + gRPC Webhooks
      • ValidatingWebhookConfiguration 또는 MutatingWebhookConfiguration을 사용하면 gRPC 웹훅을 활용 가능.
      • 웹훅 서버를 gRPC로 작성하고 API 서버와 연동 가능.
    2. API Aggregation Layer
      • Kubernetes API를 확장할 때, 기존 REST API 외에 gRPC 서버를 백엔드로 설정할 수도 있음.
      • 하지만 API Aggregation Layer 자체는 REST 인터페이스를 제공해야 함.
    3. gRPC Gateway 활용
      • gRPC-Gateway 같은 라이브러리를 사용하면 gRPC 기반 API를 Kubernetes API처럼 REST API 형태로 변환 가능.

    3️⃣ Kubernetes에서 gRPC 서비스를 직접 배포하는 경우

    Kubernetes 클러스터에서 gRPC 기반의 애플리케이션을 배포할 수도 있음.
    이 경우 Kubernetes는 서비스 디스커버리 및 로드 밸런싱을 제공하고, 내부적으로 gRPC 트래픽을 처리하는 방식이 일반적임.

    • 예제: gRPC 서비스를 Kubernetes에서 배포하는 경우
      yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: my-grpc-service
    spec:
      ports:
        - name: grpc
          port: 50051
          targetPort: 50051
          protocol: TCP
      selector:
        app: my-grpc-app

    4️⃣ 정리

    Kubernetes API 서버는 RESTful API를 제공하며 gRPC를 직접 노출하지 않음
    하지만 etcd 및 일부 확장 기능(Webhooks, API Aggregation 등)에서 gRPC를 사용함
    gRPC 애플리케이션을 Kubernetes에 배포할 수 있으며, 서비스 디스커버리를 활용할 수 있음

    728x90
Designed by Tistory.