以编程方式颁发Kubernetes证书



我可以手动创建一个证书:

  1. 我创建了csr文件
  2. 我创建并应用CertificateSigningRequestk8s资源
  3. 我使用
  4. 批准请求
kubectl certificate approve <name>
  1. 我从CertificateSigningRequeststatus.certificate字段中提取证书

现在我想以编程方式重复这个过程。我使用@kubernetes/client-nodenpm包来实现这个目的。

我能够创建和应用CertificateSigningRequest资源:

const csrResource = await adminCertApi.createCertificateSigningRequest({
metadata: {
name: 'my.email@my.company.com',
},
spec: {
request: csrBase64,
signerName: 'kubernetes.io/kube-apiserver-client',
usages: [
'client auth'
],
},
});

但是我在试图批准请求时卡住了(试图遵循文档)。我尝试了如下几个变体:

csrResource.body.status.conditions = [
{
message: 'Approved by CWAdmin GraphQL Lambda function',
reason: 'ApprovedByCWAdmin',
type: 'Approved',
}
];
const response = await adminCertApi.patchCertificateSigningRequest('my.email@my.company.com', csrResource.body, undefined, undefined, undefined, undefined, { headers: { 'Content-Type': 'application/strategic-merge-patch+json' } });

不幸的是,这不会更新status.conditions字段。即使是这样,是什么触发了证书的签名?文档声明kube-controller-manager从不自动批准类型为kubernetes.io/kube-apiserver-client的请求。

换句话说,kubectl certificate approve的编程等效是什么?

我找到了这个帮助我解决问题的文档:

  • status必须为TrueFalseUnknown
  • Approved/Denied条件只能通过/approval子资源设置。

所以我将status字段添加到条件中,并将API调用更改为patchCertificateSigningRequestApproval

工作代码现在看起来像这样:

const body = {
status: {
conditions: [
{
message: 'Approved by CWAdmin GraphQL Lambda function',
reason: 'ApprovedByCWAdmin',
type: 'Approved',
status: 'True',
}
]
}
};
const response = await adminCertApi.patchCertificateSigningRequestApproval('my.email@my.company.com', body, undefined, undefined, undefined, undefined, { headers: { 'Content-Type': 'application/strategic-merge-patch+json' } });

相关内容

  • 没有找到相关文章

最新更新