如何在OpenShift 4.x中列出和批准待处理的CSR
时间:2020-02-23 14:31:46 来源:igfitidea点击:
在OpenShift中将新节点添加到群集时,CSR在节点级别生成,并发送到API服务器进行签名。我们需要批准证书签名请求才能完成引导。本简短教程将演示如何列出挂起的CSR并在集群中进行批准。
登录到已经安装并配置了oc命令行工具的堡垒机器。通过检查可用节点来确认我们可以连接到集群。
$oc get nodes
如果收到错误消息:
error: You must be logged in to the server (Unauthorized)
然后检查是否引用了正确的kubeconfig文件。
在OpenShift 4.x中列出待处理的CSR
要列出所有最近批准和未决的证书签名请求,请运行以下命令:
$oc get csr NAME AGE REQUESTOR CONDITION csr-bw4xs 45m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-jqnrf 22m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-ksdzn 6m51s system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-sbkbh 4m21s system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
我们可以进一步过滤输出,以仅获得一个待批准:
$oc get csr | grep -i pending csr-sbkbh 5m4s system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
在OpenShift 4.x中批准待处理的CSR
要使用名称批准单个CSR:
$oc adm certificate approve <certname>
要使用单个命令批准所有待处理的CSR:
for i in `oc get csr --no-headers | grep -i pending | awk '{ print }'`; do oc adm certificate approve $i; done
使用jq命令:
可以使用help jq命令来完成对多个请求的相同批准。首先将其安装到计算机中。
--- CentOS/Fedora/RHEL -- $sudo yum -y install jq --- Ubuntu/Debian -- $sudo apt install jq
然后,我们可以运行以下命令来批准所有挂起的CSR。
oc get csr -ojson | jq -r '.items[] | select(.status == {} ) | .metadata.name' | xargs oc adm certificate approve
批准未决CSR的示例输出。
certificatesigningrequest.certificates.k8s.io/csr-sbkbh approved certificatesigningrequest.certificates.k8s.io/csr-8crtk approved
现在,确认所有辅助计算机都属于集群并且处于就绪状态:
$oc get nodes
如果我们希望每分钟都有自动批准,则可以执行以下简单的bash脚本。
#!/bin/bash # Get and approve pending openshift csr for i in `oc get csr | grep -i pending | awk '{ print }'`; do oc adm certificate approve $i; done
Cronjob可用于在后台检查请求并相应地批准它们。