Trong hệ sinh thái Kubernetes, việc kiểm soát luồng giao tiếp giữa các pod là yêu cầu bắt buộc để đảm bảo an ninh cho ứng dụng. Network Policies là giải pháp native cho phép bạn làm điều đó. Nếu bạn đang tìm hiểu cách thiết lập network policies một cách bài bản, bài viết này sẽ hướng dẫn bạn từ khái niệm nền tảng đến ví dụ thực chiến, giúp bạn triển khai thành công trên cụm cluster của mình. Chúng ta sẽ đi qua từng thành phần, quy tắc viết YAML, cách áp dụng và những lỗi thường gặp cần tránh.
Network Policies là gì?

Network Policies là một tài nguyên Kubernetes (API object) định nghĩa cách nhóm pod được phép giao tiếp với nhau và với các điểm cuối mạng bên ngoài. Nó hoạt động ở lớp mạng (Layer 3/4) dựa trên IP và cổng, cho phép bạn xây dựng hàng rào bảo vệ microservice. Không có Network Policies, mọi pod trong cluster đều có thể kết nối với nhau – điều này tiềm ẩn rủi ro lớn nếu một pod bị tấn công.
Mặc định, Kubernetes không áp dụng bất kỳ chính sách nào. Bạn phải chủ động tạo Network Policies để ngăn chặn truy cập không mong muốn. Các plugin mạng (CNI) như Calico, Cilium, Weave Net hoặc các giải pháp cloud-native (AWS VPC CNI, Azure CNI) đều hỗ trợ tính năng này. Trước khi bắt đầu cách thiết lập network policies, hãy đảm bảo cluster của
PodSelector là trường bắt buộc trong spec. Nếu để trống (không có matchLabels), policy sẽ áp dụng cho tất cả pod trong namespace. Đây là cách nhanh nhất để tạo default deny all – một chiến lược phổ biến khi muốn “khóa” namespace và chỉ mở cho phép qua các policy khác. Cách thiết lập network policies kiểu deny all là nền tảng của Zero Trust Networking.
PolicyTypes và hành vi mặc định
Trường policyTypes cho biết policy này kiểm soát Ingress, Egress hay cả hai. Nếu không khai báo, Kubernetes sẽ tự suy luận dựa trên sự hiện diện của ingress/egress rules. Tuy nhiên, khai báo tường minh giúp tránh nhầm lẫn. Khi một policy có type Ingress và không có rule nào, nó sẽ chặn tất cả Ingress (deny all). Điều này rất quan trọng trong thiết kế bảo mật.
Các loại quy tắc trong Network Policy

Có ba loại selector chính để định nghĩa nguồn/đích: podSelector, namespaceSelector và ipBlock.
Tạo policy default deny egress với podSelector: {} và policyTypes: [Egress]. Sau đó, chỉ tạo egress policy cho những pod cần kết nối ra ngoài với ipBlock hoặc podSelector cụ thể.
Network Policy có thể áp dụng cho namespace không phải default?
Có, bạn chỉ cần khai báo namespace trong metadata. Policy chỉ có hiệu lực trong namespace đó.
Tôi có thể dùng namespaceSelector kết hợp với podSelector trong cùng rule không?
Được. Nếu bạn đặt chúng trong cùng một phần tử của mảng from/to, chúng là AND (pod phải thuộc namespace đó VÀ có label đó). Nếu đặt riêng rẽ, chúng là OR.
Có cách nào để kiểm tra policy trước khi apply không?
Sử dụng công cụ kubectl dry-run hoặc các plugin như kube-score. Ngoài ra, bạn có thể deploy một pod tạm và dùng kubectl exec để kiểm tra kết nối thực tế.
Kết luận

Việc nắm vững cách thiết lập network policies là kỹ năng không thể thiếu đối với bất kỳ ai quản lý Kubernetes cluster. Chỉ với vài dòng YAML, bạn có thể tạo ra một mạng lưới bảo mật chặt chẽ, ngăn chặn leo thang tấn công khi một pod bị xâm nhập. Hãy bắt đầu bằng nguyên tắc deny all, sau đó mở dần từng kết nối dựa trên label và cổng. Đừng quên kiểm tra thường xuyên và sử dụng các công cụ hỗ trợ để tránh sai sót. Thực hành ngay trên cluster của bạn để cảm nhận sự khác biệt về an ninh mà Network Policies mang lại.







