通信地址由调用方的位置决定。应用容器、服务器和外部浏览器使用的地址并不总是相同。
同分组应用通信
同分组应用可以使用应用名称访问对方容器端口。例如,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 路由和证书。
连接拒绝通常需要检查监听端口和进程;超时还需要检查网络路径。不要把内部端口和发布端口交替尝试而忽略实际配置。