跳轉至

故障排查 / 外網無法訪問本系統

系統本身已經正常運行,但外部無法訪問時,大多是網絡原因。

具體表現為:

  1. 在部署服務器本機使用 curl -i http://127.0.0.1:8088 返回 302 跳轉信息:
HTTP
1
2
3
4
5
6
7
8
9
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
  1. 在部署服務器本機使用 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}
  1. 在其他設備上使用 curl -i http://{服務器地址}:8088 無響應,或直接返回拒絕連接

發生此類問題,大多數是網絡問題,與 DataFlux Func 本身無關。

以下內容僅為部分可能的解決方案的記錄。

1. IP / 域名解析不正確

嘗試在其他設備上 ping DataFlux Func 所在的服務器,確認 IP、域名是否正確。

可以通過修改 DNS、修改 /etc/hosts 配置方式解決,具體以實際網絡情況為準。

2. 防火牆、安全配置不正確

包括且不限於:

  1. 防火牆配置不正確
  2. 阿里雲 ECS 安全組配置不正確
  3. 反向代理服務器、阿里雲 SLB 配置不正確

首先,先檢查當前部署開放的端口:

Bash
1
grep '8088' {安裝目錄}/docker-stack.yaml

返回內容為:

Text Only
1
- "{開放端口}:8088"

{開放端口}默認為 8088

檢查並修改網絡環境,允許外部訪問服務器的端口

3. 本地網絡與自動創建的 ingress 子網衝突

可以使用以下命令檢查:

Bash
1
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"
                }
            ]
        },
    },
    ...
]

如果重複,可以通過以下方式修改:

  1. 停止 DataFlux Func
  2. 刪除先有網絡:sudo docker network rm ingress
  3. 重建網絡:docker network create --driver overlay --ingress --subnet 10.255.0.0/16 --gateway 10.255.0.1 ingress
  4. 啓動 DataFlux Func

  5. 參考文檔:Docker Swarm 默認地址池

  6. 參考文檔:Docker ingress 網絡自定義配置

4. 缺少內核轉發配置

此問題在 CentOS 系統中發現過,但大多數情況下沒有遇到過。

可以通過以下方式確認轉發配置

Bash
1
cat /proc/sys/net/ipv4/ip_forward
  1. 上述命令返回 1 表示已經打開轉發
  2. 否則,可以使用如下方式打開轉發配置
Bash
1
echo 1 > /proc/sys/net/ipv4/ip_forward