代码之家  ›  专栏  ›  技术社区  ›  Kirill

未能列出*v1alpha1。顺序:orders.certmanager.k8s.io被禁止

  •  3
  • Kirill  · 技术社区  · 7 年前

    我在几个月前配置了自动化的SSL证书管理,如下所述: http://docs.cert-manager.io/en/latest/tutorials/acme/dns-validation.html 域名: <myhost>.com 和 dev.<myhost>.com . 所以我有两个名称空间: prod 对于 <MyHoo.g.com 和 dev 对于 开发<myhost>.com . 在每个名称空间中,我都有入口控制器 和 Certificate 用于将证书存储到机密的资源。 它工作得很好,而且 ClusterIssuer 自动更新证书。

    但几天前我尝试添加新域: test.<myhost>.com 在里面 test 具有完全相同的入口和证书配置的命名空间 如在 普罗德 或 开发 命名空间(不包括主机名和命名空间):

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
        nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
        kubernetes.io/tls-acme: 'true'
      name: app-ingress
      namespace: test
    spec:
      tls:
      - hosts:
        - test.<myhost>.com
        secretName: letsencrypt-tls
      rules:
        - host: test.<myhost>.com
          http:
            paths:
            - backend:
                serviceName: web
                servicePort: 80
              path: /
    ---
    apiVersion: certmanager.k8s.io/v1alpha1
    kind: Certificate
    metadata:
      name: cert-letsencrypt
      namespace: test
    spec:
      secretName: letsencrypt-tls
      issuerRef:
        name: letsencrypt-prod-dns
        kind: ClusterIssuer
      commonName: 'test.<myhost>.com'
      dnsNames:
      - test.<myhost>.com
      acme:
        config:
        - dns01:
            provider: dns
          domains:
          - test.<myhost>.com
    

    这个配置不起作用:证书在秘密中找不到,入口使用的是“应用入口假证书”。

    cert-manager POD显示了许多类似的错误:

    pkg/client/informers/externalversions/factory.go:72: Failed to list *v1alpha1.Challenge: challenges.certmanager.k8s.io is forbidden: User "system:serviceaccount:kube-system:cert-manager" cannot list challenges.certmanager.k8s.io at the cluster scope
    pkg/client/informers/externalversions/factory.go:72: Failed to list *v1alpha1.Order: orders.certmanager.k8s.io is forbidden: User "system:serviceaccount:kube-system:cert-manager" cannot list orders.certmanager.k8s.io at the cluster scope
    

    和 certificate 不是试图获取证书( kubectl describe -ntest cert-letsencrypt )以下内容:

    API Version:  certmanager.k8s.io/v1alpha1
    Kind:         Certificate
    Metadata: ...
    Spec:
      Acme:
        Config:
          Dns 01:
            Provider:  dns
          Domains:
            test.<myhost>.com
      Common Name:  test.<myhost>.com
      Dns Names:
        test.<myhost>.com
      Issuer Ref:
        Kind:       ClusterIssuer
        Name:       letsencrypt-prod-dns
      Secret Name:  letsencrypt-tls
    Events:         <none>
    

    它应该作为其他名称空间上的证书具有任何状态。

    我不明白为什么这个配置以前工作过,但现在不能工作。

    我不确定它是否相关,但几周前我用kops更新了kubernetes,当前版本是:

    Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.0", GitCommit:"0ed33881dc4355495f623c6f22e7dd0b7632b7c0", GitTreeState:"archive", BuildDate:"2018-10-12T16:56:06Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.6", GitCommit:"a21fdbd78dde8f5447f5f6c331f7eb6f80bd684e", GitTreeState:"clean", BuildDate:"2018-07-26T10:04:08Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Kirill    7 年前

    此问题的原因是Kubernetes从 1.9 到 1.10 . 要修复它,您需要将cert manager升级到 0.5.x 版本。

    可能无法从升级 0.4.x 到 0.5、X 使用 helm 因为虫子 https://github.com/jetstack/cert-manager/issues/1134 在这种情况下,您需要存储所有颁发者和证书配置,然后删除证书管理器。 0.4、X 安装 0.5倍 ,然后应用第一步中的所有颁发者和证书配置。