使用HAProxy入口控制器时TLS握手会间歇性失败



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

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

有时(约三分之一的时间(失败

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端口没有出现同样的问题。
请参阅此处以获取重现该问题的设置的详细信息。

[edit]
正如@JoaoMorais所指出的,这是因为默认统计端口是1936。虽然我没有打开统计数据,但它似乎仍然会干扰行为
有两种解决方案对我有效。

  • 将我的服务1936端口更改为另一个
  • 在安装haproxy入口图表时,通过添加以下值来更改统计端口
controller:
stats:
port: 5000

默认情况下,HAProxy允许在相同或其他前端/侦听部分以及其他HAProxy进程中重用相同的端口号。这可以通过在global部分中添加noruseport来更改。

默认的HAProxy入口配置使用端口号1936来公开统计信息。如果这样的端口号被tcp代理重用,那么传入的请求将在两个前端之间分配——有时会调用您的服务,有时会调用统计页面。将tcp代理或统计页面(此处为doc(更改为另一个端口应该可以解决这个问题。

相关内容

  • 没有找到相关文章

最新更新