通信地址由呼叫方的位置決定。應用程式容器、伺服器和外部瀏覽器使用的地址並不總是相同。
同分組應用程式通信
同分組應用程式可以使用應用程式名稱存取對方容器連接埠。例如,frontend 呼叫同分組的 backend:
http://backend:8080資料庫連接也使用資料庫應用程式名稱和資料庫容器連接埠。容器內 localhost 指向當前容器自身,不能指向同分組的另一個應用程式。
預設組內通信能力不意味著任意不同分組的應用程式都能使用相同內部地址互通。跨分組存取應使用你明確設定並允許存取的入口。
發佈連接埠
建立或編輯應用程式,在連接埠發佈中設定:
| 字段 | 含義 | 示例 |
|---|---|---|
| 協議 | 按應用程式選擇 TCP 或 UDP | TCP |
| 容器連接埠 | 進程實際監聽連接埠 | 80 |
| 發佈連接埠 | 外部用戶端存取連接埠 | 8080 |
示例中用戶端存取 http://SERVER_IP:8080,應用程式仍在容器內監聽 80。防火牆和雲安全組應放行 8080,而不是因為容器使用 80 就只放行 80。
發佈連接埠與伺服器本地服務或其他應用程式發生衝突時,選擇可用連接埠並更新用戶端設定。UDP 服務不能僅用 HTTP 請求判斷是否工作。
應用程式需要正確監聽
應用程式一般需要監聽容器可達地址,例如 0.0.0.0,而不是只監聽容器內的 127.0.0.1。具體參數由應用程式自身決定。
如果進程只接受本地回環連接,即使連接埠映射正確,也可能無法從入口或其他容器存取它。
與網域路由的關係
Pingress 直接使用路由中填寫的容器目標連接埠。已有網域入口時,無需為了 Pingress 再公開同一個應用程式連接埠。
只供內部呼叫的資料庫優先保留組內入口。對外發佈前應明確認證、允許存取的用戶端和網路邊界。
驗證順序
- 從應用程式日誌確認進程監聽地址與連接埠。
- 核對呼叫方是否與目標應用程式處於同一分組。
- 對外存取時檢查發佈連接埠、協議和防火牆。
- 使用網域時再檢查 DNS、Pingress 路由和憑證。
連接拒絕通常需要檢查監聽連接埠和進程;超時還需要檢查網路路徑。不要把內部連接埠和發佈連接埠交替嘗試而忽略實際設定。