ingress 返回 502 / TLS 后端通信问题

ingress 返回 502 / TLS 后端通信问题

我正在使用 cert-manager 操作 k8s 集群以获取 letsencrypt 证书。我刚刚设置了 nifi (https://github.com/cetic/helm-nifi) 在此集群内,工作负载公开由相应服务抽象的 TLS 安全端口。

我设置了一个入口,将流量路由到相应的 nifi 服务。证书按预期正确获取,但当我502 bad gateway尝试通过入口访问服务时,我不断收到一条消息。

入口控制器揭示了原因:

2020/11/07 15:45:20 [error] 10687#10687: *154495249 SSL_do_handshake() failed (SSL: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:SSL alert number 42) while SSL handshaking to upstream, client: 134.3.215.120, server: https://[my-domain], request: "GET /favicon.ico HTTP/2.0", upstream: "https://10.42.1.137:8443//favicon.ico", host: "https://[my-domain]", referrer: "https://[my-domain]" 

这是我的入口定义:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
 
    ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/secure-backends: "true"
  generation: 1
  labels:
    app: nifi
    chart: nifi-0.5.5
    heritage: Helm
    release: nifi
  name: nifi-ingress
  namespace: nifi
  resourceVersion: "138180326"
  uid: a6b561a8-1fc0-11eb-b2e1-6a9097f8076d
spec:
  rules:
  - host: [my-domain]
    http:
      paths:
      - backend:
          serviceName: nifi
          servicePort: 5422
        path: /
  tls:
  - hosts:
    - [my-domain]
    secretName: nifi-tls

看起来 ingress 想要建立一个被 pod 拒绝的 TLS 连接(很明显),但我不知道如何解决这个问题。似乎很明显,在 nifi pod 上安装自签名证书就可以完成这项工作,但我不知道如何做到这一点,我宁愿相信我在这里做错了什么,因为这应该是开箱即用的。

感谢任何提示或想法。

更新/澄清:

我现在用标准配置进行设置,以便于理解。核心问题来自入口控制器日志:

2020/11/18 23:01:25 [error] 15529#15529: *166867031 SSL_do_handshake() failed (SSL: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:SSL alert number 42) while SSL handshaking to upstream, client: xxx, server: [nifi-ingress-hostname], request: "GET /favicon.ico HTTP/2.0", upstream: "https://[nifi-pod]:8443/favicon.ico", host: "[nifi-hostname]", referrer: "https://[nifi-ingress-hostname]" 

[nifi-ingress-hostname] 是将流量路由到端口 8443 上的 nifi 服务的入口。该服务将流量转发到 [nifi-pod]:8443。[nifi-pod] 上的服务在 8443 上监听加密通信。

但是问题似乎是由于 SSL 握手失败,导致通信入口到 pod 的最后一步不起作用。我在入口处添加了这些注释:

    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"

将加密流量直接传递给 pod,但这没有效果。不知何故,似乎我必须更改 Helm Chart 以将 pod 上的服务更改为 http 而不是 https,或者确保使用自签名证书进行加密连接,或者我遗漏了什么?

相关内容