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

相关推荐
小妖同学学AI6 小时前
云原生AI服务新范式:Jina Serve框架,让多模态大模型落地像搭积木一样简单
人工智能·云原生·jina
独隅7 小时前
it+云原生:GitOps实践指南-K8s配置版本管理
git·elasticsearch·云原生
AI攻城狮8 小时前
马斯克为何一定要干掉 OpenAI?这不只是恩怨,而是一场 AI 时代的产权之战
云原生
wapicn9917 小时前
微服务架构下的数据核验设计,API接入最佳实践
微服务·云原生·架构
AI攻城狮18 小时前
对AI泡沫的地狱式批判,你认可吗?
云原生
面汤放盐21 小时前
从单体架构到微服务架构:模式与最佳实践
微服务·云原生·架构
木雷坞1 天前
K8s GPU 推理服务 ImagePullBackOff 排查与预热
云原生·容器·kubernetes·gpu算力
吴爃1 天前
Spring Boot 项目在 K8S 中的打包、部署与运维发布实践
运维·spring boot·kubernetes
The Straggling Crow1 天前
Monitoring 2026-04-30
kubernetes