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

使用证书管理器和Traefik入口的404质询响应

蔺宇
2023-03-14

你好,我是库伯内特的新手,试着设置我的第一个环境。我想要以下方案:

    < li >我的组织拥有公共IP (x.x.x.x) < li >此IP路由到带有win服务器IIS的专用局域网(即< code>192.168.0.10)中的服务器。在IIS上,我有URL重写模块,它充当反向代理 < li >我有kubernetes集群 < li >我在k8s上部署了一些服务 < li >我想通过SSL从internet访问此服务,该SSL是从“让我们加密”获得的

我已经设置了k8s集群,部署traefik(v1.7)入口并配置它们,以便让我们加密(设置超文本传输协议-

Waiting for http-01 challenge propagation: wrong status code '404', expected '200'

我的traefik配置图:

apiVersion: v1
kind: ConfigMap
metadata:
  name: traefik-conf
  namespace: kube-system
data:
  traefik.toml: |
    # traefik.toml
    defaultEntryPoints = ["http","https"]
    [entryPoints]
      [entryPoints.http]
      address = ":80"
      [entryPoints.http.redirect]
        regex = "^http://(.*)"
        replacement = "https://$1"
      [entryPoints.https]
      address = ":443"
        [entryPoints.https.tls]
    [acme]
      email = "mymail@example.xyz"
      storage = "/acme/acme.json"
      entryPoint = "https"
      onHostRule = true
        [acme.httpChallenge]
        entryPoint = "http"
    [[acme.domains]]
      main = "my-public-domain.com"

我也尝试在那里使用通配符:

apiVersion: v1
kind: ConfigMap
metadata:
  name: traefik-conf
  namespace: kube-system
data:
  traefik.toml: |
    # traefik.toml
    defaultEntryPoints = ["http","https"]
    [entryPoints]
      [entryPoints.http]
      address = ":80"
      [entryPoints.http.redirect]
        regex = "^http://(.*)"
        replacement = "https://$1"
      [entryPoints.https]
      address = ":443"
        [entryPoints.https.tls]
    [acme]
      email = "mymail@example.xyz"
      storage = "/acme/acme.json"
      entryPoint = "https"
      onHostRule = true
        [acme.httpChallenge]
        entryPoint = "http"
    [[acme.domains]]
      main = "*.my-public-domain.com"
      sans = ["my-public-domain.com"]

我的集群发行者:

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: letsencrypt-dev
spec:
  acme:
    email: mymail@example.xyz
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      # Secret resource used to store the account's private key.
      name: example-issuer-account-key
    # Add a single challenge solver, HTTP01 using nginx
    solvers:
    - http01:
        ingress:
          class: traefik

还有我的考试证书:

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: example-com
  namespace: default
spec:
  secretName: example-com-tls
  renewBefore: 360h # 15d
  commonName: logger.my-public-domain.com
  dnsNames:
  - logger.my-public-domain.com
  issuerRef:
    name: letsencrypt-dev
    kind: ClusterIssuer

我有通配符域的DNS条目,可以ping它

我的证书停留在< code>OrderCreated状态:

Status:
  Conditions:
    Last Transition Time:  2019-10-08T09:40:30Z
    Message:               Certificate issuance in progress. Temporary certificate issued.
    Reason:                TemporaryCertificate
    Status:                False
    Type:                  Ready
Events:
  Type    Reason        Age   From          Message
  ----    ------        ----  ----          -------
  Normal  OrderCreated  47m   cert-manager  Created Order resource "example-com-3213698372"

订单卡在状态已创建

Status:
  Challenges:
    Authz URL:  <url>
    Dns Name:   logger.my-public-domain.com
    Issuer Ref:
      Kind:  ClusterIssuer
      Name:  letsencrypt-dev
    Key:     <key>
    Solver:
      http01:
        Ingress:
          Class:  traefik
    Token:        <token>
    Type:         http-01
    URL:          <url>
    Wildcard:     false
  Finalize URL:   <url>
  State:          pending
  URL:            <url>
Events:
  Type    Reason   Age   From          Message
  ----    ------   ----  ----          -------
  Normal  Created  48m   cert-manager  Created Challenge resource "example-com-3213698372-0" for domain "logger.my-public-domain.com"

最后,通过挑战:

Spec:
  Authz URL:  <url>
  Dns Name:   logger.my-public-domain.com
  Issuer Ref:
    Kind:  ClusterIssuer
    Name:  letsencrypt-dev
  Key:     <key>
  Solver:
    http01:
      Ingress:
        Class:  traefik
  Token:        <token>
  Type:         http-01
  URL:          <url>
  Wildcard:     false
Status:
  Presented:   true
  Processing:  true
  Reason:      Waiting for http-01 challenge propagation: wrong status code '404', expected '200'
  State:       pending
Events:
  Type    Reason     Age   From          Message
  ----    ------     ----  ----          -------
  Normal  Started    55m   cert-manager  Challenge scheduled for processing
  Normal  Presented  55m   cert-manager  Presented challenge using http-01 challenge mechanism

我看到有404条回复,但我无法理解其原因。在我的IIS上,我有以下重写规则:让我们绕过加密-所有url都匹配。著名的/*重写为kubernetes主机。http到https-所有url不匹配,让我们加密重定向到https子域重定向-所有子域请求重写为kubernetes。

在我的局域网中,我有自己的DNS服务器,所有域名都来自我的公共域。com具有到内部地址的映射,因此我可以重定向公共主机名logger.my-public-domain。com(x.x.x.x)到内部logger.my-public-domain。com(192.168.0.y)

当挑战活动时,我会在traefik仪表板中看到新的后端和前端。

也许我误解了它应该如何工作,但我期望证书管理器颁发证书,让我们加密,我可以观察我的服务。

共有1个答案

濮丁雷
2023-03-14

在您的陷阱中。toml正在重定向到HTTPS的ConfigMap:

[entryPoints.http.redirect]
regex = "^http://(.*)"
replacement = "https://$1"

使用kubectl编辑配置图-n库贝-系统traefik删除替换,保存更改然后重新启动Traefik pod。那么你应该可以走了。使用您的In的管理带有注释的重定向,而不是将它们放在Traefik配置中。

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

  • 我尝试在GKE集群(版本1.21.5-gke.1302)中使用ingress和cert-manager来公开ArgoCD,但是证书没有颁发。 重现步骤: > 安装证书管理器应用此 yaml 在运行helm的情况下安装ngin x入口控制器: 应用以下内容创建集群颁发者: 使用本指南和文件应用入口: < li >将入口控制器的ip映射到您的主机名。 预期行为:我期望证书被成功创建并可以访问应用程序。

  • 当块注释掉时,入口可以在端口80处正常工作。但是,当我定义时,端口80上的请求返回404,这可能是挑战失败的原因。 注意:在使用我的产品时,我会得到相同的响应。 ::编辑以添加更多配置:: 服务清单: Nginx日志: 2019/12/08 14:45:44[emerg]62#62:无法加载证书“/etc/NGINX/secrets/default-myapp-cert”:PEM_read_bio

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

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

  • 我想以集中管理的安全方式将EKS中的一些网络应用程序公开到互联网。 在AWS中,使用ALB很好,例如它允许您终止TLS并使用Cognito添加身份验证。(见此处) 要预配ALB并将其连接到应用程序,有aws-load-balancer-控制器。它工作正常,但它需要每个应用程序/入口配置一个新的ALB: 我希望有一个中央定义良好的ALB,所有的应用程序都不需要再关心这个了。 我的想法是拥有一个常规的