簡體   English   中英

Kube.netes nginx controller:避免在瀏覽器中通過 302 重定向加載資產(css、js 等)到 https

[英]Kubernetes nginx controller: avoid loading assets (css, js, etc.) via 302 redirect to https in browser

我有一個帶有 nginx controller(通過 helm 安裝)的本地 kube.netes 集群 (k3s)。 我有兩個服務(Spring-Boot myapp 和一個 auth-server (OAuth2))。

我試圖讓我的應用程序僅適用於 http。 因此,我通過以下方式定義了一個入口資源:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/configuration-snippet: |-
      if ($uri = /){
          return 302 http://$http_host/myapp/;
        }
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  ingressClassName: nginx
  rules:
    - host: myapp.cloud
      http:
        paths:
          - path: /myapp
            pathType: Prefix
            backend:
              service:
                name: myapp
                port:
                  number: 80
          - path: /
            pathType: Prefix
            backend:
              service:
                name: auth-server
                port:
                  number: 8080

我還在 nginx-controller config-map 中添加了以下參數:

  hsts: "false"
  ssl-redirect: "false"
  hsts-max-age: "0"

我還在瀏覽器(Safari 和 Firefox)中清除了 HSTS。 我的兩個后端服務都禁用了 SSL (server.ssl.enabled=false)。

加載http://myapp.cloud時,我被正確重定向到 auth-server ( http://myapp.cloud/login ) 的登錄頁面。 但是,頁面未正確加載,因為未加載 static 資產(js、css)。 相反,加載它們的請求會通過 302 重定向到與 https 相同的資源。由於 nginx 的默認偽造證書無效,這些不會被加載。

如果我直接在瀏覽器中訪問這些資產(例如http://myapp.cloud/assets/style.css ),我也會被重定向 302 到http://myapp.cloud/assets/style.css而這不會加載,因為 nginx 證書無效。

如果我直接通過 http 端口轉發到 k8s 服務,它們將被正確加載。

是否有可能僅使用 http 進行這項工作,還是我絕對需要使用證書管理器等並通過 https 進行這項工作? 我的配置/設置中缺少什么?

我已經決定 go 使用自簽名證書啟用 HTTPS,我認為目前沒有辦法解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM