【发布时间】:2020-07-28 00:01:50
【问题描述】:
我有两个 kubernetes 环境,它们使用入口作为代理来重定向请求以提供静态(前端)和后端休息服务。
这样的请求可以通过其中一个环境中的两个主机 URL 访问(一个主机配置了 tls 证书密码),而在另一个环境中,我没有配置任何 tls 密码,它只能由一个访问主机网址
在第一个环境中(只有一个主机且没有 TLS 密码)我有以下内容:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-connect-timeout: "70"
nginx.ingress.kubernetes.io/proxy-read-timeout: "1000"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1000"
nginx.ingress.kubernetes.io/rewrite-target: /$1
creationTimestamp: "XXXX"
generation: 9
labels:
app: myapp
chart: myapp-0.1.0
heritage: Helm
release: myapp-ingress
name: myapp-ingress
namespace: myapp-namespace
resourceVersion: "25745018"
selfLink: /apis/extensions/v1beta1/namespaces/my-app-namespace/ingresses/my-app-ingress
uid: 34c3d902-1517
spec:
rules:
- host: hostOne
http:
paths:
- backend:
serviceName: myapp-front
servicePort: 8080
path: /(.*)
- backend:
serviceName: myapp-backend
servicePort: 8080
path: /myappapi/(.+)
tls:
- hosts:
- hostOne
status:
loadBalancer:
ingress:
- {}
在这一个中,我可以通过 HTTP 完美地发出请求,并且一切正常。对于 HTTPS 请求,我得到一个 SSLExcepcion,因为客户端中没有安装证书(这是正常且明显的)
在第二个集群中,我有 TLS 密钥和两个主机 URL:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-connect-timeout: "70"
nginx.ingress.kubernetes.io/proxy-read-timeout: "1000"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1000"
nginx.ingress.kubernetes.io/rewrite-target: /$1
creationTimestamp: "XXXX"
generation: 9
labels:
app: myapp
chart: myapp-0.1.0
heritage: Helm
release: myapp-ingress
name: myapp-ingress
namespace: myapp-namespace
resourceVersion: "25745018"
selfLink: /apis/extensions/v1beta1/namespaces/my-app-namespace/ingresses/my-app-ingress
uid: 34c3d902-1517
spec:
rules:
- host: hostOne
http:
paths:
- backend:
serviceName: myapp-front
servicePort: 8080
path: /(.*)
- backend:
serviceName: myapp-backend
servicePort: 8080
path: /myappapi/(.+)
- host: hostTwo
http:
paths:
- backend:
serviceName: myapp-front
servicePort: 8080
path: /(.*)
- backend:
serviceName: myapp-backend
servicePort: 8080
path: /myappapi/(.+)
tls:
- hosts:
- hostTwo
secretName: tlsSecret
- hosts:
- hostOne
status:
loadBalancer:
ingress:
- {}
在这种情况下,当使用 HTTP 进行请求时,我会在两个 URL(hostOne 和 hostTwo)中重定向到 HTTPS 时收到 803 错误
我希望在仅对 hostTwo 使用 http 时进行重定向,该 hostTwo 配置了证书和 TLS 机密。
为什么入口会响应 http 的重定向而在第一种情况下却没有?我应该改变什么?
当我向 https 发送带有 RestTemplate 的请求时,我得到一个 SSLException:
2020-05-08 12:57:05,586 ERROR class=ExceptionHandler Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
我尝试安装证书和广告 TLS1.2,如下所述: Spring RestTemplate: SSL handshake failure
但它不起作用,我无法使用 http 发送请求,只是为了检查服务是否是良好的代码。
【问题讨论】:
标签: rest http redirect kubernetes nginx-ingress