Kumaで学ぶサービスメッシュ-導入編

2020年度新入社員の野口です。
今回、CNDT2020での、サービスメッシュKumaのデモ環境の構築について担当させていただいたため、ここにその手順とポイントを残しておきます。
登壇については以下の記事をご参照ください。
 

サービスメッシュとは

サービスメッシュとは、マイクロサービスを開発する上で問題となるネットワークの複雑さを、サービスからネットワークを切り離すことで解決する考え方、及びそれを実現するソフトウェアのことを指します。
詳しくは以下の記事で解説しておりますので、参考にしていただけると幸いです。

[CNDT2020]サービスメッシュって何?

サービスメッシュを実現するソフトウェアとして最も有名なものはIstioLinkerdなどがありますが、今回は比較的機能が少なく分かり易いKong社が提供するKumaを題材にサービスメッシュを構築していきます。
 

Kumaのアーキテクチャ

Kumaはkuma-cp(Control-Plane)とkuma-dp(Data-Plane)の二つのアーキテクチャによって構成されます。

  • kuma-cp

kuma-dpを管理・監視し、サービスメッシュ(Mesh)を構成する、Kumaの中枢です。開発者はKubernetes CRDsまたは、RESTful APIを用いてサービスメッシュを制御することができます。複数のkuma-cpを協調させ、複数のクラスターにまたがるZoneを展開することもできます。

  • kuma-dp
サービスそれに紐づいたプロキシを指します。KumaではプロキシにはEnvoyProxyを使っていますが、kuma-dpにバンドルされているため、開発者はEnvoyProxyを理解せずにData-Planeを展開することができます。また、Kubernetesモードではプロキシの挿入も自動で行われるため、開発者はそれらも意識する必要がなくなります。

Kumaの導入

 

環境

今回はAzure Kubernetes Service上にサービスメッシュのデモ環境を構築していきます。
また、Kubernetesについて多少の知識がある方を対象にしています。

AKS / kubectl

AzureCLI

AzureCLIをインストールします。使用されているOSによって、以下に従ってインストールしてください。

Azure Kubernetes Service / kubectl

Azureで以下のようにAzure Kubernetes Serviceリソースを立ち上げてください。

次に、AzureCLIを用いて`kubectl`コマンドを扱えるようにします。
az aks install-cli

`kubectl`を使ってKubernetesクラスターを扱うため、資格情報をダウンロードします。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

`kubectl`を使ってKubernetesクラスターが立ち上がっているか確認をします。

kubectl get nodes

 

Kuma

AKS上にKong社が提供するサービスメッシュKumaをインストールしていきます。

kumactl

Kumaを扱うため`kumactl`をダウンロードします。
curl -L https://kuma.io/installer.sh | sh -

現時点での最新バージョンは`0.7.2`です。

パスが通っているディレクトリに`kumactl`を移しておくことをお勧めします。以下のようにリンクを張っても構いません。
ln -s ($pwd)/kuma-0.7.2/bin/kumactl /usr/local/bin/kumactl

 

kuma-cp

AKSにKumaの`kuma-cp`をインストールします。
kumactl install control-plane | kubectl apply -f -

KumaでWebブラウザを通してダッシュボードを閲覧することができます。以下のコマンドで、`kuma-cp`をポートフォワードしてください。127.0.0.1:5681/guiへアクセスし、DataPlanesが一つもないことを確認してください。

kubectl port-forward svc/kuma-control-plane -n kuma-system 5681:5681

Meshの構築

デモ用のアプリケーションを立ち上げます。
`kubectl`を使って、名前空間`kuma-demo`にアプリケーションを立ち上げます。
これは、k8sを用いた一般的なアプリケーションで、通常通りServiceとDeploymentが定義されています。

kubectl apply -f https://bit.ly/demokuma

Kumaのダッシュボードか、以下を使ってDataplaneが立ち上がっていることを確認してください。

kubectl get dataplanes -n kuma-demo

立ち上がったウェブアプリケーションは127.0.0.1:8080で確認できます。

kubectl port-forward svc/frontend -n kuma-demo 8080:8080

 

この際重要な部分は、名前空間`kuma-demo`を宣言する際、`annotations`で`kuma.io/sidecar-injection`が有効になっていることです。
これにより、KumaはすべてのDeploymentに対して、自動的にサイドカープロキシ(Envoy)を挿入し`kuma-dp`を構成します。

apiVersion: v1
kind: Namespace
metadata:
  name: kuma-demo
  namespace: kuma-demo
  annotations:
    kuma.io/sidecar-injection: enabled

おわりに

今回は、Kumaを使って実際にサービスメッシュを構成する部分まで行いました。次回以降、サービスメッシュの肝である監視や管理の部分について行っていきたいと思いますので、お付き合いいただけると幸いです。

では、また。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です