其他分享
首页 > 其他分享> > 小滴课堂工业级PaaS云平台+SpringCloudAlibaba+JDK11综合项目实战

小滴课堂工业级PaaS云平台+SpringCloudAlibaba+JDK11综合项目实战

作者:互联网

爱共享 爱生活 加油 2021

百度网盘

提取码:qhhv 

 

简介

本文将介绍Kubernetes基于角色的访问控制(RBAC)API对象,以及两个常见的用例(创建具有受限访问权限的用户、POD内通过service account访问api)。在本文的最后,您应该具有足够的知识来在集群中使用RBAC策略。

从Kubernetes 1.6版本起,系统默认启用RBAC策略。 RBAC策略对于正确管理群集至关重要,因为它们使您可以根据用户及其在组织中的角色来指定允许的操作类型。包括:

the server does not allow access to the requested resource

本文将向您展示如何使用RBAC,以便您可以正确处理此类问题。

准备工作

为了充分的了解本文,建议您有一套完整的Kubernetes环境,并能按我们的步骤完成整个过程,环境要求如下:

minikube start --extra-config=apiserver.Authorization.Mode=RBAC

RBAC API 对象

Kubernetes的一项基本功能是其所有资源都是模型化的API对象,该对象允许进行CRUD(创建,读取,更新,删除)操作。 资源包括:

这些资源上可能的操作示例如下:

在更高级别上,资源与API Group(API组)相关联(例如,Pod属于核心API group,而Deployment属于apps API group)。 有关所有可用资源,操作和API组的更多信息,请查看官方Kubernetes API参考

为了在Kubernetes中管理RBAC,除了资源和操作外,我们还需要理解以下概念:

您可以在Kubernetes官方文档中找到每个API元素的示例。

示例1: 创建一个新的用户,从远程访问kubernetes集群

在此示例中,我们将为“开发组(development)”的"cjzhao"用户创建一个独享的命名空间(cjns),并从远程服务器访问集群,主要包括以下对象:

我们将添加必要的RBAC策略,以便用户cjzhao仅在cjns命名空间内即可完全管理deployment(即使用kubectl run命令)。 最后,我们将测试这些策略以确保它们按预期工作。

创建namespace

执行kubectl create命令创建命名空间(以admin用户身份):

kubectl create namespace cjns

创建用户凭证(User Credentials)

Kubernetes没有用于用户帐户的API。 这里我们使用OpenSSL证书(更多的认证方式请参见Kubernetes官方文档)来管理身份验证,具体步骤如下:

在kubernetes管控节点(或管理员机器)上执行下面操作

openssl genrsa -out cjzhao.key 2048
openssl req -new -key cjzhao.key -out cjzhao.csr -subj "/CN=cjzhao/O=development"
openssl x509 -req -in cjzhao.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out cjzhao.crt -days 500

在新的机器上执行下面操作

//配置集群
kubectl config set-cluster MyK8sCluster --server=https://your_server_ip:6443 --certificate-authority=./ca.crt
//配置用户信息
kubectl config set-credentials cjzhao --client-certificate=./cjzhao.crt --client-key=./cjzhao.key
//配置上文(将用户和集群绑定)
kubectl config set-context cjzhao-context --cluster=yourcluster --namespace=cjns --user=cjzhao

配置完成后执行如下命令:

kubectl config use-context cjzhao-context

kubectl get pods

您将看到会报下面的错:

Error from server (Forbidden): pods is forbidden: User "cjzhao" cannot list resource "pods" in API group "" in the namespace "cjns"

创建用户角色来管理Deployments

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: cjns
  name: deployment-manager
rules:
  - apiGroups: \["", "extensions", "apps"\]
    resources: \["deployments", "replicasets", "pods"\]
    verbs: \["get", "list", "watch", "create", "update", "patch", "delete"\] \# You can also use \["\*"\]

使用kubectl create命令在集群中创建Role:

kubectl create -f role-deployment-manager.yaml

将用户cjzhao和角色绑定

使用以下内容创建一个rolebinding-deployment-manager.yaml文件。 在此文件中,我们将角色绑定到cjns命名空间内的用户cjzhao:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: deployment-manager-binding
  namespace: cjns
subjects:
  - kind: User
    name: cjzhao
    apiGroup: ""
roleRef:
  kind: Role
  name: deployment-manager
  apiGroup: ""

通过运行kubectl create命令部署RoleBinding:

kubectl create -f rolebinding-deployment-manager.yaml

测试RBAC规则

在新的机器上执行下面的命令创建一个deployment:

kubectl create deployment --image nginx myng

执行下面的命令查看创建结果:

kubectl get pods

可以看到正在运行的pod。

为了验证cjzhao的权限是否是限定在cjns命名空间,我们执行下面的命令:

kubectl get pods -n default

结果如下:

Error from server (Forbidden): pods is forbidden: User "cjzhao" cannot list resource "pods" in API group "" in the namespace "default"

说明相关的用户权限配置成功。

标签:PaaS,Kubernetes,kubectl,用户,JDK11,RBAC,API,小滴,cjzhao
来源: https://www.cnblogs.com/yofank/p/15046922.html