跳转到内容

Kubernetes安全

来自代码酷

Kubernetes安全[编辑 | 编辑源代码]

介绍[编辑 | 编辑源代码]

Kubernetes安全是保障集群资源、工作负载和用户访问权限的关键领域。它涵盖身份认证(Authentication)、授权(Authorization)、网络策略(Network Policies)、机密管理(Secrets Management)和运行时安全(Runtime Security)等核心机制。通过合理配置这些组件,可以防止未授权访问、数据泄露和恶意攻击。

核心安全机制[编辑 | 编辑源代码]

1. 身份认证(Authentication)[编辑 | 编辑源代码]

Kubernetes支持多种认证方式:

  • **客户端证书**:基于X.509证书的认证。
  • **Bearer Tokens**:用于ServiceAccount或OIDC集成。
  • **Webhook**:委托外部服务验证身份。

示例:查看当前用户凭据

  
kubectl config view --minify --raw

2. 授权(Authorization)[编辑 | 编辑源代码]

通过RBAC(基于角色的访问控制)定义权限:

  • **Role**:命名空间内的权限集合。
  • **ClusterRole**:集群范围的权限。
  • **RoleBinding/ClusterRoleBinding**:将角色绑定到用户或组。

示例:创建只读角色

  
apiVersion: rbac.authorization.k8s.io/v1  
kind: Role  
metadata:  
  namespace: default  
  name: pod-reader  
rules:  
- apiGroups: [""]  
  resources: ["pods"]  
  verbs: ["get", "watch", "list"]

3. 网络策略(Network Policies)[编辑 | 编辑源代码]

限制Pod间通信的规则,需CNI插件支持(如Calico)。

示例:禁止所有入站流量

  
apiVersion: networking.k8s.io/v1  
kind: NetworkPolicy  
metadata:  
  name: deny-all-ingress  
spec:  
  podSelector: {}  
  policyTypes: ["Ingress"]

4. 机密管理(Secrets)[编辑 | 编辑源代码]

敏感数据(如密码、API密钥)应通过Secrets存储,而非直接写入配置。

示例:创建Secret

  
echo -n 'admin' | base64  # 输出:YWRtaW4=  
echo -n 'password123' | base64  # 输出:cGFzc3dvcmQxMjM=
  
apiVersion: v1  
kind: Secret  
metadata:  
  name: db-secret  
type: Opaque  
data:  
  username: YWRtaW4=  
  password: cGFzc3dvcmQxMjM=

5. Pod安全策略(PSP)与替代方案[编辑 | 编辑源代码]

PSP(已弃用)可通过PodSecurity Admission替代,限制Pod权限:

  • **Restricted**:禁止特权模式。
  • **Baseline**:允许部分低风险权限。

实际案例[编辑 | 编辑源代码]

场景:多租户隔离[编辑 | 编辑源代码]

通过组合RBAC和NetworkPolicy实现: 1. 为每个租户创建独立命名空间。 2. 使用RBAC限制租户只能访问自身命名空间。 3. 配置NetworkPolicy阻止跨租户Pod通信。

graph LR TenantA[租户A] -->|RoleBinding| NamespaceA TenantB[租户B] -->|RoleBinding| NamespaceB NamespaceA -->|NetworkPolicy| Deny[拒绝其他命名空间] NamespaceB -->|NetworkPolicy| Deny

安全最佳实践[编辑 | 编辑源代码]

  • 启用审计日志(Audit Logging)监控关键操作。
  • 定期轮换证书和密钥。
  • 使用PodSecurityContext限制容器权限:
  
  securityContext:  
    runAsNonRoot: true  
    allowPrivilegeEscalation: false

数学表达[编辑 | 编辑源代码]

在加密场景中,密钥强度常通过熵衡量: H=i=1nP(xi)log2P(xi) 其中H为熵值,P(xi)为符号出现概率。

总结[编辑 | 编辑源代码]

Kubernetes安全需要多层次防御,从认证授权到运行时隔离。通过合理配置RBAC、NetworkPolicy和Secrets,结合持续监控,可显著降低集群风险。初学者应从最小权限原则出发,逐步实践高级策略如mTLS和OPA(Open Policy Agent)。