ssl-passthrough 是否配置在主机级别,kubernetes ingress

Is the ssl-passthrough configured at the host level, kubernets ingress

我在kubernetes中有2个服务,一个是mtls,另一个是tls。 我正在尝试为他们配置入口。 我想为 mtls 服务配置 ssl passthrough 但让 tls 服务没有 ssl-passthrough,它不需要客户端证书。

我在同一个主机名下配置了 2 个入口,有两个不同的 yaml 文件。 一个带直通,一个不带直通。

当前的行为是,如果我先创建 mtls ingress,tls 将不起作用,我发送到 tls 的 https 请求将始终路由到 mtls 服务。然后returns404。 但是,如果我先配置 tls 入口,然后再配置 mtls。然后 tls 一个可以工作,但是 mtls 一个将因证书问题而失败。

我不确定是否在主机级别配置了 ssl 直通注释?或者我可以让它在每个路径级别上工作吗? mtls 入口。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  name: mtls-ingress
spec:
  rules:
  - host: app.abc.com
    http:
      paths:
      - backend:
          service:
            name: mtls-service
            port:
              number: 8081
        path: /mtls-api
        pathType: Prefix
  tls:
  - hosts:
    - app.abc.com
    secretName: tls-nginx-mtls

然后是 tls 入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  name: tls-ingress
spec:
  rules:
  - host: app.abc.com
    http:
      paths:
      - backend:
          service:
            name: tls-service
            port:
              number: 8080
        path: /tls-api
        pathType: Prefix
  tls:
  - hosts:
    - app.abc.com
    secretName: tls-nginx-tls

就像两个入口互相覆盖一样,只有第一个注释有效。似乎为主机配置了直通,但没有为入口或路径配置。 不知道。请帮忙。谢谢

您想在同一台主机上使用 2 项服务,其中一项的注释为 nginx.ingress.kubernetes.io/ssl-passthrough: "true"

这将不起作用,因为使用 SSL 直通代理不知道路由流量的路径。

来自the NGINX Ingress Controller User Guide

The annotation nginx.ingress.kubernetes.io/ssl-passthrough instructs the controller to send TLS connections directly to the backend instead of letting NGINX decrypt the communication.

Because SSL Passthrough works on layer 4 of the OSI model (TCP) and not on the layer 7 (HTTP), using SSL Passthrough invalidates all the other annotations set on an Ingress object.

解决方案是为您的服务使用子域,而不是路径。

此外,来自 GitHub 的一些关于此问题的链接:

Multiple Ingress backends ignored when SSL Passthrough is enabled

忽略服务器“example.com”

中位置“/*”的 SSL 直通

基于路径的路由仅适用于基本路径

以及来自 serverfault 关于 SSL 直通的 NginX 工作流程。