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

Ngày 25: NetworkPolicy cho ứng dụng

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

Thiết kế NetworkPolicy theo allow-list: default deny, ingress/egress selectors, namespaceSelector/podSelector, DNS allowance và kiểm chứng traffic từ đúng source.

đọ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

Thiết kế NetworkPolicy theo allow-list: default deny, ingress/egress selectors, namespaceSelector/podSelector, DNS allowance và kiểm chứng traffic từ đúng source.

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

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

  • Thực hành giới hạn traffic vào/ra cho 1 ứng dụng cụ thể
  • Test policy bằng cách gọi thử từ Pod khác
Instructor walkthrough

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

Scenario xuyên suốt

Policy apply thành công nhưng app mất DNS hoặc backend bị mở rộng ngoài ý muốn vì selector semantics sai. Bài học xây traffic matrix, áp policy từng bước và test allow/deny bằng client Pod, đồng thời ghi CNI enforcement limitation.

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ế
  • NetworkPolicy là allow-list theo direction; khi Pod bị chọn bởi ingress/egress policy, traffic chỉ được phép theo union các rule phù hợp.
  • podSelector mặc định trong cùng namespace của policy; namespaceSelector chọn namespace theo labels; kết hợp selectors/ports cần đọc YAML và scope chính xác.
  • Egress default deny thường cần allow DNS tới kube-dns/CoreDNS và dependency ports; ingress app policy phải allow source đúng label/namespace/port.
  • NetworkPolicy chỉ có hiệu lực nếu CNI enforce; Kubernetes API accept không chứng minh dataplane block/allow. Test từ source Pod và ghi CNI assumption.

Policy theo traffic matrix

Ghi source → destination → direction → protocol/port → expected result. Default deny chỉ là containment; allow ingress cho app từ frontend/Ingress, allow egress tới dependency và DNS. podSelector/namespaceSelector có scope; namespace labels là một phần của security boundary.

Test dataplane, không chỉ API

Kubernetes chấp nhận policy không có nghĩa CNI enforce. Test từ debug Pod đúng namespace/labels bằng curl/nc/nslookup, kiểm tra Service/EndpointSlice/app trước rồi CNI status/logs. Nếu egress deny, DNS thường là dependency cần allow riêng.

Bài tập

Tạo frontend/backend/db, traffic matrix, default deny, allow rules, test allow/deny và mô phỏng selector/port/DNS lỗi. Restore policy/labels, cleanup lab và ghi CNI limitation.

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 networkpolicy -n ckad-day25 -o yaml
kubectl get pods -A --show-labels
kubectl get namespaces --show-labels
kubectl run net-debug -n ckad-day25 --rm -it --restart=Never --image=curlimages/curl -- sh
kubectl get pods -n kube-system -l k8s-app=kube-dns -o wide
kubectl get events -n ckad-day25 --sort-by=.lastTimestamp
Hands-on lab

Thực hành theo scenario

  1. Tạo namespace `ckad-day25` với frontend/backend/db labels, debug Pod và DNS; lập traffic matrix source→destination/port/protocol/direction/expected allow.
  2. Baseline test DNS, frontend→backend, backend→db và unauthorized Pod; áp default deny ingress/egress từng namespace rồi kiểm tra connection từ đúng source.
  3. Thêm allow policy theo podSelector + namespaceSelector + ports, DNS egress tới CoreDNS và verify allow/deny; đọc policy YAML/labels/namespace labels trước mỗi test.
  4. Cố ý sai namespace label, pod label, port hoặc direction; dùng curl/nc/nslookup, app logs/events và CNI status/logs để tách policy block khỏi Service/route/app failure.
  5. Restore policy/labels, cleanup Pods/Services/NetworkPolicies/namespace; không apply deny-all shared namespace hoặc mở `0.0.0.0/0` để chữa timeout.
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:

  • Traffic matrix/direction/selector scope đúng.
  • Default deny và explicit allow có test từ source.
  • DNS egress và namespace/pod labels được kiểm tra.
  • CNI enforcement limitation/diagnosis rõ.
  • Policy rollout/restore/cleanup không gây shared outage.
Transfer to exam / production

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

CKAD NetworkPolicy task: xác nhận namespace/pod labels và direction trước, nhớ DNS khi egress deny, test từ Pod đúng source. Apply thành công chỉ là policy object tồn tại, không chứng minh traffic behavior.

Checkpoint · 3 phút

Kiểm tra nhanh

Câu hỏi: Sau khi bật egress default deny, Pod không gọi được Service bằng tên nhưng gọi IP được. Kiểm tra ưu tiên nào?

Kết thúc bài

Checklist trước khi sang Ngày 2