故障排查 / 外網無法訪問本系統
系統本身已經正常執行,但外部無法訪問時,大多是網路原因。
具體表現為:
- 在部署伺服器本機使用
curl -i http://127.0.0.1:8088
返回 302
跳轉資訊:
HTTP |
---|
| HTTP/1.1 302 Found
Location: /client-app
Vary: Accept
Content-Type: text/plain; charset=utf-8
Content-Length: 33
Date: Wed, 25 Aug 2021 14:23:02 GMT
Connection: keep-alive
Found. Redirecting to /client-app
|
- 在部署伺服器本機使用
curl http://127.0.0.1:8088/api/v1/do/ping
返回 200
正常資料:
HTTP |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | HTTP/1.1 200 OK
Vary: Origin, Accept-Encoding
Access-Control-Allow-Credentials: true
X-Trace-Id: TRACE-D2B2A855-3C28-4566-8EC5-5A2EDD85856C
X-Request-Time: 2021-08-25T14:24:00.239Z
X-Response-Time: 2021-08-25T14:24:00.241Z
X-Request-Cost: 2
Content-Type: application/json; charset=utf-8
Content-Length: 192
ETag: W/"c0-Wb2YFtp16lA4mB7Xh7SpYumGNog"
Date: Wed, 25 Aug 2021 14:24:00 GMT
Connection: keep-alive
{"ok":true,"error":200,"message":"","data":"pong","traceId":"TRACE-D2B2A855-3C28-4566-8EC5-5A2EDD85856C","reqTime":"2021-08-25T14:24:00.239Z","respTime":"2021-08-25T14:24:00.241Z","reqCost":2}
|
- 在其他裝置上使用
curl -i http://{伺服器地址}:8088
無響應,或直接返回拒絕連線
發生此類問題,大多數是網路問題,與 DataFlux Func 本身無關。
以下內容僅為部分可能的解決方案的記錄。
1. IP / 域名解析不正確
嘗試在其他裝置上 ping
DataFlux Func 所在的伺服器,確認 IP、域名是否正確。
可以透過修改 DNS、修改 /etc/hosts
配置方式解決,具體以實際網路情況為準。
2. 防火牆、安全配置不正確
包括且不限於:
- 防火牆配置不正確
- 阿里雲 ECS 安全組配置不正確
- 反向代理伺服器、阿里雲 SLB 配置不正確
首先,先檢查當前部署開放的埠:
Bash |
---|
| grep '8088' {安裝目錄}/docker-stack.yaml
|
返回內容為:
檢查並修改網路環境,允許外部訪問伺服器的埠
3. 本地網路與自動建立的 ingress 子網衝突
可以使用以下命令檢查:
Bash |
---|
| sudo docker network inspect ingress
|
檢視 IPAM.Config.Subnet
值是否與本地網路相同:
JavaScript |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | [
{
"Name": "ingress",
"Id": "adinmn5ww9q3vqo0wbse2jn1s",
"Created": "2021-08-21T07:46:47.534343555Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.0.0/16",
"Gateway": "10.0.0.1"
}
]
},
},
...
]
|
如果重複,可以透過以下方式修改:
- 停止 DataFlux Func
- 刪除先有網路:
sudo docker network rm ingress
- 重建網路:
docker network create --driver overlay --ingress --subnet 10.255.0.0/16 --gateway 10.255.0.1 ingress
-
啟動 DataFlux Func
-
參考文件:Docker Swarm 預設地址池
- 參考文件:Docker ingress 網路自定義配置
4. 缺少核心轉發配置
此問題在 CentOS 系統中發現過,但大多數情況下沒有遇到過。
可以透過以下方式確認轉發配置
Bash |
---|
| cat /proc/sys/net/ipv4/ip_forward
|
- 上述命令返回
1
表示已經開啟轉發
- 否則,可以使用如下方式開啟轉發配置
Bash |
---|
| echo 1 > /proc/sys/net/ipv4/ip_forward
|