如何在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可用于在后台检查请求并相应地批准它们。