Kubernetes 是一个开源的容器编排平台,通过 Kubernetes,我们可以轻松地管理容器应用程序。在 Kubernetes 的世界里,RBAC(Role-Based Access Control)是一个非常重要的概念,它可以让我们更加细粒度地控制 Kubernetes 系统中的权限,从而保护我们的应用程序不受未经授权的访问。本文将介绍 Kubernetes 中 RBAC 的相关知识,并给出一些实践案例。
RBAC 的基本概念
Kubernetes 中 RBAC 主要包含以下几个概念:
- Role:角色是一组权限的集合,它定义了一组能够操作 Kubernetes 资源的用户。一个角色可以用来授权多个用户,但是一个用户只能被授权一个角色。角色只能在命名空间内使用,这意味着你可以在每个命名空间内定义不同的角色。
- ClusterRole:集群角色是一组权限的集合,它定义了一组能够操作整个 Kubernetes 集群的用户。一个集群角色只能被授权给一个用户。与角色不同的是,集群角色不仅可以在命名空间内使用,还可以在整个集群内使用。
- RoleBinding:角色绑定将一个角色和一个用户或者一个组(在后面的示例中,我们将使用用户)相关联。这意味着,一个用户会获得与这个角色关联的所有权限。
- ClusterRoleBinding:集群角色绑定将一个集群角色和一个用户或者一个组相关联。这意味着,一个用户会获得与这个集群角色关联的所有权限。
RBAC 的实践
下面,我们将通过一个实践案例来演示 RBAC 的使用流程。
示例情景
在本次案例中,我们有一个名为 my-nginx 的命名空间,其中有一个名为 my-nginx-deployment 的 Deployment,它包含了一个 Nginx 容器。现在,我们想控制只有某个用户才有权访问这个 Deployment。
示例步骤
步骤一:创建命名空间
首先,我们需要创建一个名为 my-nginx 的命名空间,代码如下:
apiVersion: v1 kind: Namespace metadata: name: my-nginx
我们将上面的代码保存为 nginx-namespace.yaml,并执行以下命令:
kubectl apply -f nginx-namespace.yaml
步骤二:创建 Deployment
接下来,我们需要创建一个名为 my-nginx-deployment 的 Deployment,它包含了一个 Nginx 容器。代码如下:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ------------------- ---------- -------- ----- --------- - --------- ------------ ---- -------- --------- --------- ------- ---- -------- ----- ----------- - ----- ----- ------ ------------ ------ - -------------- --
我们将上面的代码保存为 nginx-deployment.yaml,并执行以下命令:
kubectl apply -f nginx-deployment.yaml
步骤三:创建 Role 和 RoleBinding
现在,我们需要为这个 Deployment 创建一个 Role 和一个 RoleBinding,以便控制访问权限。代码如下:
Role:
-- -------------------- ---- ------- ----------- ---------------------------- ----- ---- --------- ----- ------------- ---------- -------- ------ - ---------- ---- ---------- -------- ------ ------- -------- -------
RoleBinding:
-- -------------------- ---- ------- ----------- ---------------------------- ----- ----------- --------- ----- --------------------- ---------- -------- --------- - ----- ---- ----- ----- -------- ----- ---- ----- ------------- --------- -------------------------
我们将上面的代码保存为 nginx-rbac.yaml,并执行以下命令:
kubectl apply -f nginx-rbac.yaml
这里,我们创建了一个名为 my-nginx-role 的 Role,它可以访问 my-nginx 命名空间中的所有 Pods,只允许执行 get、watch 和 list 操作;同时,我们创建了一个名为 my-nginx-role-binding 的 RoleBinding,它将这个 Role 和一个名为 alice 的用户相关联。
步骤四:测试访问权限
现在,我们来测试一下访问权限是否生效。我们可以执行以下命令,以切换到 alice 这个用户:
kubectl config use-context alice-context
这里,我们需要先为 alice 创建一个上下文,代码如下:
kubectl config set-credentials alice --username=alice --password=123456 kubectl config set-context alice-context --cluster=kubernetes --namespace=my-nginx --user=alice
接着,我们可以执行以下命令,以查看 Pod 信息:
kubectl get pods
如果一切正常,我们应该只能看到 my-nginx 命名空间下的 Pod。
总结
通过 RBAC,我们可以轻松地控制 Kubernetes 资源的访问权限。在实际使用中,我们应该根据实际需要创建不同的 Role 和 RoleBinding,以便更好地保护我们的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6482a2a148841e9894204b23