Chapter 32: gRPC in Docker and Kubernetes

Dockerfile for gRPC Service

FROM ubuntu:22.04 AS builder
RUN apt-get update && apt-get install -y libgrpc++-dev protobuf-compiler-grpc cmake
COPY . /app
WORKDIR /app/build
RUN cmake .. && make -j$(nproc)

FROM ubuntu:22.04
COPY --from=builder /app/build/server /usr/local/bin/
EXPOSE 50051
CMD ["server"]

Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: my-grpc-service
        ports:
        - containerPort: 50051
          protocol: TCP
        livenessProbe:
          grpc:
            port: 50051
        readinessProbe:
          grpc:
            port: 50051

gRPC + Kubernetes Services

⚠️ Use Headless Service for Client-Side LB
apiVersion: v1
kind: Service
spec:
  clusterIP: None  # headless — returns all pod IPs
  ports:
  - port: 50051

Regular ClusterIP does L4 balancing (one connection = one pod forever). Headless + client-side round_robin gives per-RPC balancing.