跳转至

故障排查 / 外网无法访问本系统

系统本身已经正常运行,但外部无法访问时,大多是网络原因。

具体表现为:

  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
[
    {
        "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