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

相关推荐
openFuyao38 分钟前
以开源之力,突破多样化算力困局——openFuyao开源一周年背后的故事
人工智能·云原生·开源·openfuyao·多样化算力·集群软件
JiaWen技术圈1 小时前
IaC 双引擎:Terraform + Ansible 完整最佳实践
云原生·ansible·terraform
牛奶咖啡136 小时前
k8s容器编排技术实践——OpenEuler安装部署k8s
kubernetes·信创·containerd配置加速器·openeuler安装k8s·k8s的常见安装方式·彻底关闭swap·工作节点使用kubectl
老码观察6 小时前
K8s 容器化部署的宿主机资源规划的踩坑实录
docker·容器·kubernetes
步步为营DotNet6 小时前
深入.NET 11:.NET Aspire 在云原生资源编排与管理的卓越实践
云原生·.net
密瓜智能6 小时前
HAMi 正式接入 Kubernetes DRA:下一代 GPU 资源模型实践指南
云原生·容器·kubernetes
Elastic 中国社区官方博客7 小时前
用于调试 LLM 延迟、成本和 GPU 饱和度的 ES|QL 查询
大数据·人工智能·elasticsearch·搜索引擎·ai·云原生·serverless
李李李li7 小时前
debian13.3安装k8s
云原生·容器·kubernetes
姚不倒7 小时前
Go语言实战:构建一个安全的计算器服务(接口、错误处理与Panic恢复)
云原生·golang
AI云原生7 小时前
远程控制软件进入协作阶段:ToDesk、向日葵、AnyDesk、RustDesk怎么选?
运维·服务器·网络·windows·docker·云原生·开源软件