Kubernetes -入口TCP服务SSL终止



我正在为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

警告

您可以使用类型为LoadBalancerService将流量从端口1234发送到Ingress Controller80/443。这将使TLS终止更容易,但它将迫使客户端只使用一个协议。例如:

- name: custom
port: 1234
protocol: TCP
targetPort: 443

nginx-ingressService摘录可用于转发HTTPS流量到您的Ingress Controller,其中请求将是TLS terminated并作为HTTP转发到您的backend。强制HTTP通过该端口将产生错误码400: Bad request

在这个特定的示例中,请求路径将如下:

  • client—(HTTPS): 1234)——比;Ingress controller(TLS终止)——(HTTP:service-port)——>Service——比;Pod

相关内容

  • 没有找到相关文章

最新更新