Capturing Network Packets in Kubernetes
Bài tóm tắt Mercari 2025 3. Quy mô lớn Độ khó: Trung bình
Mercari · 2025 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- Mercari chạy vài trăm microservice; đội Network (thuộc Platform) thường được nhờ điều tra sự cố mạng. Theo họ, khi không còn manh mối thì bắt gói tin là cách cuối, nhưng quy trình phải định sẵn, không thì vô dụng đúng lúc sự cố gấp.
- Khó trên Kubernetes: developer không có quyền vào node (lý do bảo mật), pod cách ly multi-tenant; service mesh Istio mã hoá mTLS nên bắt ở card mạng chỉ thấy dữ liệu đã mã hoá. Và đội Platform muốn developer tự làm được mà không cần quyền đặc biệt của Platform.
Thay đổi chính
- Mức pod (cách chính), dùng Ephemeral Container (GA từ Kubernetes 1.25): gắn container debug tạm vào network namespace của pod đang chạy, không cần cài tcpdump vào image ứng dụng, không cần quyền node.
- Xin quyền tạm qua công cụ nội bộ Carrier (mô hình Zero Touch Production: bình thường không ai có quyền thao tác production); Role đã định sẵn quyền với
pods/ephemeralcontainers. kubectl debugvới imagenetshoot, chạy root (filesecurityContextriêng).tcpdump -i any: với Istio, lưu lượng đi qua cả interface ảo do iptables chuyển hướng; chỉ bắteth0thì chỉ thấy bản mã hoá. Lọc bớt bằng tham số để dễ phân tích, nhưng lọc quá thì có thể thiếu dữ liệu.kubectl cplấy file về; quen rồi thì gộp bước 2–4 thành một lệnh có giới hạn thời gian.
- Xin quyền tạm qua công cụ nội bộ Carrier (mô hình Zero Touch Production: bình thường không ai có quyền thao tác production); Role đã định sẵn quyền với
- Mức node (dự phòng): SSH vào node GKE (quyền cao, xin qua Carrier), vào CoreOS Toolbox, bắt theo IP của pod. Dùng cho vấn đề toàn node (CNI, iptables), nhưng chỉ thấy lưu lượng đã mã hoá. Họ chưa phải dùng trong điều tra thật nhưng đã có sẵn quy trình.
Vì sao
- Công cụ chẩn đoán sâu phải nằm trong tầm của người sở hữu service (self-service) và cân bằng với mô hình quyền tối thiểu; Ephemeral Container cho đúng điểm giữa đó (Nền tảng nội bộ cho service (đường ray chung), Xử lý sự cố và on-call, Observability và monitoring).
Bài học cho SWE
- Viết và thử quy trình chẩn đoán trước khi cần nó.
- Với service mesh mã hoá, bắt gói ở phía pod (sau khi giải mã) mới thấy nội dung.
- Kết hợp quyền tạm thời (just-in-time) với Role định sẵn cho từng thao tác chẩn đoán.
Liên quan
- ASOS 2021 (lỗi mạng trên Kubernetes) · ClickHouse 2025 · Mercari 2022 · Mercari 2026
- Observability và monitoring · Xử lý sự cố và on-call · Nền tảng nội bộ cho service (đường ray chung)
#Packet capture#tcpdump#Ephemeral container#kubectl debug#netshoot#Istio mTLS#Zero Touch Production#Carrier#GKE toolbox#Self-service runbook
Được nhắc tới trong
Chủ đề (3)
Công ty (1)
Bài tóm tắt (2)