Kubernetes API 访问控制使用多层安全策略来保护集群:
假设您正在为 CI/CD 系统设置访问控制,您需要创建一个服务账户并授予它访问特定命名空间的权限。
创建服务账户:
apiVersion: v1
kind: ServiceAccount
metadata:
name: cicd-account
namespace: dev
这将在 dev
命名空间中创建一个名为 cicd-account
的服务账户。
创建角色和角色绑定:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: dev
name: dev-deployer
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create", "get", "list", "watch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dev-deployer-binding
namespace: dev
subjects:
- kind: ServiceAccount
name: cicd-account
namespace: dev
roleRef:
kind: Role
name: dev-deployer
apiGroup: rbac.authorization.k8s.io
这里我们创建了一个名为 dev-deployer
的角色,它允许对 dev
命名空间中的 Pod 执行创建、获取、列表、观察和删除操作。然后,我们通过 RoleBinding
将这个角色绑定到我们之前创建的服务账户 cicd-account
。
假设您想为特定用户在特定命名空间中提供读取权限。
创建角色:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: mynamespace
name: namespace-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list", "watch"]
这个 namespace-reader
角色允许用户读取 mynamespace
命名空间中的 Pod 和 Pod 日志。
创建角色绑定:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: namespace-reader-binding
namespace: mynamespace
subjects:
- kind: User
name: username
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: namespace-reader
apiGroup: rbac.authorization.k8s.io
这个 RoleBinding
将 namespace-reader
角色绑定到用户 username
,从而允许该用户访问 mynamespace
命名空间中的 Pod 和 Pod 日志。
通过合理配置 Kubernetes API 访问控制,可以有效地保护集群资源,确保只有授权的用户和进程才能访问敏感数据和执行关键操作。这不仅有助于维护 Kubernetes 集群的安全性,还可以满足不同的业务需求和合规性要求。