使用「Bridge to Kubernetes」(VS Code)
備註
Bridge to Kubernetes 將於 2025 年 4 月 30 日淘汰。 如需淘汰和開放原始碼替代方案的詳細資訊,請參閱 GitHub 問題。
Bridge to Kubernetes 可讓您在開發計算機上執行和偵錯程式代碼,同時仍會使用其餘的應用程式或服務連線到 Kubernetes 叢集。 在本指南中,您將瞭解如何使用 Bridge to Kubernetes 來重新導向 Kubernetes 叢集之間的流量,以及在開發電腦上執行的程式代碼。
開始之前
本文假設您已經擁有具有微服務架構的叢集,而且您想要對叢集中的其中一個 Pod 進行偵錯。 如果您要瞭解如何搭配現有的範例應用程式使用 Bridge to Kubernetes,請參閱 使用 Bridge to Kubernetes 搭配範例。 如果您使用 Azure Kubernetes 服務並想要使用更複雜的範例應用程式,請參閱 Bridge to Kubernetes (AKS)。
先決條件
- 具有您要偵錯之應用程式的 Kubernetes 叢集。
- 在macOS、Windows 10或更新版本或Linux上執行的Visual Studio Code。
連接到您的叢集並偵錯某項服務
使用 Bridge to Kubernetes 開始偵錯程式的方式有幾種不同。 如果您是從開放原始碼 Kubernetes 擴充功能開始,但未安裝 Bridge to Kubernetes,請移至 安裝並使用本機通道偵錯。 如果您已安裝 Bridge to Kubernetes,請繼續進行下列步驟:
在您的開發電腦上,請確定您目前的連線上下文已設定到應用程式運行所在的叢集和命名空間。
開啟您想要在 Visual Studio Code 中偵錯之應用程式的工作區。 在 [叢集]下的 [Kubernetes 擴充功能] 檢視中,確定已選取您的叢集和命名空間。 開啟命令選擇區(CTRL+SHIFT+P 或 Cmd+Shift+Mac 上的 P),然後執行命令 Bridge to Kubernetes:設定 以啟動設定程式。
選擇您想要重新導向至本機版本的 Kubernetes 服務。
的服務
Kubernetes 叢集中的所有流量都會針對您的服務重新導向至開發計算機中執行的應用程式版本。 網橋至 Kubernetes 也會將應用程式的所有輸出流量路由回 Kubernetes 叢集。
重要
您只能重新導向具有單一 Pod 的服務。
選取您的服務之後,請略過下一節並繼續,請遵循 使用 Bridge to Kubernetes 設定本機通道偵錯的調試程式中的步驟,。
安裝和使用本地隧道調試
當您已安裝開放原始碼 Kubernetes 擴充功能,並擁有您想偵錯之服務的 Kubernetes 叢集時,請遵循下列步驟開始進行本地端通道偵錯。 本節中的步驟將引導您完成將 Bridge 安裝至 Kubernetes,並啟動本機通道偵錯的設定程式。
備註
適用於 VS Code 的 Kubernetes 擴充功能提供 API 入口點,允許擴充功能作者從 VS Code Marketplace 提供其他本機通道解決方案。 Bridge to Kubernetes 是本機隧道偵錯功能的一種可能實作。
有兩種方法可以開始在 VS Code 中使用本地隧道偵錯。 第一種方式是開啟命令選擇區(CTRL+SHIFT+P 或 Cmd+Shift+Mac 上的 P),並輸入 Kubernetes:Debug (Local Tunnel)。
或者導航至您的 Kubernetes 叢集瀏覽器。 開啟已啟用的叢集資源,找出您想要進行偵錯的服務或 Pod,接著在服務上按下滑鼠右鍵,然後選取 [偵錯:本機通道]。
此時,如果您沒有安裝任何提供本機偵錯功能的 VS Code 擴充功能,系統會將您重新導向至 Marketplace,以選取提供本機偵錯的擴充功能。 選取 Bridge to Kubernetes 擴充功能。
中 [偵錯本機通道] 操作選單的螢幕快照
安裝 Bridge to Kubernetes 擴充功能之後,下次選擇 [偵錯]:[本機通道]時,您將略過安裝步驟,然後直接進行下一步,配置 Bridge to Kubernetes 用於本機通道偵錯的調試器。
使用 Bridge to Kubernetes 設定本機通道偵錯的調試程式
設定本機通道偵錯調試程式的第一個步驟是,系統會提示您輸入應用程式用來在本機執行的 TCP 連接埠:
選擇您在本機執行應用程式時通常使用的偵錯啟動組態。 如果您沒有啟動組態,您可以讓 Bridge to Kubernetes 建立一個,或選擇不建立一個,在此情況下,您必須手動啟動應用程式或服務。 若要深入瞭解,請參閱 啟動組態。
您可以選擇以隔離或非隔離模式執行。 如果您以隔離模式執行,則只會將要求路由傳送至您的本地流程,而其他開發人員可以不受影響地使用叢集。 如果您未執行隔離,所有流量都會重新導向至本機程序。 如果想了解更多關於此選項的資訊,請參考 使用路由功能進行隔離開發。
選取左側 [偵錯] 圖示,然後選取新增的 Kubernetes 啟動組態,例如 透過 NPM 啟動與 Kubernetes,位於頂端。 這個啟動組態是由 Bridge to Kubernetes 建立的,前提是您選擇了該選項。
備註
系統會提示您允許 EndpointManager 以管理員身份執行並修改主機檔案。
當 VS Code 狀態列變成橙色且 Kubernetes 擴充功能顯示您已連線時,您的開發電腦就會連線。
使用 Bridge to KubernetesDebugging with Bridge to Kubernetes進行偵錯
一旦開發計算機連線,流量就會開始重新導向至您正在取代之服務的開發計算機。
備註
在後續的啟動時,系統不會提示您輸入服務名稱、埠、啟動工作,或是否要執行隔離。 這些值會儲存在 .vscode/tasks.json
中。 若要稍後變更這些設定,請開啟命令選擇區(CTRL+SHIFT+P 或 Cmd+Shift+Mac 上的 P],然後執行命令 Bridge to Kubernetes:設定。 您可以開啟 .vscode/launch.json 和 .vscode/tasks.json,以查看 Bridge to Kubernetes 新增至啟動配置檔的特定組態設定。
如果您的叢集使用 gRPC C 核心,這是一種使用 c-ares的 gRPC 實作,那麼環境變數 GRPC_DNS_RESOLVER 會被新增至您的啟動設定檔,其值為 native
。 此變數指定使用因應措施,以避免連線時發生 2 分鐘的延遲。 如需詳細資訊,請參閱此 gRPC 問題。
設定斷點
使用 F9 設定斷點,或選取 執行 ,然後選擇 切換斷點。
開啟公用 URL 以流覽至範例應用程式。 當您的程式碼到達斷點時,它應該會在偵錯工具中開啟。 要恢復服務,請按 Ctrl+F5,或選取 [執行],然後選擇 [繼續]。 返回瀏覽器,並且確認您看到自行車的佔位圖。
更新您的應用程式
當您在本機進行程式碼變更時,使用叢集的其他人是否可以看到這些變更,取決於您是否執行隔離。 如果您運行在隔離環境中,可以進行不會影響其他用戶的變更。
編輯您的程式代碼、儲存變更,然後按 Ctrl+Shift+F5 (⇧⌘F5 mac 上),或選取 [執行] [執行] 然後 [重新啟動偵錯]。 重新連線之後,請重新整理瀏覽器並驗證您的變更。
選取 [執行 然後 停止偵錯,或按 Shift+F5 停止調試程式。
備註
根據預設,停止偵錯工作也會中斷開發計算機與 Kubernetes 叢集的連線。 您可以在 Visual Studio Code 的設定中搜尋 Bridge to Kubernetes:偵錯後中斷連線,然後取消勾選 偵錯停止時自動中斷連線,來變更此行為。 更新此設定之後,當您停止或重新開始偵錯時,您的開發電腦會保持連線。 若要中斷您的開發計算機與叢集的連線,請按一下狀態列上的 Bridge to Kubernetes 擴充功能,然後選擇 中斷目前會話連線。
其他組態
Bridge to Kubernetes 可以處理路由流量和復寫環境變數,而不需要任何其他設定。 如果您需要下載任何掛接至 Kubernetes 叢集中容器的檔案,例如 ConfigMap 檔案,您可以建立 KubernetesLocalProcessConfig.yaml
將這些檔案下載到您的開發計算機。 如需詳細資訊,請參閱 設定 Bridge to Kubernetes。
如果您使用的是由 Microsoft Entra ID 提供的受控識別功能的 AKS 叢集,請參閱 使用 Bridge to Kubernetes 的受控識別,以了解如何為此情境設定 Bridge to Kubernetes 的資訊。
使用記錄和診斷
在開發計算機連線到 Kubernetes 叢集之後,會將記錄輸出寫入 Bridge 至 Kubernetes 視窗。
點選單擊 [Kubernetes 狀態列,然後選擇 [顯示連線診斷資訊。 此命令會在記錄輸出中顯示目前的環境變數和 DNS 項目。
此外,您可以在開發計算機的 TEMP 目錄中的 Bridge to Kubernetes
目錄中找到診斷記錄。 在 Windows 10 上,這是在 %TEMP%\Bridge to Kubernetes
中。 在 Mac 上,您可以從終端機視窗執行 echo $TMPDIR
來找到 TEMP 目錄。 在 Linux 上,它是 /tmp/Bridge to Kubernetes
。
以隔離模式執行
使用 Bridge to Kubernetes,您也可以設定所處理服務的隔離版本,這表示使用叢集的其他人不會受到變更的影響。 此隔離模式透過將您的要求路由到每個受影響服務的複本來完成,而對所有其他流量正常進行路由。 若要存取隔離應用程式的本機端點 URL,請以隔離模式啟動偵錯工具、開啟狀態列上的 [Kubernetes] 功能表,然後選擇端點條目。 您可以在 How Bridge to Kubernetes Works中找到路由在隔離模式中運作方式的詳細資訊。
標頭傳播
為了按照設計使用 Bridge to Kubernetes,您需要確保將 Bridge to Kubernetes 標頭從傳入請求中傳播到您的服務對叢集中其他服務所發出的任何請求。 不論語言為何,所有 HTTP 要求 API 都會提供一些特定架構的方式來執行這項操作。 例如,針對 C# 中的 .NET 程式代碼,您可以使用類似下列的程式代碼:
var request = new HttpRequestMessage();
request.RequestUri = new Uri("http://mywebapi/api/values/1");
if (this.Request.Headers.ContainsKey("kubernetes-route-as"))
{
// Propagate the dev space routing header
request.Headers.Add("kubernetes-route-as", this.Request.Headers["kubernetes-route-as"] as IEnumerable<string>);
}
var response = await client.SendAsync(request);
備註
為了避免每個請求都影響代碼,您可以建立一個繼承自 System.Net.Http.DelegatingHandler 的類別,並使用類似於上述範例的代碼覆寫 SendAsync
方法。 您可以在 Web 上使用這項技術來尋找程式代碼;其中一個範例是 將 Bridge 中的 “kubernetes-route-as” 正確傳播至 Kubernetes。
針對 Node.js 服務,您可以使用類似從 Bridge to Kubernetes 資源庫中的 todo-app 範例提取的以下程式碼:
server.get("/api/stats", function (req, res) {
var options = {
host: process.env.STATS_API_HOST,
path: '/stats',
method: 'GET'
};
const val = req.get('kubernetes-route-as');
if (val) {
console.log('Forwarding kubernetes-route-as header value - %s', val);
options.headers = {
'kubernetes-route-as': val
}
}
var req = http.request(options, function(statResponse) {
res.setHeader('Content-Type', 'application/json');
var responseString = '';
//another chunk of data has been received, so append it to `responseString`
statResponse.on('data', function (chunk) {
responseString += chunk;
});
statResponse.on('end', function () {
res.send(responseString);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.end();
});
與其他服務通訊
當您與相同 Kubernetes 叢集中的另一個服務通訊時,例如使用 HTTP 要求,您通常會在要求的 URL 中使用硬式編碼服務名稱,但在某些情況下將無法運作,例如使用遠端 SSH、WSL 和 Codespaces 時。 本文 說明如何使用 Kubernetes 服務環境變數來指定這些案例的連線 URL。
故障排除
如果您在啟用 Bridge to Kubernetes 擴充功能時收到此錯誤:
「無法更新相依性:超過重試次數上限」
首先,使用 按鈕重試啟用。 如果反覆無法成功,請參閱 https://github.com/microsoft/mindaro/issues/32。
當您在遠端 SSH 會話中使用 Bridge to Kubernetes 時,如果 EndpointManager 失敗,問題可能是 Bridge to Kubernetes 因許可權問題而無法修改主機檔案。 若要啟用遠端 SSH 或以未提升許可權的使用者身分執行,您應該更新程式碼以使用 Kubernetes 服務環境變數,並設定 VS Code 以使用它們,如 服務環境變數 主題中所述。
後續步驟
若要深入瞭解 Bridge to Kubernetes 的運作,請參閱 Bridge to Kubernetes 如何運作。
如果您需要同時偵錯多個服務,請參閱 同時偵錯多個服務。