在具有Nginx入口的Kubernetes上使用客户端证书身份验证时,如何解决证书管理器响应以让我们加密ACME挑战?

问题描述

我们已经建立了一个需要TLS证书身份验证的新入口路由,并将其放置在其自己的子域中,但是我们发现cert-manager无法为其颁发证书。

使用此处提供的示例,我们生成了CA证书和CA密钥,然后配置了客户端证书: https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/auth/client-certs

在日志中,我可以看到所有.acme-challenge请求都返回403。我猜测nginx拒绝了该请求,因为“让我们加密”无法为质询请求提供客户端证书。我该怎么做才能绕过ACME的客户证书要求?

解决方法

这里的问题是我们实际上错误地配置了nginx.ingress.kubernetes.io/auth-tls-secret注释。 必须采用namespace/name格式-其中namespace是包含包含客户端CA证书的机密的名称空间,而name是该机密的名称-但是我们只提供名称,因为秘密与入口在同一个名称空间中。

我能够通过以下方式将nginx入口控制器配置转储到nginx.conf.txt来诊断问题:

  kubectl exec <NAME OF INGRESS CONTROLLER POD> -n <INGRESS NAMESPACE> -- nginx -T | tee nginx.conf.txt

(改编自https://docs.nginx.com/nginx-ingress-controller/troubleshooting/#checking-the-generated-config)。

其中包括以下代码段:

    ## start server the.hostname.com
    server {
        server_name the.hostname.com ;
        
        listen 80;
        
        set $proxy_upstream_name "-";
        set $pass_access_scheme $scheme;
        set $pass_server_port $server_port;
        set $best_http_host $http_host;
        set $pass_port $pass_server_port;
        
        listen 443  ssl http2;
        
        # PEM sha: 66c07c44ba9637a23cd3d7b6ebce958e08a52ccb
        ssl_certificate                         /etc/ingress-controller/ssl/default-fake-certificate.pem;
        ssl_certificate_key                     /etc/ingress-controller/ssl/default-fake-certificate.pem;
        
        ssl_certificate_by_lua_block {
            certificate.call()
        }
        
        # Location denied,reason: invalid format (namespace/name) found in 'the-secret-name'
        return 403;
        
    }
    ## end server the.hostname.com

关键是这两行:

        # Location denied,reason: invalid format (namespace/name) found in 'the-secret-name'
        return 403;

这使我想到了机密名称的注释。一旦我解决了问题,ACME就可以正常工作。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...