From a3b2e53f4ec20c00f8b1d1ff930e6eeabf9e066a Mon Sep 17 00:00:00 2001 From: Jimmy Song Date: Thu, 11 Jan 2018 15:21:14 +0800 Subject: [PATCH] add admin certificate descriptions, thanks to Jie Zhang --- practice/create-tls-and-secret-key.md | 32 +++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/practice/create-tls-and-secret-key.md b/practice/create-tls-and-secret-key.md index ff8420cad..c2c5ee9c7 100644 --- a/practice/create-tls-and-secret-key.md +++ b/practice/create-tls-and-secret-key.md @@ -224,9 +224,37 @@ echo '{"CN":"kubernetes","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl + 后续 `kube-apiserver` 使用 `RBAC` 对客户端(如 `kubelet`、`kube-proxy`、`Pod`)请求进行授权; + `kube-apiserver` 预定义了一些 `RBAC` 使用的 `RoleBindings`,如 `cluster-admin` 将 Group `system:masters` 与 Role `cluster-admin` 绑定,该 Role 授予了调用`kube-apiserver` 的**所有 API**的权限; -+ OU 指定该证书的 Group 为 `system:masters`,`kubelet` 使用该证书访问 `kube-apiserver` 时 ,由于证书被 CA 签名,所以认证通过,同时由于证书用户组为经过预授权的 `system:masters`,所以被授予访问所有 API 的权限; ++ O 指定该证书的 Group 为 `system:masters`,`kubelet` 使用该证书访问 `kube-apiserver` 时 ,由于证书被 CA 签名,所以认证通过,同时由于证书用户组为经过预授权的 `system:masters`,所以被授予访问所有 API 的权限; -生成 admin 证书和私钥 +**注意**:这个admin 证书,是将来生成管理员用的kube config 配置文件用的,现在我们一般建议使用RBAC 来对kubernetes 进行角色权限控制, kubernetes 将证书中的CN 字段 作为User, O 字段作为 Group(具体参考[ Kubernetes中的用户与身份认证授权](../guide/authentication.md)中 X509 Client Certs 一段)。 + + 在搭建完 kubernetes 集群后,我们可以通过命令: `kubectl get clusterrolebinding cluster-admin -o yaml` ,查看到 `clusterrolebinding cluster-admin` 的 subjects 的 kind 是 Group,name 是 `system:masters`。 `roleRef` 对象是 `ClusterRole cluster-admin`。 意思是凡是 `system:masters Group` 的 user 或者 `serviceAccount` 都拥有 `cluster-admin` 的角色。 因此我们在使用 kubectl 命令时候,才拥有整个集群的管理权限。可以使用 `kubectl get clusterrolebinding cluster-admin -o yaml` 来查看。 + +```yaml +$ kubectl get clusterrolebinding cluster-admin -o yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + annotations: + rbac.authorization.kubernetes.io/autoupdate: "true" + creationTimestamp: 2017-04-11T11:20:42Z + labels: + kubernetes.io/bootstrapping: rbac-defaults + name: cluster-admin + resourceVersion: "52" + selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/cluster-admin + uid: e61b97b2-1ea8-11e7-8cd7-f4e9d49f8ed0 +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:masters +``` + +生成 admin 证书和私钥: ``` bash $ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin