Envoy Proxyの導入意義とDocker環境でのメリット
マイクロサービスアーキテクチャにおいて、Envoy Proxyはネットワーク通信を安定させ、柔軟な制御を行うための重要なツールです。 特にDockerで構築するテスト環境では、軽量で再現性の高い設定が可能になるため、開発初期段階からの導入がおすすめです。本記事では、DevOpsエンジニア向けに「Envoy proxy 設定 方法 入門」をキーワードに、Dockerコンテナ環境における最小限な構成からステップバイステップで解説します。具体的な手順や設定ファイルの記述例を踏まえ、実装に即した情報を提供します。
DockerでのEnvoy導入手順と基本構成
導入目的と学習フロー
DevOpsエンジニアがDocker環境でEnvoy Proxyを導入する際には、以下のような流れで進めることを推奨します:
- Docker Composeファイルによる起動準備
- YAML設定ファイルの構築(リスナー・クラスター定義)
- 特定機能の追加(ロードバランシング・健康チェック)
以下に具体的な手順をステップバイステップで解説します。
Docker ComposeによるEnvoy起動
1. Docker Composeファイルの作成と確認
下記のようなdocker-compose.ymlを作成し、Envoyとバックエンドサービス(例: Nginx)を同時に起動させます。この設定ではポートマッピングやボリューム接続を明示的に定義しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
version: '3.8' services: envoy: image: envoyproxy/envoy-dev:latest ports: - "10000:10000" - "9901:9901" # 管理インターフェースのポートを明示 volumes: - ./envoy.yaml:/etc/envoy/envoy.yaml command: /usr/local/bin/envoy -c /etc/envoy/envoy.yaml --configPath /etc/envoy backend: image: nginx:latest ports: - "8080:80" |
注意: 管理インターフェースのポート(
9901)はEnvoyデフォルトの9901を基準とし、環境に応じて変更可能です。
2. Docker Compose起動コマンド
以下を実行してコンテナを立ち上げます。
|
1 2 |
docker-compose up -d |
YAML設定ファイルの基本構造と手順
EnvoyはYAML形式の設定ファイルを使用します。主に以下3つのセクションで構成されます:リスナー、クラスター、ルーティング。
1. リスナーの定義(HTTPリクエスト受信)
envoy.yamlに以下の記述を追加してください。これによりポート10000でHTTPリクエストを受け付けるリスナーが作成されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
static_resources: listeners: - name: listener_0 address: socket_address: address: 0.0.0.0 port_value: 10000 filter_chains: - filters: - name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress_http route_config: name: local_route virtual_hosts: - name: backend domains: ["*"] routes: - match: prefix: "/" route: cluster: backend_service |
2. クラスターの定義(バックエンド接続)
以下をstatic_resourcesセクションに追加します。これにより、ローカルで実行されているNginxサービスにリクエストがルーティングされます。
|
1 2 3 4 5 6 7 8 9 10 11 |
clusters: - name: backend_service connect_timeout: 0.25s type: LOGICAL_DNS lb_policy: ROUND_ROBIN http2_protocol_options: {} hosts: - socket_address: address: backend port_value: 80 |
ロードバランシングの実装と設定比較
| 項目 | 設定内容 | 補足 |
|---|---|---|
| lb_policy | ROUND_ROBIN |
リクエストを均等に分散。バックエンドが多数いる場合におすすめ |
| 最小接続数方式 | LEAST_REQUEST |
接続中のリソース負荷を考慮する方式(追加記述が必要) |
| 直列処理 | DEDICATED_PER_CLUSTER |
プロキシが特定のクラスターにのみ接続する設定 |
手順: ロードバランシングを有効にするには、上記の
lb_policyを適切な値に変更してください。必要に応じてリトライポリシー(retry_on: "5xx"など)も併せて追加できます。
健康チェックとフェイルオーバー設定
1. 健康チェックの有効化手順
Envoyでは、health_checkセクションに以下の記述を追加することで定期的なステータス確認が可能です。この例では10秒ごとに健康状態を監視します。
|
1 2 3 |
health_check: interval: 10s |
2. 異常時処理の検証方法
以下のようにcurlコマンドでステータスを確認できます。応答が不完全な場合、Envoyは自動的にフェイルオーバーを実施します。
|
1 2 |
curl -X GET http://localhost:9901/health_check/cluster/backend_service |
ログ出力設定とトラブルシューティング
1. アクセスログの有効化
以下のようにaccess_logを記述し、stdoutにアクセスログが出力されるようにします。
|
1 2 3 4 5 6 |
access_log: name: envoy.access_logs typed_config: "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog path: /dev/stdout |
2. リアルタイムログ確認方法
Dockerコンテナ内で動作するEnvoyのログは、以下のコマンドで取得可能です。
|
1 2 |
docker logs -f envoy |
まとめと参考設定一覧
| 設定項目 | 値例 | 解説 |
|---|---|---|
| 管理インターフェースポート | 9901 |
よく使われるデフォルト値。必要に応じて変更可能 |
| リスナーのポート | 10000 |
プロキシで使用する外部接続用ポート |
| バックエンドポート | 80 |
Nginxなどのサービスが動いている内部ポート |
今後のステップと参考情報
本記事ではEnvoy Proxyの基本的な構成から導入までを解説しました。次に進む場合は、以下のようなトピックに挑戦してください:
- TLS証明書の設定(HTTPS通信)
- Rate Limiting機能の実装例
- Envoy Admin APIによるリアルタイム制御
これらの内容は、DevOpsエンジニアが生産環境での運用を効率化するために重要な知識です。記事を参考に試行錯誤しながら習得してください。---