Giới thiệu về YARP (Yet Another Reverse Proxy)
YARP là một thư viện mã nguồn mở của Microsoft, được xây dựng trên .NET, dùng để tạo reverse proxy và load balancer linh hoạt, có thể tùy biến sâu bằng code.
Khác với các proxy truyền thống (như NGINX, HAProxy, Envoy), YARP được thiết kế để nhúng trực tiếp vào ứng dụng .NET, hoặc triển khai như một Ingress Controller trên Kubernetes.
1. Mục đích của YARP
- Tạo reverse proxy nhẹ mà vẫn mạnh mẽ.
- Tuỳ biến pipeline HTTP: thêm middleware, xác thực, logging, caching… như ứng dụng ASP.NET Core thông thường.
- Tích hợp dễ dàng với hệ sinh thái .NET (Serilog, gRPC, IdentityServer, v.v.).
- Làm Ingress Controller cho Kubernetes — Microsoft cung cấp sample chính thức để YARP nhận
IngressYAML rồi route traffic đến cácServicetrong cluster.
2. Kiến trúc tổng quan
Cấu trúc cơ bản của YARP gồm 3 phần:
YARP Reverse Proxy Architecture
Yet Another Reverse Proxy — API Gateway Pattern

YARP Features
- High-performance .NET reverse proxy
- Dynamic configuration reload
- Built-in health checks
- Session affinity support
Request Flow
- Client gửi request đến YARP proxy
- YARP xác thực và áp dụng policies
- YARP route request đến backend service
- Service xử lý và trả response qua YARP
Example Routes
/api/users/* → Service A (User API)
/api/orders/* → Service B (Order API)
/api/payments/* → Service C (Payment API)
Bên trong YARP có:
- Ingress Layer (HTTP Listener): nhận request từ client.
- Routing Layer: quyết định route dựa vào
routeshoặcIngress(nếu dùng K8S). - Transforms & Middleware: áp dụng quy tắc rewrite, header transform, auth…
- Cluster Management: quản lý các backend (targets) và load balancing.
3. Cách cấu hình cơ bản
YARP có thể cấu hình bằng:
- File
appsettings.json - Hoặc dynamic config (database, API…)
Ví dụ: cấu hình trong file appsettings.json:
{
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "apiCluster",
"Match": {
"Path": "/api/{**catch-all}"
}
}
},
"Clusters": {
"apiCluster": {
"Destinations": {
"api1": { "Address": "https://api1.internal.local/" },
"api2": { "Address": "https://api2.internal.local/" }
},
"LoadBalancingPolicy": "RoundRobin"
}
}
}
}
4. YARP làm Ingress Controller trên Kubernetes
YARP có thể trở thành Ingress Controller bằng cách dùng mẫu:
KubernetesIngress.Sample – Microsoft YARP GitHub
Nguyên lý:
- Một Pod chạy YARP, có Service
LoadBalancerhoặcNodePort. - YARP đọc tài nguyên
Ingresstrong cluster (watchAPI). - Khi có Ingress mới (
ingressClassName: yarp), YARP tự cập nhật route mapping nội bộ.
Mẫu IngressClass:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: yarp
spec:
controller: yarp.microsoft.com/ingress-controller
Ingress demo:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
spec:
ingressClassName: yarp
rules:
- host: api.diendo.pro.vn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
5. Ưu điểm của YARP
- Viết bằng .NET 6/7/8 – tận dụng pipeline của ASP.NET Core
- Tuỳ biến cực cao – bạn có thể xử lý request/response ngay trong code
- Tích hợp dễ – plugin logging, auth, telemetry…
- Có thể chạy standalone hoặc như Ingress Controller
- Hỗ trợ HTTP/2, WebSocket, gRPC, TLS termination, Load Balancing
6. Một vài hạn chế
- Cộng đồng nhỏ hơn so với NGINX, Envoy, Kong.
- Không phải là reverse proxy “cấu hình sẵn” – bạn cần tự build ứng dụng .NET.
- Chưa có đủ plugin ecosystem như Kong hay Traefik.