2020年10月28日水曜日

envoy 超入門

概要

モダンプロキシサーバの envoy を試してみました
イメージとしては nginx や HAProxy などの代替になるツールという印象です
とりあえずデモにあるプロキシを経由するとすべてのアクセスが特定のサイトのコンテンツを表示するサンプルを試してみました

環境

  • macOS 10.15.7
  • envoy 1.16.0

インストール

Mac の場合は Homebrew でインストールすることが可能です

  • brew install envoy

--version オプションでバージョンが確認できます

  • envoy --version

Getting Started

とりあえず試してみましょう
まずは起動します

  • wget https://www.envoyproxy.io/docs/envoy/latest/_downloads/f6e613dcd48bb592b753313e7cfb1b28/envoy-demo.yaml
  • envoy -c envoy-demo.yaml

localhost:10000 で envoy が起動しています

  • curl localhost:10000

アクセスすると www.envoyproxy.io の画面が表示されると思います
これは envoy-demo.yaml を見るとわかりますがすべてのアクセスを www.envoyproxy.io に流すように定義されているためです

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
      http_filters:
      - name: envoy.filters.http.router
      route_config:
        name: local_route
        virtual_hosts:
        - name: local_service
          domains: ["*"]
          routes:
          - match:
              prefix: "/"
            route:
              host_rewrite_literal: www.envoyproxy.io
              cluster: service_envoyproxy_io

例えば localhost:10000/try にアクセスすると www.envoyproxy.io/try のページが表示されます

管理画面にアクセスする

また localhost:9901 で管理画面が起動しているのでブラウザでアクセスしてみましょう

こんな感じで envoy の各種設定や動作しているホストの情報を確認することができます

管理画面にアクセスできる定義も envoy-demo.yaml 内で定義されています

admin:
  access_log_path: /dev/null
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 9901

最後に

macOS 上で envoy をとりあえず動かしてみました
k8s 上でサービスメッシュを実現するというコンテキストで使われることが多いようですが単体でも動作することが確認できました

設定ファイルを YAML で定義してプロキシへのアクセスをすべて特定のサイトに移動するようなデモを試してみました
nginx でも同じようなことができるのでイメージしやすいデモだったかなと思います

今回はルーティングルールを静的に記載しましたが envoy はこれを動的に行うこともできるようです (参考: Examples Dynamic)

参考サイト

0 件のコメント:

コメントを投稿