Giao diện
⚔️ Challenge: The Silent Backend
Chào mừng trở lại phòng chiến sự. Tôi là Lead SRE. Hệ thống Monitoring vừa báo động: Frontend không thể kết nối tới Backend. Khách hàng đang phàn nàn vì lỗi "Connection Refused".
Nhiệm vụ của bạn: Hãy cứu Production.
🚨 The Scenario
DevOps team vừa deploy phiên bản mới.
- Frontend Pod đang chạy ngon lành.
- Backend Pod cũng đang
Running. - Nhưng khi Frontend gọi tới Backend Service, nó nhận được lỗi
502 Bad Gatewayhoặc timeout.
Dưới đây là cấu hình YAML hiện tại. Hãy tìm ra nguyên nhân.
💀 The Broken YAMLs
1. Backend Pod
yaml
apiVersion: v1
kind: Pod
metadata:
name: backend-app
labels:
app: api-server # 👈 Label của Pod
spec:
containers:
- name: heavy-app
image: my-app:v2
ports:
- containerPort: 8080 # 👈 Ứng dụng lắng nghe ở port 80802. Backend Service
yaml
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
type: ClusterIP
selector:
app: backend-api # 👈 Service tìm kiếm label này
ports:
- port: 80 # 👈 Port của Service (người khác gọi vào)
targetPort: 80 # 👈 Port mà Service gửi traffic tới Pod🕵️♂️ Investigation (Điều tra)
Bạn cần thực hiện các bước sau (giả lập trong đầu hoặc trên giấy):
- Điều gì xảy ra khi bạn chạy lệnh:bash
kubectl get endpoints backend-service - Sau khi sửa lỗi 1, traffic có đi được vào Pod không? Tại sao?
💡 Solution (Đáp án)
Bấm để xem phân tích của Lead SRE
🔍 Bug 1: Label Mismatch (Lỗi Selector)
Triệu chứng: Service không tìm thấy Pod nào cả.
- Lệnh
kubectl get endpoints backend-servicesẽ trả vềENDPOINTS: <none>. - Nguyên nhân:
- Pod có label:
app: api-server - Service tìm label:
app: backend-api - Hai cái tên khác nhau hoàn toàn. Service giống như một người đưa thư cầm địa chỉ sai, không biết đưa thư cho ai.
- Pod có label:
👉 Fix: Sửa Selector của Service thành app: api-server.
🔍 Bug 2: Port Mismatch (Lỗi Cổng)
Triệu chứng: Có Endpoints, nhưng vẫn "Connection Refused".
- Nguyên nhân:
- Container mở cửa số 8080.
- Nhưng Service lại cố gắng tống traffic vào cửa số 80 của Container (
targetPort: 80). - Gói tin đập vào tường và bị từ chối.
👉 Fix: Sửa targetPort của Service thành 8080.
✅ Correct Service YAML
yaml
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector:
app: api-server # Match với Pod Label
ports:
- port: 80 # App khác gọi vào port 80 (đẹp)
targetPort: 8080 # Chuyển tiếp vào port 8080 (thực tế)👉 Next: Storage & Persistence (Module 5)