首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kubernetes 10个守护集群安全技巧

Kubernetes 10个守护集群安全技巧

作者头像
用户11081884
发布2026-07-20 19:13:07
发布2026-07-20 19:13:07
200
举报

Kubernetes 已成为现代云原生应用的事实标准,但随着其广泛采用,安全问题也日益凸显。本文将介绍10个关键的安全技巧,帮助加固Kubernetes集群,防范潜在威胁。

1. 实施最小权限RBAC原则

场景:开发团队经常为了方便而为服务账户授予过多权限,导致安全风险。

案例:某电商平台因开发人员为默认命名空间的服务账户授予cluster-admin权限,导致攻击者通过被入侵的Pod获取了集群完全控制权。

代码语言:javascript
复制
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
 name: Open-all
rules:
- apiGroups: ["*"]
 resources: ["*"]
 verbs: ["*"]

----------------------

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: can-do-anything
subjects:
  - kind: ServiceAccount
 name: default
 namespace: default
roleRef:
 kind: ClusterRole
 name: cluster-admin
 apiGroup: rbac.authorization.k8s.io

解决方案:

代码语言:javascript
复制
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: read-only-configmaps
rules:
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["get", "list"]

--------------------------
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-only-configmaps
subjects:
- kind: ServiceAccount
  name: my-app
  namespace: prod
roleRef:
  kind: Role
  name: configmap-reader
  apiGroup: rbac.authorization.k8s.io

最佳实践:

  • 定期审计RBAC配置
  • 避免使用cluster-admin角色
  • 为每个应用创建特定角色
  • 禁用默认服务账户或限制其权限

2. 禁止容器以root身份运行

场景:生产集群默认以root身份运行容器,增加了安全风险。

案例:金融机构因容器以root运行,攻击者利用漏洞获取节点root权限并窃取敏感数据。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: secure-app
spec:
  securityContext:     ##未指定容器的安全上下文


-name: app
image: secure-app:v1
securityContext:       ##未指定容器的安全上下文

解决方案:

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: secure-app
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
  containers:
  - name: app
    image: secure-app:v1
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop: ["ALL"]

3. 保护Kubernetes Dashboard和API端点

场景:许多Dashboard直接暴露在互联网上,缺乏适当认证。

案例:攻击者通过公开的Dashboard获取管理员权限并删除生产环境。

代码语言:javascript
复制
将LoadBalancer或nodeport访问的暴露至互联网上。  

解决方案:

代码语言:javascript
复制
#1、使用端口转发安全访问
kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:443
#2、通过云服务商的安全组或防火墙规则限制 API 服务器的访问

4. 加密存储Kubernetes Secrets

场景:Secrets默认仅base64编码存储,容易被窃取。

案例:开发人员未意识到base64不是加密,导致生产凭证泄露。

代码语言:javascript
复制
apiVersion: apiserver.config.k8s.io/v1
kind: Secret
data:
    name:Secrets
    password:dDdewewe8dsdk   ##直接存放加密密码

解决方案:

代码语言:javascript
复制
# 创建加密配置
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
  - secrets
  providers:
  - aescbc:
      keys:
      - name: key1
        secret: <32-byte-key>

5. 实施容器镜像扫描

场景:许多集群运行着已知漏洞的容器镜像。

案例:零售商因使用含已知漏洞的旧镜像遭受攻击。

代码语言:javascript
复制
apiVersion: v1
kind: deployment
metadata:
 name: -deployment
spec:
 containers:
 - name: deployment-app
  image: deployment-app/deployment-image:latest  ##直接使用不可信源拉取镜像

解决方案:

代码语言:javascript
复制
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
  name: image-scan-policy
spec:
  failurePolicy: Fail
  matchConstraints:
    resourceRules:
    - apiGroups: [""]
      apiVersions: ["v1"]
      operations: ["CREATE"]
      resources: ["pods"]
  validations:
    - expression: "object.spec.containers.all(c, c.image.startsWith('trusted-registry/'))"
      message: "只允许使用受信任仓库的镜像"

6. 启用网络策略

场景:Pod间默认无限制通信,增加了横向移动风险。

案例:攻击者通过入侵一个Pod访问集群内其他服务。

解决方案:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-traffic
spec:
  podSelector:
    matchLabels:
      app: db
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 5432

7. 定期轮换凭证

场景:长期有效的凭证增加了泄露风险。

案例:外部或其他员工利用未撤销的凭证访问集群。

解决方案:

代码语言:javascript
复制
apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
  annotations:
    kubectl.kubernetes.io/rotate: "true"
type: Opaque
data:
  username: <base64>
  password: <base64>    ##第四步的方法需增加安全
providers:
  - aescbc:
      keys:
      - name: key1
        secret: <32-byte-key>

8. 使用Pod安全策略

场景:不安全的Pod配置增加了攻击面。

案例:攻击者利用特权容器逃逸到节点。

解决方案:

代码语言:javascript
复制
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restricted
spec:
  privileged: false
  allowPrivilegeEscalation: false
  requiredDropCapabilities:
    - ALL
  runAsUser:
    rule: MustRunAsNonRoot

9. 监控和审计集群活动

场景:缺乏监控难以及时发现异常行为。

案例:攻击者潜伏数月未被发现。

解决方案:

代码语言:javascript
复制
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
  resources:
  - group: ""
    resources: ["secrets"]
  - group: ""
    resources: ["configmaps"]

10. 定期更新Kubernetes版本

场景:旧版本包含已知安全漏洞。

案例:利用旧版本漏洞获取集群控制权。

解决方案:

代码语言:javascript
复制
# 检查当前版本
kubectl version --short
# 计划升级策略
kubectl get nodes -o wide

Kubernetes安全需要多层次防御策略。通过实施这10个技巧,可以显著降低集群安全风险。记住,安全不是一次性工作,而是需要持续关注和改进的过程。定期审计、监控和更新安全措施,确保集群始终处于最佳保护状态。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 实施最小权限RBAC原则
  • 2. 禁止容器以root身份运行
  • 3. 保护Kubernetes Dashboard和API端点
  • 4. 加密存储Kubernetes Secrets
  • 5. 实施容器镜像扫描
  • 6. 启用网络策略
  • 7. 定期轮换凭证
  • 8. 使用Pod安全策略
  • 9. 监控和审计集群活动
  • 10. 定期更新Kubernetes版本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档