gpt4 book ai didi

Kubernetes - 入口 TCP 服务 SSL 终止

转载 作者:行者123 更新时间:2023-12-04 08:13:01 25 4
gpt4 key购买 nike

我正在使用 Ingress 对 HTTPS 流量进行 SSL 终止。但我也想为自定义端口(http 虚拟主机)实现同样的目标。例如 https://example.com:1234应该去http://example.com:1234Nginx Ingress 有一个 ConfigMap我们可以在其中公开自定义端口。但是 SSL 终止在这里不起作用。
有什么解决办法吗?我想知道是否可以重定向传入的 https使用 .htaccess 代替。

    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用于 TCP 流量不是 nginx-ingress 直接支持的功能.
在这个 Github issue 中有更广泛的描述:

  • Github.com: Kubernetes: Ingress-nginx: Issues: [nginx] Support SSL for TCP

  • 您还可以在此线程中找到一些人成功实现了一种解决方法,允许他们支持终止 SSLTCP服务。具体来说:
  • 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:

  • 引用官方文档:

    Using backend-protocol annotations is possible to indicate how NGINX should communicate with the backend service. (Replaces secure-backends in older versions) Valid Values: HTTP, HTTPS, GRPC, GRPCS, AJP and FCGI

    By default NGINX uses HTTP.

    -- Kubernetes.github.io: Ingress-nginx: User guide: Nginx configuration: Annotations: Backend protocol


    在此特定示例中,请求路径如下:
  • client -- (HTTP S :443) --> Ingress controller (TLS 终止) -- (HTTP:service-port) --> Service ----> Pod

  • 警告
    您可以使用 Service类型 LoadBalancer从端口 1234 发送流量到 80/ 443您的 Ingress Controller .这将使 TLS终止更容易,但它会强制客户端使用 只有一个协议(protocol)。例如:
        - name: custom
    port: 1234
    protocol: TCP
    targetPort: 443
    摘自 nginx-ingress Service可用于转发 HTTPS 您的 Ingress Controller 的流量请求在哪里 TLS terminated并转发为 HTTP给您的 backend .强制 HTTP通过该端口会产生错误代码 400: Bad request .
    在此特定示例中,请求路径如下:
  • client -- (HTTP S :1234) --> Ingress controller (TLS 终止) -- (HTTP:service-port) --> Service ----> Pod
  • 关于Kubernetes - 入口 TCP 服务 SSL 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65857360/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com