k8s nginx 入口 TLS 规则:证书与路径

时间:2021-04-05 16:02:20

标签: kubernetes kubernetes-ingress ingress-nginx

我正在努力让我的 nginx 入口(在 AWS EKS 上)使用路径规则和 TLS。

入口来自 here

来自 Ingress 的片段如下所示:

spec:
  tls:
  - hosts:
      - example.com
    secretName: ingress-tls
  rules:
  - host: example.com
  - http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 443

此入口创建 AWS 网络负载均衡器,其 URL 类似于 https://xyz.elb.us-west-1.amazonaws.com/

我正在更新 ingress-tls 使用证书的秘密 cert-manager

当我使用 NLB URL 访问入口时 https://xyz.elb.us-west-1.amazonaws.com/api,我明白了

  1. GOOD:根据入口定义中的路径规则正确路由(即它转到我的 api-service 符合预期)
  2. 不好:证书错误,因为我没有使用证书所针对的域访问入口。

当我使用正确的域访问入口时,例如 https://example.com/api 这就是我想要做的,我明白了:

  1. 不好: 404,它不遵守我的路径规则,然后转到 upstream-default-backend 代替。
  2. GOOD:证书都很好,这是一个 example.comcert-manager 已配置。

我尝试删除 host: example.com 来自 rules:,这给了我:

  1. 好:根据入口定义中的路径规则正确路由
  2. 坏:证书错误,它提供默认的入口“假”证书,而不是用于 example.com,我想自从 规则中缺少 host,但不确定确切原因。

谁能帮我弄一下

我在这里不知所措。

1 个答案:

答案 0 :(得分:1)

在盯着这个看了几个小时之后,挖掘了令人讨厌的 lua 块,这是 nginx.conf为此,我找到了!也许有一天有人会遇到这个问题,并且可能会觉得这很有用。

问题是:

  rules:
  - host: example.com
  - http:

这是定义(我认为)一个 host 没有转发规则,然后一些 http 没有主机的转发规则。我的意图显然是转发规则适用于主机。

那就是:

  rules:
  - host: example.com
    http:

我不得不说,如果可能的话,我现在比以前更不喜欢 YAML 了。