gpt4 book ai didi

ssl - 使用 HAProxy 入口 Controller 时,TLS 握手间歇性失败

转载 作者:行者123 更新时间:2023-12-02 11:59:32 28 4
gpt4 key购买 nike

我正在使用 HAProxy 入口 Controller ( https://github.com/helm/charts/tree/master/incubator/haproxy-ingress ) 为我的应用程序终止 TLS。
我有一个简单的 Node.JS 服务器在 8080 上监听 HTTP,1935 作为简单的回显服务器(不是 HTTP)。
我使用 HAProxy Ingress Controller 将端口包装在 TLS 中。 (8080 -> 443 (HTTPS), 1935 -> 1936 (TCP + TLS))
我安装了HAProxy Ingress Controller

helm upgrade --install haproxy-ingress incubator/haproxy-ingress \
--namespace test \
-f ./haproxy-ingress-values.yaml \
--version v0.0.27
,其中 haproxy-ingress-values.yaml的内容是

controller:
ingressClass: haproxy
replicaCount: 1
service:
type: LoadBalancer
tcp:
1936: "test/simple-server:1935:::test/ingress-cert"
nodeSelector:
"kubernetes.io/os": linux
defaultBackend:
nodeSelector:
"kubernetes.io/os": linux
这是我的入口:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: "haproxy"
spec:
tls:
- hosts:
secretName: ingress-cert
rules:
- http:
paths:
- path: /
backend:
serviceName: "simple-server"
servicePort: 8080
证书是自签名的。
如果我测试 TLS 握手
echo | openssl s_client -connect "<IP>":1936
有时(大约 1/3 的时间)它会失败
CONNECTED(00000005)
139828847829440:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:332:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 316 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
443 端口不会发生同样的问题。
here有关重现问题的设置的详细信息。
[编辑]
正如@JoaoMorais 所指出的,这是因为默认统计端口是 1936。
虽然我没有打开统计信息,但它似乎仍然会干扰行为。
有两种解决方案对我有用。
  • 将我的服务的 1936 端口更改为另一个
  • 在安装 haproxy-ingress 图表时,通过添加如下值来更改统计端口。
  • controller:
    stats:
    port: 5000

    最佳答案

    默认情况下,HAProxy 允许在相同或其他前端/监听部分以及其他 haproxy 进程中重用相同的端口号。这可以通过添加 noreuseport 进行更改在 global部分。
    默认 HAProxy Ingress 配置使用端口号 1936公开统计数据。如果这样的端口号被例如 tcp 代理重用,传入的请求将在两个前端之间分发 - 有时会调用您的服务,有时会调用统计页面。将 tcp 代理或统计页面(文档 here)更改为另一个端口应该可以解决问题。

    关于ssl - 使用 HAProxy 入口 Controller 时,TLS 握手间歇性失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64116259/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com