我在kubernetes中有2個服務,一個是mtls,另一個是tls。我正在嘗試為他們配置入口。我想為 mtls 服務配置 ssl passthrough,但不使用 ssl-passthrough 離開 tls 服務,它不需要客戶端證書。
我用兩個不同的 yaml 檔案在同一個主機名上配置了 2 個入口。一個有直通,另一個沒有直通。
當前的行為是,如果我首先創建 mtls 入口,則 tls 將不起作用,我發送給 tls 的 https 請求將始終路由到 mtls 服務。然后回傳 404。但是,如果我先配置 tls ingress,然后再配置 mtls。然后 tls 將作業,但 mtls 將因證書問題而失敗。
我不確定是否在主機級別配置了 ssl passthrough 注釋?或者我可以讓它在每個路徑級別上作業嗎?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
這就像兩個入口相互覆寫,只有第一個注釋有效。看起來為主機配置了直通,但沒有為入口或路徑配置。不知道。請幫忙。謝謝。
uj5u.com熱心網友回復:
您想在同一主機上使用 2 個服務,其中一個帶有注釋nginx.ingress.kubernetes.io/ssl-passthrough: "true"。
這將不起作用,因為使用 SSL Passthrough 代理不知道路由流量的路徑。
來自NGINX 入口控制器用戶指南:
注釋 nginx.ingress.kubernetes.io/ssl-passthrough 指示控制器將 TLS 連接直接發送到后端,而不是讓 NGINX 解密通信。
因為 SSL Passthrough 在 OSI 模型 (TCP) 的第 4 層而不是第 7 層 (HTTP) 上作業,所以使用 SSL Passthrough 會使 Ingress 物件上設定的所有其他注釋無效。
解決方案是為您的服務使用子域,而不是路徑。
此外,來自 GitHub 的一些關于此問題的鏈接:
啟用 SSL 直通時忽略多個 Ingress 后端
忽略服務器“example.com”中位置“/*”的 SSL 直通
基于路徑的路由僅適用于基本路徑
以及關于 SSL Passthrough 的 NginX 作業流的serverfault。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420926.html
標籤:
