我正在为HTTPS流量使用入口进行SSL终止。但我也想为自定义端口(http虚拟主机)实现同样的事情。例如,https://example.com:1234
应该转到http://example.com:1234
Nginx Ingress有一个ConfigMap
,我们可以暴露自定义端口。但是SSL终端在这里不起作用。
有什么办法吗?我想知道我是否可以使用。htaccess来重定向传入的https
。
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
1234: "test-web-services/httpd:1234"
---
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
externalTrafficPolicy: Local
type: LoadBalancer
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: port-1234
port: 1234
protocol: TCP
targetPort: 1234
SSL Termination
不是nginx-ingress
直接支持的特性。
在这个Github问题中有更广泛的描述:
- Github.com: Kubernetes: Ingress-nginx: Issues: [nginx] Support SSL for TCP
你也可以在这个线程中发现一些人成功地实现了一个解决方案,允许他们支持用TCP
服务终止SSL
。具体来说:
- Github.com: Kubernetes: Ingress-nginx: Issues: [nginx] Support SSL for TCP: Comment 749026036
正如您的示例所显示的&降级"从HTTPS
通信到HTTP
,您可以更改NGINX Ingress Controller
连接到backend
的方式,这可能是有益的。我来详细说明一下。
请考虑这是一个解决方案:
默认情况下,NGINX Ingress Controller
将与HTTP
连接到您的后端。这可以通过以下注释进行更改:
nginx.ingress.kubernetes.io/backend-protocol:
引用官方文档:
使用后端协议注释可以指示NGINX应该如何与后端服务通信。(替换旧版本中的安全后端)有效值:HTTP, HTTPS, GRPC, GRPCS, AJP和FCGI
NGINX默认使用HTTP。
,Kubernetes.github。io: Ingress-nginx:用户指南:Nginx配置:注解:后端协议
在这个特定的示例中,请求路径将如下:
client
—(HTTPS): 443)——比;Ingress controller
(TLS终止)——(HTTP:service-port)——>Service
——比;Pod
警告
您可以使用类型为LoadBalancer
的Service
将流量从端口1234
发送到Ingress Controller
的80
/443
。这将使TLS
终止更容易,但它将迫使客户端只使用一个协议。例如:
- name: custom
port: 1234
protocol: TCP
targetPort: 443
nginx-ingress
Service
摘录可用于转发HTTPS
流量到您的Ingress Controller
,其中请求将是TLS terminated
并作为HTTP
转发到您的backend
。强制HTTP
通过该端口将产生错误码400: Bad request
。
在这个特定的示例中,请求路径将如下:
client
—(HTTPS): 1234)——比;Ingress controller
(TLS终止)——(HTTP:service-port)——>Service
——比;Pod