Kubernetes 安全最佳实践

Kubernetes 安全最佳实践

一、前言

哥们,别整那些花里胡哨的。Kubernetes 安全不是小事,今天直接上硬货,教你如何加固你的 K8s 集群。

二、安全架构设计

1. 多层安全防护

层级 防护措施 实现方案
集群层 RBAC 授权 最小权限原则
网络层 网络策略 零信任网络
容器层 镜像扫描 漏洞检测
运行时 Pod 安全标准 限制特权容器
数据层 密钥管理 Vault 集成

三、实战配置

1. RBAC 权限管理

yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
  namespace: default
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: susu
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

2. 网络策略

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-app-traffic
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: nginx
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 80

3. Pod 安全标准

yaml 复制代码
apiVersion: policy/v1
kind: PodSecurityPolicy
metadata:
  name: restricted
  annotations:
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default,runtime/default'
    apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
    seccomp.security.alpha.kubernetes.io/defaultProfileName:  'runtime/default'
    apparmor.security.beta.kubernetes.io/defaultProfileName:  'runtime/default'
spec:
  privileged: false
  allowPrivilegeEscalation: false
  requiredDropCapabilities:
  - ALL
  volumes:
  - 'configMap'
  - 'emptyDir'
  - 'projected'
  - 'secret'
  - 'downwardAPI'
  hostNetwork: false
  hostIPC: false
  hostPID: false
  runAsUser:
    rule: 'MustRunAsNonRoot'
  seLinux:
    rule: 'RunAsAny'
  supplementalGroups:
    rule: 'MustRunAs'
    ranges:
    - min: 1
      max: 65535
  fsGroup:
    rule: 'MustRunAs'
    ranges:
    - min: 1
      max: 65535

4. 镜像安全

bash 复制代码
# 安装 trivy
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.49.1

# 扫描镜像
trivy image nginx:latest

# 集成到 CI/CD
cat > .gitlab-ci.yml << 'EOF'
image_scanning:
  stage: test
  script:
    - trivy image --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
  allow_failure: true
EOF

5. 密钥管理

yaml 复制代码
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
  name: app-secrets
  namespace: default
spec:
  type: kv-v2
  mount: kv
  path: secrets/app
  refreshAfter: 1h
  destination:
    name: app-secrets
    create: true
  rolloutRestartTargets:
  - kind: Deployment
    name: app

四、安全监控

1. Audit 日志

yaml 复制代码
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: RequestResponse
  resources:
  - group: ""
    resources: ["secrets", "configmaps"]
- level: Metadata
  resources:
  - group: ""
    resources: ["pods", "services"]

2. 运行时监控

使用 Falco 监控异常行为:

yaml 复制代码
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: falco
  namespace: falco
spec:
  selector:
    matchLabels:
      app: falco
  template:
    metadata:
      labels:
        app: falco
    spec:
      containers:
      - name: falco
        image: falcosecurity/falco:latest
        securityContext:
          privileged: true
        volumeMounts:
        - name: falco-config
          mountPath: /etc/falco
      volumes:
      - name: falco-config
        configMap:
          name: falco-config

五、安全加固清单

  1. 集群配置

    • 启用 RBAC
    • 配置 NetworkPolicy
    • 启用 PodSecurityPolicy
    • 配置 Audit 日志
  2. 容器配置

    • 使用最小基础镜像
    • 启用镜像扫描
    • 限制容器权限
    • 配置资源限制
  3. 网络配置

    • 启用 CNI 插件的网络策略
    • 配置 Ingress 控制器
    • 启用 TLS 加密
    • 限制集群外访问
  4. 数据安全

    • 使用 Secrets 管理敏感信息
    • 集成外部密钥管理系统
    • 配置持久化存储加密

六、常见安全问题

1. 特权容器

解决方案 :避免使用 privileged: true,使用 securityContext 限制权限。

2. 镜像漏洞

解决方案:定期扫描镜像,使用官方或经过验证的镜像源。

3. 网络暴露

解决方案:配置网络策略,限制 Pod 间通信。

4. 密钥泄露

解决方案:使用 Secrets 管理,避免硬编码敏感信息。

七、总结

Kubernetes 安全是一个持续的过程,不是一蹴而就的。按照本文的最佳实践,你可以显著提高集群的安全性,炸了!

相关推荐
Jooolin4 小时前
从 DeepSeek、Qwen 到 GPT:一次企业级 AI 知识库项目的模型选型复盘
人工智能·云原生·ai编程
皮皮蟹虾饺8 小时前
DNS协议指南:从报文格式到安全加密与 K8s 实战
安全·容器·kubernetes
阿里云云原生9 小时前
AI Agent 如何“驾驭”云监控?实测自然语言驱动的全链路可观测运维
云原生
阿里云云原生13 小时前
拒绝月底“账单惊魂”:AI 网关如何通过“消费者配额”实现大模型调用成本治理?
云原生
lihongbao8013 小时前
kuboard v3创建用户分配命名空间
kubernetes·kuboard
java_cj17 小时前
从kubectl源码学pprof:生产环境性能分析的实战指南
运维·云原生·容器·kubernetes
吠品17 小时前
Docker 构建时网络超时拉不到镜像?一些排查和配置记录
云原生·eureka
爱吃龙利鱼18 小时前
K8s 监控实战:victoria-metrics-k8s-stack 高可用部署,资源占用直降 70%,比 Prometheus 省 5 倍磁盘
docker·kubernetes·prometheus
STDD18 小时前
Kubeflow ML 流水线 K8s 部署教程:机器学习工作流编排全攻略
机器学习·容器·kubernetes
牛奶咖啡1318 小时前
KVM虚拟化与企业应用实践——通过网络介质配合ks自动应答文件实现自动安装KVM虚拟机
云原生·qemu·kvm·系统网络引导与ks自动应答环境·远程资源+ks文件安装虚拟机·通过网络介质引导自动安装虚拟机·qemu的总线类型详解