Kubernetes-证书经理-Hashicorp Vault-证书的就绪状态为空

时间:2020-04-22 10:30:30

标签: kubernetes hashicorp-vault cert-manager

我已经创建了使用Vault的Clusterissuer,然后通过它发行了证书,但是证书的 Ready 状态为空白。事件和证书管理器pod日志中没有任何内容。它也没有创造一个秘密。

kubectl get cert
NAMESPACE             NAME                 READY                          SECRET                                             AGE
default               example-com                                         example-com                                      139m

clusterissuer.yaml

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: vault-clusterissuer
spec:
  vault:
    path: pki_int/sign/<role name>
    server: https://vault-cluster.example.com:8200
    caBundle: <base64 encoded cabundle pem>
    auth:
      appRole:
        path: approle
        roleId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 
        secretRef:
          name: cert-manager-vault-approle
          key: secretId

路径中提到的角色名称与在Vault中在pki_init下创建的角色相同。

certificate.yaml

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: example-com
spec:
  secretName: example-com 
  issuerRef:
    name: vault-clusterissuer
    kind: ClusterIssuer
  commonName: abc.example.com
  dnsNames:
  - abc.example.com

由于它不会生成任何消息或日志,所以我不确定从哪里开始进行故障排除。

clusterissuer.yaml中的 path 的值对您来说是否合适??

提前谢谢

1 个答案:

答案 0 :(得分:1)

CertificateConditionReady 表示已准备好使用证书。

这被定义为:

  • 目标机密存在

  • 目标机密包含尚未过期的证书

  • 目标机密包含对证书有效的私钥

  • commonNamednsNames属性与证书上指定的属性匹配

我认为问题出在dnsNames文件中定义的错误certificate.yaml中:

您的证书配置文件:

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: example-com
spec:
  secretName: example-com 
  issuerRef:
    name: vault-clusterissuer
    kind: ClusterIssuer
  commonName: abc.example.com
  dnsNames:
  - abc.example.com

dnsNames字段应具有值:www.abc.example.com而不是abc.example.com

最终版本应为:

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: example-com
spec:
  secretName: example-com 
  issuerRef:
    name: vault-clusterissuer
    kind: ClusterIssuer
  commonName: abc.example.com
  dnsNames:
  - www.abc.example.com

还请记住,path字段是PKI后端的保险柜角色路径,而 server 是保险柜服务器的基本URL。 path 必须使用保管库sign端点。

请看看:issuer-vault-setupcert-clusterissuer