[小ネタ] ECS Service Connect のクライアントで nginx を使う際の注意点

[小ネタ] ECS Service Connect のクライアントで nginx を使う際の注意点

ECS Service Connect で Nginx リバースプロキシを使用する場合は、/etc/hosts を参照する設定にする必要があります
Clock Icon2024.08.19

アノテーション・テクニカルサポートチームの hato です。

ECS Service Connect を利用した次の構成で、
「コンテナ1」の nginx が「コンテナ2」に通信できない事象を調査する機会がありましたので、小ネタとしてご紹介します。

※画像内の④の通信が名前解決エラーになる

Amazon ECS Service Connect Traffic Flow 2

※nginx のエラーログは502 Bad GatewayHost not found

2024/08/01 01:02:03 [error] 133#133: *2 hato-service-connect.local could not be resolved (3: Host not found), client: 203.0.113.1, server: localhost, request: "GET / HTTP/1.1", host: "203.0.113.2:8080"

原因

nginx で/etc/hostsを参照しない設定内容になっていたためでした。

2024年8月時点の挙動として ECS Service Connect ではコンテナ内の/etc/hostsを利用しています。
一方で nginx ではproxy_passで変数を利用している場合、/etc/hostsは参照せずresolverで指定した DNS サーバで名前解決を試みます。

# nginx.conf の例
set $backend hato-service-connect.local;
resolver 169.254.169.253 valid=5s;
location / {
  proxy_pass http://$backend;
}

DNS サーバは、ECS Service Connect で利用するエンドポイントの名前解決ができないためHost not foundとなります。

どう対応する?

変数に格納せず値を直接proxy_passで指定します。
直接指定している場合は、/etc/hostsも参照する挙動のため名前解決が成功します。

# nginx.conf の例
location / {
  proxy_pass http://hato-service-connect.local;
}

なお、変数を経由して指定するのは名前解決結果(IP アドレス)の変動に備えたワークアラウンドと思いますが、IP アドレスは127.255.0.1固定でした。
Service Connect Agent の部分で振り分けを行っているため、IP アドレスの変動はそこで吸収されている模様です。

また、426 Upgrade Requiredが発生する場合はproxy_http_version 1.1;も追加してください。

# nginx.conf の例
location / {
  proxy_http_version 1.1;
  proxy_pass http://hato-service-connect.local;
}

参考資料

ちなみに、仕組みとしては/etc/hostsにDNSを書き込んで実現しているようです。

Parameter value can contain variables. In this case, if an address is specified as a domain name, the name is searched among the described server groups, and, if not found, is determined using a resolver.

Service Connect では、次に示すの機能はサポートされていません。

  • Windows コンテナ
  • HTTP 1.0

Sets the HTTP protocol version for proxying. By default, version 1.0 is used. Version 1.1 is recommended for use with keepalive connections and NTLM authentication.

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイト をぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.