tls-bootstrapping
weight: 86 title: TLS Bootstrap date: “2022-05-21T00:00:00+08:00” type: book
本文档介绍如何为
kube-apiserver 配置
您必须提供一个
该组将作为
Token 认证文件
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
产生的02b50b05283e98dd0fd71db496ef01e8
。
02b50b05283e98dd0fd71db496ef01e8,kubelet-bootstrap,10001,system:kubelet-bootstrap
注意:system:kubelet-bootstrap
的配置,当只有一个组时,不需要加引号。
在--token-auth-file=FILENAME
标志(可能在您的
查看 该文档 获取更多详细信息。
客户端证书CA 包
在--client-ca-file=FILENAME
标志启用客户端证书认证,指定包含签名证书的证书颁发机构包(例如 --client-ca-file=/var/lib/kubernetes/ca.pem
kube-controller-manager 配置
请求证书的
签名文件
您必须提供证书颁发机构,这样才能提供颁发证书所需的密码资料。
--client-ca-file=FILENAME
标志来认证和采信该
假定证书和密钥都是
--cluster-signing-cert-file="/etc/path/to/kubernetes/ca/ca.crt" --cluster-signing-key-file="/etc/path/to/kubernetes/ca/ca.key"
审批控制器
在csrapproving
控制器将作为 kube-controller-manager 的一部分,被默认启用。
控制器使用 SubjectAccessReview
API 来确定给定用户是否已被授权允许请求
控制器将
nodeclient
:用户的客户端认证请求O=system:nodes
,CN=system:node:(node name)
。selfnodeclient
:更新具有相同O
和CN
的客户端证书的节点。selfnodeserver
:更新服务证书的节点(ALPHA,需要feature gate ) 。
当前,确定selfnodeserver
请求的检查与selfnodeserver
的定义将来可能会改变,并且需要RotateKubeletServerCertificate
--feature-gates=RotateKubeletServerCertificate=true
以下ClusterRoles
nodeClient
、selfnodeclient
和 selfnodeserver
功能。在以后的版本中可能会自动创建类似的角色。
# A ClusterRole which instructs the CSR approver to approve a user requesting
# node client credentials.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: approve-node-client-csr
rules:
- apiGroups: ["certificates.k8s.io"]
resources: ["certificatesigningrequests/nodeclient"]
verbs: ["create"]
---
# A ClusterRole which instructs the CSR approver to approve a node renewing its
# own client credentials.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: approve-node-client-renewal-csr
rules:
- apiGroups: ["certificates.k8s.io"]
resources: ["certificatesigningrequests/selfnodeclient"]
verbs: ["create"]
---
# A ClusterRole which instructs the CSR approver to approve a node requesting a
# serving cert matching its client cert.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: approve-node-server-renewal-csr
rules:
- apiGroups: ["certificates.k8s.io"]
resources: ["certificatesigningrequests/selfnodeserver"]
verbs: ["create"]
这些权力可以授予给凭证,如
# REMOVED: This flag no longer works as of 1.7.
--insecure-experimental-approve-all-kubelet-csrs-for-group="kubelet-bootstrap-token"
管理员将创建一个 ClusterRoleBinding
来定位该组。
# Approve all CSRs for the group "kubelet-bootstrap-token"
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: auto-approve-csrs-for-group
subjects:
- kind: Group
name: kubelet-bootstrap-token
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: approve-node-client-csr
apiGroup: rbac.authorization.k8s.io
要让节点更新自己的凭据,管理员可以构造一个 ClusterRoleBinding
来定位该节点的凭据。
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: node1-client-cert-renewal
subjects:
- kind: User
name: system:node:node-1 # Let "node-1" renew its client certificate.
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: approve-node-client-renewal-csr
apiGroup: rbac.authorization.k8s.io
删除该绑定将会阻止节点更新客户端凭据,一旦其证书到期,实际上就会将其从集群中删除。
kubelet 配置
要向kubectl config set-cluster
,set-credentials
和 set-context
来构建此kubectl config set-credentials
提供 kubelet-bootstrap
的名称,并包含 --token = <token-value>
,如下所示:
kubectl config set-credentials kubelet-bootstrap --token=${BOOTSTRAP_TOKEN} --kubeconfig=bootstrap.kubeconfig
启动--kubeconfig
指定的文件不存在,则使用kubelet
的证书请求和回执时,将包含了生成的密钥和证书的-kubeconfig
指定的路径。证书和密钥文件将被放置在由 --cert-dir
指定的目录中。
启动
--experimental-bootstrap-kubeconfig="/path/to/bootstrap/kubeconfig"
此外,在
可以分别通过RotateKubeletClientCertificate
和 RotateKubeletServerCertificate
功能标志启用此功能,但在未来版本中可能会以向后兼容的方式发生变化。
--feature-gates=RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true
RotateKubeletClientCertificate
可以让RotateKubeletServerCertificate
可以让
kubectl 审批
签名控制器不会立即签署所有证书请求。相反,它会一直等待直到适当特权的用户被标记为 “已批准” 状态。这最终将是由外部审批控制器来处理的自动化过程,但是对于
管理员可以使用 kubectl get csr
命令列出所有的kubectl describe csr <name>
命令描述某个kubectl certificate approve <name>
和 kubectl certificate deny <name>
命令。