当前位置: 首页 > 知识库问答 >
问题:

ArgoCD与nginx入口和证书管理器不工作

常炯
2023-03-14

我尝试在GKE集群(版本1.21.5-gke.1302)中使用ingress和cert-manager来公开ArgoCD,但是证书没有颁发。

重现步骤:

>

  • 安装证书管理器应用此 yaml

    在运行helm的情况下安装ngin x入口控制器:helm安装my-发布ngin x-稳定/ngin x-入口

    应用以下内容创建集群颁发者:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-cluster-issuer
    spec:
      acme:
        email: example@email.com
        server: https://acme-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: letsencrypt-cluster-issuer-key
        solvers:
        - http01:
           ingress:
             class: nginx
    
    • 使用本指南和文件应用入口:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: argocd-server-ingress
      namespace: argocd
      annotations:
        cert-manager.io/cluster-issuer: letsencrypt-prod
        kubernetes.io/ingress.class: nginx
        kubernetes.io/tls-acme: "true"
        nginx.ingress.kubernetes.io/ssl-passthrough: "true"
        # If you encounter a redirect loop or are getting a 307 response code 
        # then you need to force the nginx ingress to connect to the backend using HTTPS.
        #
        nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    spec:
      rules:
      - host: argocd.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service: 
                name: argocd-server
                port:
                  name: https
      tls:
      - hosts:
        - argocd.example.com
        secretName: argocd-secret # do not change, this is provided by Argo CD
    
      < li >将入口控制器的ip映射到您的主机名。

    预期行为:我期望证书被成功创建并可以访问应用程序。

    当前状态:

    证书描述给了我这个:

      Conditions:
        Last Transition Time:        2022-01-18T14:10:14Z
        Message:                     Existing issued Secret is not up to date for spec: [spec.dnsNames]
        Observed Generation:         3
        Reason:                      SecretMismatch
        Status:                      False
        Type:                        Ready
        Last Transition Time:        2022-01-18T14:10:14Z
        Message:                     Issuing certificate as Secret was previously issued by Issuer.cert-manager.io/
        Observed Generation:         1
        Reason:                      IncorrectIssuer
        Status:                      True
        Type:                        Issuing
      Next Private Key Secret Name:  argocd-secret-ccjtv
      Not After:                     2023-01-18T13:39:24Z
      Not Before:                    2022-01-18T13:39:24Z
      Renewal Time:                  2022-09-18T21:39:24Z
    Events:
      Type    Reason     Age                  From          Message
      ----    ------     ----                 ----          -------
      Normal  Requested  16m                  cert-manager  Created new CertificateRequest resource "argocd-secret-qm469"
      Normal  Requested  15m                  cert-manager  Created new CertificateRequest resource "argocd-secret-9ctn4"
      Normal  Reused     7m19s (x2 over 45h)  cert-manager  Reusing private key stored in existing Secret resource "argocd-secret"
    

    最后,我可以通过质询访问提供的url,但状态待定,原因如下:等待HTTP-01质询传播:未能执行自检GET请求

    有人知道可能出了什么问题吗?非常感谢。

    谢谢!

  • 共有2个答案

    孟均
    2023-03-14

    我认为你需要具体说明:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-cluster-issuer
    spec:
      acme:
        email: example@email.com
        server: https://acme-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: argocd-secret # HERE use secrets created by ArgoCD
        solvers:
        - http01:
           ingress:
             class: nginx
    
    蒙才
    2023-03-14

    看起来您在ArgoCD的入口规则中有一个不同的群集问题名称。在ClusterIssuer清单中的示例中:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-cluster-issuer
    

    并从入口规则

      annotations:
        cert-manager.io/cluster-issuer: letsencrypt-prod
    
     类似资料:
    • 我正在努力与库伯内特斯集群中的TLS合作。我关注了MS文档“在Azure Kubernetes服务上创建HTTPS入口控制器”(https://docs.microsoft.com/en-us/azure/aks/ingress-tls). 我部署了一个nginx入口控制器,添加了DNS记录并安装了证书管理器。我创建了一个自签名的CA ClusterIssuer,还创建了2个演示应用程序。 当我创

    • 我有一个EV证书为我的网站的多个子域。允许的域列表包括: 我希望使用一个具有自定义CNAME为和EV ssl证书的Cloudfront CDN。但是每当我试图在AWS证书管理器中导入它时,我都会得到以下错误。 我的证书就像

    • 名为“selfsign”的群集颁发者 由秘密“测试”支持的有效自签名证书 正常运行的nginx入口部署 一个健康运行的负载平衡器型入口服务

    • 你好,我是库伯内特的新手,试着设置我的第一个环境。我想要以下方案: < li >我的组织拥有公共IP (x.x.x.x) < li >此IP路由到带有win服务器IIS的专用局域网(即< code>192.168.0.10)中的服务器。在IIS上,我有URL重写模块,它充当反向代理 < li >我有kubernetes集群 < li >我在k8s上部署了一些服务 < li >我想通过SSL从int

    • 我使用nginx入口控制器在GKE上设置了一个新的kubernetes集群。TLS不起作用,它在使用假证书。 有很多配置细节,所以我做了一个回购https://github.com/jobevers/test_ssl_ingress 简而言之,步骤是 创建一个没有GKE负载均衡器的新集群 用我的密钥和证书创建一个tls秘密 创建一个nginx入口部署/pod 创建入口控制器 nginx-ingre

    • 是的,弹性豆茎应用程序是负载平衡的,并且确实有一个与之相关联的ELB。 我知道我可以直接应用于ELB我自己。但是我想通过弹性豆茎来应用它,这样env配置就保存到云形成模板上了。