Lộ trình
Cloud Native Computing FoundationAssociateTuần 4: Tối ưu & vận hànhBài 24 / 30

Ngày 24: Troubleshooting Networking

Thời lượng: 45 phút
Mục tiêu: 2 nhiệm vụ chính
Tiến độ lộ trình
ckangày 24
hoàn thành24 / 30 bài
Bối cảnh bài học

Troubleshoot Service không route traffic bằng request-path debugging: selector, EndpointSlice, ports, readiness, DNS, kube-proxy và NetworkPolicy.

đọc hiểuthực hànhcheckpoint
Bài giảng hôm nay

Học hiểu, rồi mới thực hành

Troubleshoot Service không route traffic bằng request-path debugging: selector, EndpointSlice, ports, readiness, DNS, kube-proxy và NetworkPolicy.

Bắt đầu đọc bài giảng

Nhiệm vụ bài học hôm nay

  • Luyện debug Service không route đúng traffic
  • Kiểm tra Endpoint, kube-proxy khi networking lỗi
Instructor walkthrough

Bài giảng chi tiết: từ bài toán đến bằng chứng

Scenario xuyên suốt

Client gọi Service nhưng timeout hoặc trả connection refused dù Service object tồn tại. Nguyên nhân có thể là selector không match, Pod chưa Ready nên không vào EndpointSlice, targetPort sai, DNS/kube-proxy/CNI hoặc NetworkPolicy chặn. Bài học rèn cách tách từng hop.

01Đọc bài toán

Xác định actor, workload, constraint và trạng thái cuối cần đạt.

02Vẽ luồng / boundary

Chỉ ra request, dependency, identity và failure domain trước khi chọn công cụ.

03Chọn và thực hành

Thay đổi nhỏ nhất trong lab cô lập; command nào cũng phải nói rõ nó kiểm tra điều gì.

04Kiểm chứng / recovery

Đối chiếu trạng thái thực tế, tạo một failure variant và ghi cách hoàn tác.

Cách nối lý thuyết với thực tế
  • Service selector map label tới EndpointSlice; Service không có endpoint usable thì kube-proxy không có backend để route.
  • Port, targetPort và containerPort là ba khái niệm khác nhau; numeric port và named port cần match đúng container.
  • Readiness ảnh hưởng endpoint serving condition; Pod Running nhưng NotReady có thể bị loại khỏi traffic.
  • ClusterIP/DNS, kube-proxy dataplane, CNI route và NetworkPolicy là các lớp khác nhau; kiểm tra từ trong cluster bằng debug client.

Debug theo request path

Test từ debug Pod trong cluster và đi từng hop: client → DNS/ClusterIP → Service selector → EndpointSlice → Pod Ready → targetPort/containerPort. Nếu endpoint rỗng, kiểm tra label/readiness/selector; nếu endpoint có nhưng request fail, kiểm tra port, app logs, NetworkPolicy, kube-proxy/CNI và vị trí nguồn.

Failure matrix

  • Không có EndpointSlice: selector/namespace/labels hoặc Pod chưa Ready.
  • Endpoint có nhưng connection refused: targetPort/containerPort/app listen sai.
  • Timeout: policy, route/CNI, kube-proxy hoặc external firewall; phân biệt bằng test in-cluster.
  • DNS fail: service name/namespace/search domain/CoreDNS; test IP ClusterIP để tách DNS khỏi dataplane.

Bài tập

Tạo backend/Service/debug client, thực hiện năm failure drills, lưu output của từng hop và sửa từng nguyên nhân. Pass khi có response marker từ client, EndpointSlice đúng, policy có lý do và variant không làm hỏng mapping.

Terminal reference

Command list và cách dùng

Chạy từng lệnh theo đúng thứ tự. Trước các lệnh có thể tạo hoặc thay đổi tài nguyên, hãy kiểm tra profile, account và region.

Commands · read-only checkpoints
kubectl get svc,endpointslice -n cka-day24 -o wide
kubectl describe svc SERVICE_NAME -n cka-day24
kubectl get pods -n cka-day24 --show-labels -o wide
kubectl run net-debug -n cka-day24 --rm -it --restart=Never --image=curlimages/curl -- sh
kubectl get networkpolicy -n cka-day24 -o yaml
kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide
kubectl logs -n kube-system -l k8s-app=kube-proxy --tail=100
Hands-on lab

Thực hành theo scenario

  1. Tạo namespace `cka-day24` với backend Deployment/Pod, Service và debug client; ghi labels, containerPort, Service port/targetPort, readiness và expected response marker.
  2. Làm 5 failure drills: selector sai, targetPort sai, readiness fail, DNS/Service name sai và NetworkPolicy deny. Với mỗi drill, test từ client Pod, không chỉ curl từ laptop.
  3. Thu theo thứ tự: `get svc`, selector, `get endpointslice`, Pod labels/Ready, `describe`, events, DNS lookup, backend logs; kiểm tra kube-proxy/CNI logs chỉ sau khi object/request evidence không đủ.
  4. Sửa một hop mỗi lần và retest request path; tạo variant đổi label hoặc named port để chứng minh mapping. Nếu dùng NodePort, tách firewall/external path khỏi ClusterIP path.
  5. Cleanup namespace lab, policy và debug client; không mở `0.0.0.0/0`, không xóa kube-proxy hoặc đổi CNI trên cluster dùng chung.
Evidence checkpoint

Kiểm chứng kết quả

Không coi lệnh chạy thành công là đủ. Hãy đối chiếu output với trạng thái mong đợi:

  • Vẽ và kiểm tra đủ client → DNS/Service → EndpointSlice → Pod → container port.
  • Phân biệt selector, targetPort, readiness, DNS, kube-proxy/CNI và policy failure.
  • Mỗi drill có in-cluster request evidence và object state.
  • Sửa minimal, retest success và variant regression.
  • Cleanup policy/debug resources, không thay đổi shared networking.
Transfer to exam / production

Bẫy thường gặp và trade-off

Service tồn tại không có nghĩa traffic route. Kiểm tra selector và EndpointSlice trước; sau đó Pod Ready/targetPort. Chỉ debug kube-proxy/CNI khi object mapping đúng và test từ đúng network location.

Checkpoint · 3 phút

Kiểm tra nhanh

Câu hỏi: Service có ClusterIP và selector đúng nhưng EndpointSlice không có endpoint ready. Kiểm tra tiếp theo là gì?

Kết thúc bài

Checklist trước khi sang Ngày 2