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

标签 kubernetes hashicorp-vault cert-manager

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

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值对您来说是否合适?

先感谢您

最佳答案

CertificateConditionReady 表示已准备好使用证书。
定义为:

  • 目标 secret 存在
  • 目标 secret 包含尚未过期的证书
  • 目标 secret 包含对证书有效的私钥
  • 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后端的保险柜角色路径,而服务器是保险柜服务器基本URL。 path 必须使用Vault sign端点。
    请看一下:issuer-vault-setupcert-clusterissuer

    关于kubernetes - Kubernetes-证书经理-Hashicorp Vault-证书的就绪状态为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61362899/

    相关文章:

    Go 命令使用 kubectl 获取更新的输出

    docker - 在无根 docker 容器中运行 HashiCorp Vault

    kubernetes - Istio Gateway + Cert-Manager + letsencrypt 证书

    c# - Audit.NET动态获取数据库凭据

    ssl - 如何为 Envoy Proxy 自动加载新的 TLS 证书?

    kubernetes - 与 Istio 结合的证书管理标准入口

    docker - kubectl:与服务器的连接被拒绝

    c# - 创建时的 Kubernetes 节点状态

    kubernetes - Kubernetes:部署应用程序时出现错误

    go - 使用mapstructure处理接口(interface)数据