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

相关推荐
码--到成功2 小时前
Docker、Kubernetes安装系列 一
docker·容器·kubernetes
bruce1283 小时前
K8s Pod 异常重启排查
云原生·容器·kubernetes
MetaLite3 小时前
微服务认证选型-SpringSecurity-SaToken与自研方案
微服务·云原生·架构
FoldWinCard4 小时前
基于k8s高可用web集群
前端·容器·kubernetes
无敌糖果5 小时前
K8S network namespace错误分析
docker·容器·kubernetes
运维老郭6 小时前
Prometheus 监控 K8s 从入门到入坑:工作原理 + 部署实操 + 避坑指南
云原生·容器·kubernetes
AAA@峥6 小时前
从零搭建 Prometheus 完整监控告警体系|Linux 部署 + node_exporter+Grafana 可视化
云原生·grafana·prometheus
xhaxy7 小时前
docker,k8s安装,k8s集群搭建(OS7)
docker·容器·kubernetes
SelectDB技术团队8 小时前
Apache Doris 多云原生实践:SaaS、BYOC 与四大公有云覆盖
数据库·阿里云·云原生·华为云·腾讯云·亚马逊云·写入更新
名字还没想好☜17 小时前
Docker 容器安全加固实战:非 root、只读根文件系统、drop capabilities 与最小攻击面
运维·安全·docker·容器·kubernetes