故障排查 / 外网无法访问本系统
系统本身已经正常运行,但外部无法访问时,大多是网络原因。
具体表现为:
- 在部署服务器本机使用
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 | [
{
"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
|