
Trong lĩnh vực IT doanh nghiệp truyền thống, bảo mật hoàn toàn dựa vào mô hình "lâu đài và hào nước": xây dựng một tường lửa vững chắc xung quanh mạng của bạn và giả định rằng mọi thứ hoạt động bên trong mạng con IP riêng đều đáng tin cậy và vô hại.
Trong các môi trường cloud-native hiện đại - đặc biệt là trong Kubernetes - mô hình chu vi này có những lỗ hổng nguy hiểm. Theo mặc định, Kubernetes vận hành một mạng phẳng, không phân đoạn. Một gói phần mềm bên thứ ba bị xâm nhập trong một pod phân tích có mức độ ưu tiên thấp có thể thăm dò và truy vấn API siêu dữ liệu của cụm, kết nối với bộ nhớ đệm Redis nội bộ hoặc gửi các yêu cầu HTTP trái phép trực tiếp đến các microservice thanh toán sản xuất.
Một Kiến trúc Zero-Trust thực sự hoạt động theo một nguyên tắc quản lý duy nhất: không bao giờ tin tưởng, luôn xác minh, liên tục xác thực. Mọi yêu cầu - cho dù bắt nguồn từ internet công cộng hay từ một pod lân cận trong cùng một namespace - đều phải được xác thực bằng mật mã, ủy quyền và mã hóa.
Hướng dẫn thiết lập kiến trúc Zero-Trust toàn diện trên cụm Kubernetes Zero-Trust trong Kubernetes thông qua phân đoạn mạng Lớp 4, nhận dạng mật mã Lớp 7 và xác thực bộ điều khiển nhập.
Generate Deployments, Services, ConfigMaps & Ingress
Convert multi-service Docker Compose v2/v3 YAML into production-grade Kubernetes manifests with custom replicas, health probes, resource limits, and PVC storage.
Khi bạn triển khai một cụm Kubernetes tiêu chuẩn (thông qua EKS, GKE hoặc kubeadm thuần túy), plugin CNI mặc định sẽ gán cho mỗi pod một địa chỉ IP riêng và cho phép giao tiếp pod-to-pod không hạn chế trên tất cả các namespace.
[Default Kubernetes: Unrestricted Lateral Movement]
Attacker ──► Compromised Frontend Pod
│
├────────► Database Pod (Direct TCP access!)
├────────► Internal Redis Pod (No password required!)
└────────► Cloud Metadata API (169.254.169.254 - IAM Stealing!)
Để loại bỏ lỗ hổng này, chúng ta phải thiết lập các biện pháp kiểm soát bảo mật trên ba mặt phẳng thực thi riêng biệt:
Quy tắc đầu tiên của Zero-Trust là giả định vi phạm. Nếu một pod bị xâm phạm, nó phải bị khóa vào một silo mạng bị cô lập.
Áp dụng chính sách này cho các namespace sản xuất của bạn. Nó loại bỏ tất cả các kết nối đến và đi trên tất cả các pod:
# default-deny-all.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: production
spec:
podSelector: {} # Selects all pods in the namespace
policyTypes:
- Ingress
- Egress
Với việc từ chối mặc định đang hoạt động, các pod thậm chí không thể phân giải tên DNS. Bạn phải cho phép rõ ràng lưu lượng CoreDNS trên cổng 53:
# allow-dns-egress.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns-egress
namespace: production
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
Bây giờ, hãy xác định rõ ràng những dịch vụ nào có thể giao tiếp. Ví dụ, chỉ cho phép các pod được gắn nhãn app: frontend kết nối với app: order-service trên cổng 8080:
# allow-frontend-to-order.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-order
namespace: production
spec:
podSelector:
matchLabels:
app: order-service
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
NetworkPolicies Lớp 4 hạn chế giao tiếp IP và cổng, nhưng chúng không thể xác minh ai đang gửi tải trọng hoặc mã hóa lưu lượng dây. Một kẻ tấn công vượt qua việc giả mạo IP vẫn có thể nghe trộm lưu lượng văn bản thuần không được mã hóa.
Chúng tôi giải quyết vấn đề này bằng cách sử dụng một service mesh (chẳng hạn như Istio, Linkerd hoặc Cilium Service Mesh) để cấp chứng chỉ X.509 SPIFFE (Secure Production Identity Framework for Everyone) mật mã cho mỗi pod.
Cấu hình Istio để từ chối tất cả lưu lượng văn bản thuần trong cụm:
# strict-peer-authentication.yaml
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: production
spec:
mtls:
mode: STRICT # Completely rejects unencrypted TCP connections
Với mode: STRICT, proxy sidecar tự động xử lý việc xoay vòng chứng chỉ, bắt tay TLS và mã hóa dây mà không yêu cầu bất kỳ thay đổi mã ứng dụng nào.
Thay vì tin tưởng địa chỉ IP, hãy thực thi kiểm soát truy cập bằng cách sử dụng danh tính ServiceAccount mật mã của dịch vụ gọi:
# authz-order-service.yaml
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: secure-order-api
namespace: production
spec:
selector:
matchLabels:
app: order-service
action: ALLOW
rules:
- from:
- source:
principals:
# Only the pod running with this specific ServiceAccount is authorized
- "cluster.local/ns/production/sa/frontend-service-account"
to:
- operation:
methods: ["POST"]
paths: ["/api/v1/orders"]
Ngay cả khi kẻ tấn công giành quyền kiểm soát một pod lân cận trên cùng một nút worker vật lý, mọi nỗ lực gửi yêu cầu POST /api/v1/orders sẽ bị chặn ngay lập tức ở cấp độ proxy vì chứng chỉ của chúng thiếu nguyên tắc SPIFFE được ủy quyền.
Zero-Trust yêu cầu xác minh tính toàn vẹn của khối lượng công việc trước khi các pod được lên lịch vào các nút. Bạn phải từ chối các container chạy dưới dạng root hoặc gắn các đường dẫn tệp máy chủ.
Triển khai Chính sách Kyverno này để thực thi các ngữ cảnh bảo mật container bất biến:
# require-non-root.yaml
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: enforce-zero-trust-pod-security
spec:
validationFailureAction: Enforce
rules:
- name: check-security-context
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Containers must run as non-root with read-only root filesystems."
pattern:
spec:
securityContext:
runAsNonRoot: true
containers:
- securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
| Vector thực thi | Thiết lập Kubernetes cũ | Cụm được tăng cường Zero-Trust |
|---|---|---|
| Lưu lượng dây Pod-to-Pod | HTTP văn bản thuần (Có thể đánh hơi) | 100% mTLS được mã hóa (X.509) |
| Ranh giới mạng | Mạng phẳng mở trên các namespace | Từ chối mặc định Ingress và Egress |
| Xác thực khối lượng công việc | Địa chỉ IP không được xác thực | Nhận dạng SPIFFE mật mã |
| Leo thang đặc quyền | Các container root được phép | runAsNonRoot, Hệ thống tệp root chỉ đọc |
| Truy cập API siêu dữ liệu | Truy cập 169.254.169.254 mở | Bị chặn qua Egress NetworkPolicy |
Các service mesh hiện đại và các triển khai mTLS dựa trên eBPF (như Cilium hoặc Istio với Ambient Mesh) chỉ thêm chưa đến 0,5 mili giây chi phí trên mỗi hop. Tăng tốc phần cứng CPU hiện đại (AES-NI) xử lý mã hóa TLS với mức sử dụng CPU không đáng kể.
Bạn tạo một Egress NetworkPolicy rõ ràng cho phép lưu lượng truy cập chỉ đến các khối CIDR bên ngoài hoặc các tên DNS cụ thể thông qua Egress Gateway. Tất cả các kết nối internet đi khác đều bị chặn theo mặc định.
Có. Các CNI dựa trên eBPF hiện đại như Cilium cung cấp các chính sách mạng mTLS và Lớp 7 minh bạch nguyên bản trong nhân Linux mà không yêu cầu các container sidecar, giảm đáng kể chi phí bộ nhớ và độ phức tạp hoạt động.
Một kỹ sư bảo mật đã triển khai NetworkPolicy `default-deny-all` trong namespace `production` của Kubernetes. Ngay sau khi áp dụng chính sách này, một số ứng dụng quan trọng trong namespace đó bắt đầu gặp lỗi kết nối. Nguyên nhân trực tiếp có khả năng nhất của những lỗi này là gì?
Làm sạch log AI CLI, tạo biểu thức cron, giải mã JWT và tính quyền chmod offline.

Hướng dẫn kiến trúc chuyên sâu so sánh Istio Ambient Mesh với kiến trúc sidecar: chi phí bộ nhớ, ztunnel và bảo mật zero-trust với các ví dụ thực tế đã được kiểm chứng trong môi trường production.
Đọc tiếp
Đạt được triển khai thực sự không gián đoạn (zero-downtime) trên Kubernetes. Cấu hình Pod Disruption Budgets, terminationGracePeriodSeconds, preStop hooks và cơ chế connection draining của ingress.
Đọc tiếp
GitOps sản xuất với Flux v2: Nguồn GitRepository, vòng lặp đối chiếu Kustomize/Helm, giải mã bí mật SOPS và cập nhật hình ảnh container tự động.
Đọc tiếp