首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于以其他方式工作的ERR_SSL_PROTOCOL_ERROR入境/服务

关于以其他方式工作的ERR_SSL_PROTOCOL_ERROR入境/服务
EN

Server Fault用户
提问于 2020-01-03 00:46:08
回答 1查看 13.7K关注 0票数 5

我有一个基本的nginx部署和一个现有的证书,由我们通过证书管理器加密。我认为一切都已经就绪,可以开始使用证书了,但我无法连接https。

连接到LoadBalancer IP和域可以工作。使用https连接到域无法连接。Chrome表示ERR_SSL_PROTOCOL_ERROR,Firefox表示SSL_ERROR_RX_RECORD_TOO_LONG,SSL实验室表示Assessment failed: No secure protocols supported。都是同一个问题。

以下是服务:

代码语言:javascript
运行
复制
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: example
  labels:
    app: example
spec:
  type: LoadBalancer
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
  - name: https
    protocol: TCP
    port: 443
    targetPort: 80
  selector:
    app: example

这是入口:

代码语言:javascript
运行
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
  namespace: example
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-production
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
  tls:
    - hosts:
      - 'example.com'
      secretName: example-production-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 443

该证书填充如下:

代码语言:javascript
运行
复制
kubectl describe secret
...
Data
====
tls.crt:  3574 bytes
tls.key:  1675 bytes
ca.crt:   0 bytes

证书资源由正确的入口拥有。我已经用上面的“示例”替换了我的域。

似乎一切都已经就绪,但我不知道为什么我无法通过https连接。我能运行什么来排除这个问题呢?

更新:我发现我的部署和nginx映像缺少一些配置。我遵循了这里的所有步骤:https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#securing-the-service

和以前一样,我可以在443和80上连接到LoadBalancer IP,但是https连接失败了。与http合作:

代码语言:javascript
运行
复制
curl http:// -k

Hello!
  Stay tuned for launch!

https失败:

代码语言:javascript
运行
复制
curl https:// -k
curl: (35) error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number
EN

回答 1

Server Fault用户

发布于 2020-01-03 03:40:03

本例中的问题是部署和服务的结合。我使用服务yaml中的这一行将https流量路由到端口80:

代码语言:javascript
运行
复制
- name: https
  protocol: TCP
  port: 443
  targetPort: 80

这无法完成SSL握手,而这正是curl: (35) error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number所要做的。

我认为这是可以的,因为在以前使用SSL的服务上,我在美洲狮上路由端口80和443到3000。我不知道如果在美洲狮上路由443到80会发生什么,但是它肯定与nginx断绝了关系。更改上面的服务yaml解决了这个问题(在确保nginx监听443并在default.conf中的default.conf中启用了SSL之后):

代码语言:javascript
运行
复制
- name: https
  protocol: TCP
  port: 443
  targetPort: 443
票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/997435

复制
相关文章

相似问题

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