Contents
DockerコンテナベースのEnvoy起動スクリプト構築
Dockerイメージを構築する際には、環境変数による柔軟な設定が重要です。このセクションでは、安定性と再現性に配慮した具体的な手順を取り上げます。
Dockerfile作成時の注意点
latestタグの使用はバージョン管理リスクを伴うため、具体的なバージョンを指定することが推奨されます。以下のテンプレート形式でDockerfileを作成します:
|
1 2 3 4 5 6 7 8 9 |
FROM envoyproxy/envoy:v1.23.0 # 環境変数を定義 ARG ENVOY_GRPC_ADDRESS="0.0.0.0:8000" ENV ENVOY_GRPC_ADDRESS=${ENVOY_GRPC_ADDRESS} COPY config.yaml /etc/envoy/ CMD ["envoy", "--configPath=/etc/envoy/config.yaml"] |
注意:
ENVOY_GRPC_ADDRESSの値は、クラスター内でのgRPCエンドポイントに応じて変更する必要があります。タグ指定によるバージョン固定化により、不具合回避やアップグレード時の差分管理が可能になります。
環境変数の定義方法
Dockerイメージをビルドする際には、以下のように環境変数を指定します:
|
1 2 |
docker build --build-arg ENVOY_GRPC_ADDRESS="10.0.0.1:8000" -t my-envoy . |
これにより、起動時のgRPC接続先がカスタマイズ可能です。具体的なバージョン指定は、latestタグ使用に伴うリスクを最小限に抑えるために重要です。
xDS API(gRPC)による動的構成設定
EnvoyはxDS API経由で動的に構成を更新します。以下に手順を解説します。
gRPCエンドポイントの接続手順
- gRPCサーバー構築: Kubernetes API Serverや独自の管理サーバーを使用
- 認証設定: mTLSでの通信を確立(証明書をMount)
- xDSリソース配布: LDS(Listener Discovery Service)、CDS(Cluster Discovery Service)などに応じて構成を配信
例として、
LDSでは以下のようにgRPC呼び出しが発生します:
|
1 2 |
POST /v3/listeners?version=2026-06-18 |
サービスディスカバリーの仕組み
Kubernetes内のService/Pod情報は、Kubernetes API Clientライブラリ経由で取得できます。以下が一般的なフローです:
| ステップ | 内容 |
|---|---|
| 1 | EnvoyにKubernetes API Serverのエンドポイントを指定 |
| 2 | kubectl get servicesなどで情報を取得(動的更新) |
| 3 | 獲得したデータをxDSリソース形式で構築し配布 |
KubernetesリソースとEnvoy設定の連携
Kubernetesリソース情報とEnvoy設定の同期は、自動化ツールやスクリプトによって実現します。
Service/Pod情報の取得方法
以下のような手順で情報を取得し、動的に構成ファイルを生成します:
kubectl get services -o jsonpathでServiceメタデータを抽出- Go言語/PythonなどでJSONをパースし、xDSリソースに変換
- 結果をEnvoyに送信(gRPC経由)
例として、以下のようなスクリプトが考えられます:
|
1 2 3 4 5 6 7 |
import kubernetes.client as kc config = kc.Configuration() api_client = kc.ApiClient(config) services = api_client.call_api('/apis/core/v1/namespaces/default/services', 'GET') |
動的な構成更新フロー
以下のフローでEnvoy設定を即時反映できます:
- Kubernetesリソースが変更されたことをWatchで検出
- 変更情報をxDSリソースに変換
- gRPC経由でEnvoyに配布(再起動不要)
初期設定時のセキュリティベストプラクティス
セキュリティ対策は、初期設定時に徹底することが重要です。
認証情報の管理方法
- gRPC通信: TLSで暗号化し、mTLSによる相互認証を実施(
--tls-cert-path,--tls-key-path指定) - Kubernetes Secret: API Serverへの接続に必要な証明書はSecretで管理し、PodへMount
mTLSの実装手順
- 証明書生成:CA証明書と証明書ペアを生成(例: OpenSSL)
- Kubernetes Secret作成: 証明書をBase64エンコードしてSecretに登録
- PodのMount設定: Envoyコンテナ内に証明書をマウント
|
1 2 |
kubectl create secret generic envoy-tls --from-file=tls.crt=server.crt --from-file=tls.key=server.key |
証明書管理手順の詳細化
xDS APIとの通信に必要な証明書は、以下のようにKubernetes SecretとPod Mountで管理します:
| 手順 | 内容 |
|---|---|
| 1 | 証明書をBase64エンコードしSecretを作成(kubectl create secret generic ...) |
| 2 | Podのspec.volumesにSecretをマウント |
| 3 | Envoy起動オプションで証明書パスを指定(--tls-cert-path, --tls-key-path) |
結論
本記事では、Envoy Proxy 初期設定 手順に沿って、Kubernetes環境での導入フローを解説しました。要点を以下にまとめます:
- Dockerコンテナの構築: 具体的なバージョン指定で安定性と再現性確保
- xDS APIの活用: gRPC経由で動的な構成更新が可能(POSTメソッド使用)
- Kubernetesリソース連携: Service/Pod情報を自動取得してEnvoyに配布
- セキュリティ対策: TLSによるgRPC通信、mTLSの実装、NetworkPolicyでのアクセス制御
実際にKubernetesクラスターで検証しながら手順を確認してください。導入時のトラブルシューティングについてはコメント欄でお気軽にご相談ください。