簡體   English   中英

將外部流量從獨立的 nginx 服務路由到 kubernetes 節點端口服務

[英]Route external traffic from a standalone nginx service to kubernetes nodeport service

目標我想通過獨立的 nginx 服務和 microk8s 節點端口服務訪問 kubernetes 儀表板。

上下文我有一個 linux 服務器。 在此服務器上,有幾個正在運行的服務,例如:

  • microk8s
  • nginx(注意:我沒有使用入口,nginx 服務獨立於 microk8s 工作)。

這是我正在尋找的工作流程:

  1. http://URL /儀表板
  2. NGINX 服務(從 http://URL /dashboard 到 nodeIpAddress:nodeport)
  3. 節點端口服務
  4. kubernetes 儀表板服務

問題:但是,每次我請求 http:// URL /dashboard 我都會收到502 錯誤的請求答案,我缺少什么?

CONFIGURATION請在下面找到,nginx 配置,節點端口服務配置和 microk8s 集群的狀態:

nginx 配置:/etc/nginx/site-availables/default

節點端口服務配置

節點 ip 地址

microk8s 命名空間

非常感謝您的幫助。

我將在這里總結整個問題和解決方案。

首先,需要暴露 Kubernetes Dashboard 的服務需要指向正確的目標端口,還需要 select 正確的 Pod(kubernetes-dashboard Pod)

如果您通過以下方式檢查您的服務:

kubectl desribe service <service-name>

通過查看 Endpoints 部分,您可以輕松查看它是選擇一個 Pod(或多個 Pod)還是什么都不選。 通常,您的服務應該具有與標准 kubernetes-dashboard 服務相同的選擇器、端口、targetPort 等(它公開儀表板,但僅在集群內部)

其次,您的 NGINX 配置將位置 /dashboard 代理到服務,但問題是 kubernetes-dashboard Pod 期望請求直接到達 /,因此路徑 /dashboard 對它沒有任何意義。

解決第二個問題,有幾種方法,但都在於NGINX配置。 如果您閱讀了模塊代理的文檔(又名http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass ),您可以看到解決方案是在配置中添加一個 URI,如下所示:

proxy_pass https://51.68.123.169:30000/

注意尾部的斜杠,即URI,表示匹配代理規則的位置被改寫為/。 這意味着 your_url/dashboard 將成為 your_url/

如果沒有尾部斜杠,您的位置將按原樣傳遞給目標,因為目標只是端點。

如果您需要更復雜的 URI 更改,您正在搜索的是重寫規則(它們支持正則表達式等等),但添加尾部斜杠應該可以解決您的第二個問題。

確實@AndD,你建議我執行這個命令:

sudo microk8s kubectl describe service -n kube-system kubernetes-dashboard

為了獲得這些以下信息

  • 標簽:k8s-app=kubernetes-dashboard
  • 目標端口:8443/TCP

多虧了以上信息,我可以修復 nodePort 服務,您可以在下面找到一個片段:

spec:
  type: NodePort
  k8s-app: 'kubernetes-dashboard'
ports:
 - protocol: TCP
  port: 8443
  targetPort: 8443
  nodePort: 30000

但是,我確實將 nginx 配置更改為

proxy_pass https://51.68.123.169:30000/

我確實收到了成功的響應(html),然后所有剩余的請求都有 404 狀態(js、css、資產)。

http 404


編輯

html 文件包含一組依賴項 (js/img/css)

<link rel="stylesheet" href="styles.3aaa4ab96be3c2d1171f.css"></head>
...
<script src="runtime.3e2867321ef71252064e.js" defer></script>

所以它試圖用這些 URL 來獲取這些資產:

  • https::// URL/styles.3aaa4ab96be3c2d1171f.css
  • https::// URL/runtime.3e2867321ef71252064e.js

而不是使用:

  • https::// URL/dashboard/styles.3aaa4ab96be3c2d1171f.css
  • https::// URL/dashboard/runtime.3e2867321ef71252064e.js

編輯#2

我只是再次將子路徑 => dashboad/ 更改為 dash/

新 nginx 配置

它適用於鉻。 但它不適用於 firefox。 (沒有大礙)

非常感謝AndD!


此外,我遇到了與 jenkins 類似的問題,但是 jenkins 圖像包含修復該問題的參數。 docker 運行 --publish 8080:8080 --env JENKINS_OPTS="--prefix=/subpath" jenkins/jenkins

我期待找到與kubernetesui /dashboard 類似的東西,但我沒有找到任何東西

https://github.com/kubernetes/dashboard

好吧,我不知道如何很好地配置 nginx 以便在子路徑中正確顯示儀表板,我在 kubernetes\dashboard 圖像中沒有找到任何參數來處理子路徑。

暫無
暫無

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

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