Kubernetes 容器安全最佳实践

Kubernetes 容器安全最佳实践

一、前言

哥们,别整那些花里胡哨的。容器安全是 Kubernetes 环境中的重要环节,今天直接上硬货,教你如何加固容器安全。

二、容器安全威胁

威胁类型 风险等级 防护措施
镜像漏洞 镜像扫描
特权容器 限制权限
网络攻击 网络策略
数据泄露 密钥管理
运行时攻击 运行时监控

三、实战配置

1. 镜像安全

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

2. 容器权限限制

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
        runAsGroup: 1000
      containers:
      - name: app
        image: nginx:latest
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - ALL
          readOnlyRootFilesystem: true
        ports:
        - containerPort: 80
        volumeMounts:
        - name: tmp
          mountPath: /tmp
      volumes:
      - name: tmp
        emptyDir: {}

3. 网络安全

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: app-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: app
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 80
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: backend
    ports:
    - protocol: TCP
      port: 9000

4. 密钥管理

yaml 复制代码
apiVersion: v1
kind: Secret
metadata:
  name: app-secret
  namespace: default
type: Opaque
data:
  password: cGFzc3dvcmQ=
  api-key: YXBpLWtleQ==

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: app
        image: nginx:latest
        env:
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: app-secret
              key: password
        - name: API_KEY
          valueFrom:
            secretKeyRef:
              name: app-secret
              key: api-key

四、容器安全优化

1. 运行时监控

使用 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

2. 安全策略

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

3. 安全审计

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

五、常见问题

1. 镜像漏洞

解决方案

  1. 使用官方或经过验证的镜像
  2. 定期扫描镜像
  3. 及时更新镜像

2. 权限提升

解决方案

  1. 限制容器权限
  2. 禁止特权容器
  3. 使用非 root 用户运行

3. 网络攻击

解决方案

  1. 配置网络策略
  2. 启用 mTLS
  3. 限制网络访问

六、最佳实践总结

  1. 镜像安全:使用扫描工具检测漏洞
  2. 权限管理:限制容器权限,使用非 root 用户
  3. 网络安全:配置网络策略,隔离容器网络
  4. 密钥管理:使用 Secrets 管理敏感信息
  5. 运行时监控:使用 Falco 监控异常行为
  6. 安全审计:配置审计日志,追踪安全事件

七、总结

容器安全是 Kubernetes 环境中的重要环节。按照本文的最佳实践,你可以构建一个安全、可靠的容器环境,炸了!

相关推荐
牛奶咖啡133 小时前
k8s容器编排技术实践——OpenEuler安装部署k8s
kubernetes·信创·containerd配置加速器·openeuler安装k8s·k8s的常见安装方式·彻底关闭swap·工作节点使用kubectl
老码观察3 小时前
K8s 容器化部署的宿主机资源规划的踩坑实录
docker·容器·kubernetes
步步为营DotNet3 小时前
深入.NET 11:.NET Aspire 在云原生资源编排与管理的卓越实践
云原生·.net
密瓜智能4 小时前
HAMi 正式接入 Kubernetes DRA:下一代 GPU 资源模型实践指南
云原生·容器·kubernetes
Elastic 中国社区官方博客4 小时前
用于调试 LLM 延迟、成本和 GPU 饱和度的 ES|QL 查询
大数据·人工智能·elasticsearch·搜索引擎·ai·云原生·serverless
李李李li4 小时前
debian13.3安装k8s
云原生·容器·kubernetes
姚不倒4 小时前
Go语言实战:构建一个安全的计算器服务(接口、错误处理与Panic恢复)
云原生·golang
AI云原生4 小时前
远程控制软件进入协作阶段:ToDesk、向日葵、AnyDesk、RustDesk怎么选?
运维·服务器·网络·windows·docker·云原生·开源软件
牛奶咖啡1318 小时前
k8s容器编排技术实践——使用containerd作为容器运行时部署k8s集群
kubernetes·k8s的安装部署·开启系统的ipvs支持·安装containerd·containerd配置加速器·安装k8s的工具·安装calico网络插件
阿里云云原生19 小时前
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
云原生