You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s环境下带Ingress的安全NiFi集群登录报SSLPeerUnverifiedException的替代方案咨询

K8s环境下带Ingress的安全NiFi集群登录报SSLPeerUnverifiedException的替代方案咨询

看起来你碰到的是NiFi集群完成同步后,Ingress与后端节点之间的SSL主机名不匹配问题——这个场景我之前帮不少用户排查过,确实挺棘手的,尤其是在无法重新生成适配内部集群域名证书的情况下。结合你的配置和问题描述,我整理几个可行的替代方案供你参考:

方案一:关闭Ingress对后端节点的SSL证书验证(适合测试/内部可信环境)

你的Ingress用了ssl-passthrough,意味着流量会直接透传到NiFi节点的HTTPS端口,此时Ingress作为客户端会验证节点证书的主机名。如果无法修改证书,你可以通过添加Nginx Ingress注解来关闭这个验证:

annotations:
  # 新增这一行,关闭后端SSL证书验证
  nginx.ingress.kubernetes.io/backend-ssl-verify: "false"

⚠️ 注意:这个方案会降低内部通信的安全性,因为Ingress不再验证后端节点的证书合法性,仅建议在测试环境或者完全可信的内部集群中使用。

方案二:修改NiFi节点的主机名,适配现有证书的SAN

你可以给NiFi StatefulSet配置带有domain.com后缀的自定义主机名,让节点的内部通信域名匹配证书的*.domain.com SAN。具体操作如下:

  1. 修改NiFi StatefulSet的配置,设置自定义hostname和subdomain:
spec:
  serviceName: "nifi"
  template:
    spec:
      hostname: "{{ .Release.Name }}-node-$(POD_NAME)"
      subdomain: domain.com

(这里的$(POD_NAME)会被K8s自动替换为Pod的序号,比如nifi-node-0.domain.com)

  1. 同步修改NiFi的核心配置:

    • 设置nifi.cluster.node.address={{ .Release.Name }}-node-$(POD_NAME).domain.com(确保节点间通信使用新域名)
    • 设置nifi.web.https.host={{ .Release.Name }}-node-$(POD_NAME).domain.com
    • 设置nifi.remote.input.host={{ .Release.Name }}-node-$(POD_NAME).domain.com
  2. 确保K8s集群的DNS能正确解析这些新域名(通常配置subdomain后K8s CoreDNS会自动处理)。

这个方案能让节点证书的SAN覆盖内部通信域名,从根源解决主机名不匹配问题,适合生产环境,但需要调整StatefulSet和NiFi的配置。

方案三:让Ingress终止SSL,后端用HTTP通信(最易实现的生产级方案)

你之前尝试过切换NiFi到HTTP,但可能没同步调整Ingress的配置。这个方案让Ingress处理外部的HTTPS加密,内部转发到NiFi的HTTP端口,完全绕开后端SSL验证的问题:

  1. 确保NiFi的HTTP配置正确生效:

    • 开启HTTP端口:nifi.web.http.port=8080
    • 禁用HTTPS端口:注释掉nifi.web.https.port相关配置
    • 关闭远程输入和集群通信的SSL:nifi.remote.input.secure=false、nifi.cluster.protocol.is.secure=false
    • 设置代理主机:nifi.web.proxy.host=nifi-cluster.domain.com(让NiFi识别外部访问的域名)
  2. 修改Ingress的配置:

ingress:
  enabled: true
  className: nginx
  annotations:
    # 把后端协议改成HTTP
    nginx.ingress.kubernetes.io/backend-protocol: HTTP
    # 移除ssl-passthrough注解,因为SSL在Ingress端终止
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    nginx.ingress.kubernetes.io/affinity-mode: persistent
  tls:
  - hosts:
    - nifi-cluster.domain.com
    secretName: ssl-certs
  hosts:
  - host: nifi-cluster.domain.com
    path: /

这个方案外部用户访问是HTTPS加密的,内部集群通信用HTTP(适合可信内部环境),配置改动最小,且能解决你的登录问题。

另外,你之前尝试切换HTTP时,可以检查NiFi Pod的日志,确认是否真的监听了HTTP端口,同时重启Ingress Controller确保配置生效。

备注:内容来源于stack exchange,提问作者Jin Ma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 07:59:51