内容简介:Kubernetes 集群的安全性的重要程度不用强调,当我们与集群交互时,不管是通过Kubernetes 集群的访问权限控制由 kube-apiserver 负责,kube-apiserver 的访问权限控制由身份验证(authentication)、授权(authorization)和准入控制(admission control)三步骤组成,这三步骤是按序进行的。
Kubernetes 集群的安全性的重要程度不用强调,当我们与集群交互时,不管是通过 kubernetes-dashborad 还是通过命令行工具 kubectl 都需要进行身份验证和鉴权。那么我们是怎么利用 k8s 本身提供的能力来做身份验证和鉴权的呢?
Kubernetes 集群的访问权限控制由 kube-apiserver 负责,kube-apiserver 的访问权限控制由身份验证(authentication)、授权(authorization)和准入控制(admission control)三步骤组成,这三步骤是按序进行的。
-
authentication
k8s 支持 tls client certificate、basic auth、token 等方式对客户端发起的请求进行身份校验。APIServer 启动时,可以指定一种 Authentication 方法,也可以指定多种方法。如果指定了多种方法,那么 APIServer 将会逐个使用这些方法对客户端请求进行验证,只要请求数据通过其中一种方法的验证,APIServer 就会认为 Authentication 成功。
-
authorization
APIServer 支持多种 authorization mode,包括 Node、RBAC、Webhook 等。APIServer 启动时,可以指定一种 authorization mode,也可以指定多种 authorization mode,如果是后者,只要 Request 通过了其中一种 mode 的授权,那么该环节的最终结果就是授权成功。authorization-mode 的默认配置是 ”Node,RBAC”。Node 授权器主要用于各个 node 上的 kubelet 访问 apiserver 时使用的,其他一般均由 RBAC 授权器来授权。
这里我们着重介绍一下 RBAC
RBAC(Role-Based Access Control),它使用 “rbac.authorization.k8s.io” 实现授权决策,允许管理员通过 Kubernetes API 动态配置策略。在 RBAC API 中,一个角色(Role)包含了一组权限规则。
Role有两种: Role 和 ClusterRole 。一个Role对象只能用于授予对某一单一命名空间(namespace)中资源的访问权限。ClusterRole对象可以授予与Role对象相同的权限,但由于它们属于集群范围对象。
RoleBinding: 角色绑定则是定义了将一个角色的各种权限授予一个或者一组用户。 角色绑定包含了一组相关主体(即 subject, 包括用户——User、用户组——Group、或者服务账户——Service Account)以及对被授予角色的引用。 在命名空间中可以通过 RoleBinding 对象进行用户授权,而集群范围的用户授权则可以通过 ClusterRoleBinding 对象完成。
在上面的基础上我们来创建具有特定权限的用户
我们创建一个用户 release 从名字可以看出他是干什么的,我们赋予这个用户可以在集群中发布服务的权限。
创建具有对应权限的用户
-
创建 cluster role
示例如下
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cluster-release rules: - apiGroups: ["", "extensions", "apps", "batch"] resources: ["*"] verbs: ["update", "get", "watch", "list", "create", "patch"]
-
绑定用户,创建 ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: cluster-release roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-release subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: release
创建 kubeconfig
kubeconfig其实就是集群的身份认证和鉴权的配置文件,它包含了集群信息,客户信息,上下文(context)等。并且根据不同的 context 可以实现多集群的访问。
这里我们用 tls client certificate 来作为身份验证的安全凭证,之前也说过也可以用 token 的方式。
1. 创建用户安全凭证(CA 证书)
-
给用户创建 private key(比如给用户release)
openssl genrsa -out release.key 2048
说明
在申请数字证书之前,您必须先生成证书私钥和证书请求文件(CSR,Cerificate Signing Request),CSR是您的公钥证书原始文件,包含了您的服务器信息和您的单位信息,需要提交给CA认证中心。在生成CSR文件时会同时生成私钥文件,请妥善保管和备份您的私钥。 生成CSR文件时,一般需要输入以下信息(中文需要UTF8编码): Organization Name(O):申请单位名称法定名称,可以是中文或英文 Organization Unit(OU):申请单位的所在部门,可以是中文或英文 Country Code(C):申请单位所属国家,只能是两个字母的国家码,如中国只能是:CN State or Province(S):申请单位所在省名或州名,可以是中文或英文 Locality(L):申请单位所在城市名,可以是中文或英文 Common Name(CN):申请SSL证书的具体网站域名
- 创建证书签名请求(csr) CN(这里是用户名) O(这里是组)要显示指明
openssl req -new -key release.key -out release.csr -subj "/CN=release/O=k8s"
-
给用户release签发证书
openssl x509 -req -in release.csr -CA /etc/kubernetes/ssl/ca.pem -CAkey /etc/kubernetes/ssl/ca-key.pem -CAcreateserial -out release.crt -days 365
至此我们应该生成了证书 release.crt 和 release.key。
2. 生成 kubeconfig 文件
- 先要指明 api-server 的地址
export KUBE_APISERVER=https://172.31.xx.xx:6443
- 设置k8s 集群信息
sudo kubectl config set-cluster cluster.local --certificate-authority=/etc/kubernetes/ssl/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=release.kubeconfig
- 设置用户安全凭证
sudo kubectl config set-credentials release --client-certificate=release.crt --client-key=release.key --embed-certs=true --kubeconfig=release.kubeconfig
- 设置 context 参数
sudo kubectl config set-context release-context --cluster=cluster.local --user=release --kubeconfig=release.kubeconfig
- 设置默认 context
sudo kubectl config use-context release-context --kubeconfig=release.kubeconfig
至此生成好了 kubeconfig 文件。
kubectl config view
可以查看生成好的内容。
使用 kubeconfig
我们可以用生成好的 kubeconfig 文件来赋予 kubectl 操作集群的能力
示例如下
FROM ubuntu:16.04 COPYkubectl /usr/local/bin/ RUNchmod +x /usr/local/bin/kubectl RUNmkdir /root/.kube COPYconfig /root/.kube/
下面这张图总结了我们的工作
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- MySQL 创建用户及权限的操作命令
- bg.work 权限管理实现完成,数据操作/界面显示控制更便捷
- Django框架–权限代码+左侧菜单和权限应用
- 同等权限下多任职之间数据权限的实例
- 在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)
- 在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Object-Oriented Design Heuristics
Arthur J. Riel / Addison-Wesley Professional / 1996-05-10 / USD 64.99
Product Description Here is the first object-oriented development book to provide specific experience-based guidelines to help developers make the right design decisions. This book offers the next ......一起来看看 《Object-Oriented Design Heuristics》 这本书的介绍吧!