コンテンツにスキップ

トラブルシューティング / 外部ネットワークから本システムにアクセスできない

システム自体は正常に動作していますが、外部からアクセスできない場合は、そのほとんどはネットワークが原因です。

具体的には次のような症状です:

  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 / ドメイン名の名前解決が正しくない

他のデバイスから DataFlux Func が稼働しているサーバーに ping を実行し、IP とドメイン名が正しいことを確認してください。

DNS の変更や /etc/hosts の設定変更で解決できます。具体的な対応は実際のネットワーク状況に応じてください。

2. ファイアウォール、セキュリティ設定が正しくない

以下を含みますが、これらに限定されません:

  1. ファイアウォール設定が正しくない
  2. Alibaba Cloud ECS セキュリティグループの設定が正しくない
  3. リバースプロキシサーバー、Alibaba Cloud 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 の値がローカルネットワークと同じかどうかを確認します:

JSON
 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