首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HAProxy入口控制器时TLS握手间歇性失败

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

Stack Overflow用户
提问于 2020-09-29 09:02:09
回答 1查看 1.5K关注 0票数 1

我正在使用HAProxy侵入控制器(https://github.com/helm/charts/tree/master/incubator/haproxy-ingress)作为TLS-我的应用程序的终止。我有一个简单的Node.JS服务器监听8080的HTTP,1935年作为一个简单的回显服务器(而不是HTTP)。

并且我使用HAProxy入口控制器来封装TLS中的端口。(8080 -> 443 (HTTPS),1935年-> 1936 (TCP + TLS))

我安装了HAProxy入口控制器

代码语言:javascript
复制
helm upgrade --install haproxy-ingress incubator/haproxy-ingress \
   --namespace test \
  -f ./haproxy-ingress-values.yaml \
  --version v0.0.27

,其中haproxy-ingress-values.yaml的内容是

代码语言:javascript
复制
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

这是我的入口:

代码语言:javascript
复制
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的握手

代码语言:javascript
复制
echo | openssl s_client -connect "<IP>":1936

有时(大约1/3次)它失败了

代码语言:javascript
复制
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端口也不会出现同样的问题。

有关重现问题的设置的详细信息,请参见这里

编辑

正如@JoaoMorais所指出的,这是因为默认的统计端口是1936年。虽然我没有打开统计数据,但它似乎仍然干扰了行为。

有两种解决方案对我有效。

  • 将我的服务1936年的端口改为另一个
  • 在安装haproxy图表时,通过添加如下所示的值来更改统计端口。
代码语言:javascript
复制
controller:
  stats:
    port: 5000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-29 12:03:54

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64116259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档