14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

日立グループ OSSAdvent Calendar 2021

Day 12

サービスメッシュ Kuma の サンプルを Docker Compose で動かす

Last updated at Posted at 2021-12-11

日立グループ OSS Advent Calendar 2021 の 12 日目の記事です。

今回は OSS サービスメッシュである Kuma の Docker Compose サンプルを動作させ、Kuma の簡単な動作を説明していきます。

Kuma のサンプル

Kuma の Docker Compose は GitHub リポジトリtools/e2e/examples/docker-compose にあります。ファイル構成は下記のようになっています。

docker-compose
├── README.md
├── backend.yaml
├── certs 
    ├── ...
├── docker-compose.yaml
├── kuma-example-installer.sh
└── policies
    ├── everyone-to-everyone.traffic-permission.yaml
    ├── mtls.yaml
    ├── no-mtls.yaml
    └── web-to-backend.traffic-route.yaml

使用するイメージの設定

Docker Compose の起動前に、利用するイメージを設定します。公開されているサンプルでは、ローカルでビルドしたイメージを利用するように設定されています。下記の環境変数を設定することで、Docker Hub に登録されている Kuma のイメージを利用するように変更できます。

export KUMACTL_DOCKER_IMAGE=kumahq/kumactl:1.4.0
export KUMA_CP_DOCKER_IMAGE=kumahq/kuma-cp:1.4.0
export KUMA_DP_DOCKER_IMAGE=kumahq/kuma-dp:1.4.0

上記の環境変数を設定後に Docker Compose を起動すると、アプリケーションが立ち上がります。

サンプルの構成

サンプルの構成は下記の通りです。

kuma-example-arch.jpg

  • kuma-control-plane

    Kuma の Control Plane が動作するコンテナです。ブラウザからhttp://localhost:5681で Web コンソールにアクセスできます。

  • kuma-example-web, kuma-example-backend-v1/v2

    kuma-example-webkuma-example-backend-v1, kuma-example-backend-v2の 2 つのアプリケーションへリクエストをプロキシします。webからbackendへの通信はロードバランスされているため、アクセスごとに{"version":"v1"}, {"version":"v2"}のどちらかが表示されます。

  • kuma-example-client, kuma-example-app

    kuma-example-clientkuma-example-appへリクエストをプロキシします。

  • kumactl

    Control Plane への設定変更を行うためのコンテナです。policiesディレクトリが/kuma-example/policiesにマウントされています。

Docker Compose での Sidecar Container

上記の構成図では表れていませんが、各アプリケーションはkuma-example-xxx,kuma-example-xxx-namespace,kuma-example-xxx-sidecarという 3 つのコンテナで構成されています。下の図はkuma-example-appの例です。

docker-compose-sidecar.jpg

docker-compose.yamlの中身を見ると、network_mode: service:kuma-example-xxx-namespaceという表記があり、これにより各コンテナがkuma-example-xxx-namespaceコンテナとネットワークを共有するようになります。同一のネットワークになるため、アプリケーションとサイドカー間は localhost でアクセスできるようになっています。

Web コンソールへのアクセス

ブラウザからhttp://localhost:5681/gui/で Kuma の Web コンソールにアクセスできます。

kuma-web-console.jpg

Kuma の Web コンソールは基本的に Readonly なので、設定などはkumactlコマンドで行います。

Traffic Route の設定

最後に用意されているポリシーを適用して、プロキシの動作が変わることを確認します。まずはkuma-example-webから http://localhost:6060 へリクエストを実行します。

$ docker-compose exec kuma-example-web curl http://localhost:6060
{"version":"v2"} // または {"version":"v1"} 

kuma-example-webからバックエンドへのリクエストはロードバランスされているため、何度かリクエストを実行すると{"version":"v2"}または{"version":"v1"}と出力されることが確認できます。

ここにpolicies/web-to-backend.traffic-route.yamlファイルを適用して、TrafficRoute を設定します。web-to-backend.traffic-route.yamlには下記のように、100 %のリクエストが v2 のアプリケーションにプロキシされる設定が記載されています。

web-to-backend.traffic-route.yaml
type: TrafficRoute
...
conf:
  split:
  - weight: 0
    destination:
      kuma.io/service: kuma-example-backend
      version: v1
  - weight: 100
    destination:
      kuma.io/service: kuma-example-backend
      version: v2

下記のコマンドを実行し、TrafficRoute のポリシーを適用します。

$ docker-compose exec kumactl kumactl apply -f /kuma-example/policies/web-to-backend.traffic-route.yaml

ポリシー適用後にリクエストを何度か実行すると、{"version":"v2"}のみが出力されることが確認できます。

$ docker-compose exec kuma-example-web curl http://localhost:6060
{"version":"v2"}  

まとめ

OSS のサービスメッシュである Kuma は Kubernetes 環境だけでなく、VM や Docker Compose の環境でもサービスメッシュを構築できます。また今回は TrafficRoute の設定のみを試しましたが、ほかに提供されている様々なポリシーもこの環境で試すことができます。

14
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?