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.