LoginSignup
1
1

More than 5 years have passed since last update.

Istioが作るサービスメッシュ~環境構築~

Posted at

サービスメッシュとは

サービスメッシュという用語は,マイクロサービスのネットワークが構築するアプリケーションの相互作用を表します.
※ 複数のPodが相互接続しているイメージだと解釈しています.

サービスメッシュが抱える問題

サービスメッシュの規模が大きくなるにつれて,管理が難しくなる.それは,サービスディスカバリ[1],負荷分散,障害回復,ログ収集などが挙げられます.

[1]: どのサーバ上でどのようなサービス(アプリケーション)が動作しているかに加え、そのポート番号、IPアドレス、ホスト名などを見つけること

その他にも

A/Bテスト[1],カナリアリリース[2],レート制限[3]など、より複雑な運用要件も挙げられる.

[1] A/Bテスト

ホームページの一部のデザインやページそのものを複数パターン用意し,それらを不規則に表示させ,どちらがより多くクリックされたか,より多く申し込みがあったかなどを検証する行為のこと

[2] カナリアリリース

  • 新規プロダクトやサービスを本番環境の一部分にデプロイし,先に一部のユーザに提供することで新機能のフィードバッグをいち早く得ることで機能としての必要性を受け取ったうえで,全てのデプロイを行うという方法
  • 複数のノードで構成された運用サーバの一部分のノードにのみリリースを行い、デプロイされた一部のノードにてテストを実施してから、全てのノードへのデプロイを行うといった方法

[3] レート制限

ここはむしろ自分が知りたい内容でもあります.
APIのリクエスト数を制限する方法

Istioとは

これらの要件に対し,サービスメッシュ全体に関する運用管理を提供してくれます.

Istioのメリット

既存のコードを変更することなく,サービスメッシュの管理をすることができる.
※ Podの先頭にEnvoyというプロキシをサイドカーとして配置することでメッシュサービスを管理します.
※ Podからなるサービス間通信もセキュアに行ってくれる

Istioお試し

Istioのリリース版をダウンロード

curl -L https://git.io/getLatestIstio | sh -

※ この後にパスを通しますが自分の環境だとshellがぶっ壊れました.curl後に推奨されるパスを通すと上手くいきました.

minikubeの起動

minikube start --memory=8192 --cpus=4 --kubernetes-version=v1.10.0 \
    --extra-config=controller-manager.cluster-signing-cert-file="/var/lib/localkube/certs/ca.crt" \
    --extra-config=controller-manager.cluster-signing-key-file="/var/lib/localkube/certs/ca.key" \
    --vm-driver=`your_vm_driver_choice`

※ your_vm_driver_choice = virtualbox

カスタムリソースのデプロイ

# in istio-1.0.6 directory
kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml

Istioのデプロイ

# k8s定義ファイルの出力
helm template install/kubernetes/helm/istio --name istio --namespace istio-system > istio.yaml
# Namespaceの作成
kubectl create namespace istio-system
# デプロイ
kubectl apply -f istio.yaml

インジェクションの確認

# サンプルアプリのデプロイ
kubectl apply -f samples/sleep/sleep.yaml
# Podの確認
kubectl get pods
# まだ, Pod内のコンテナは一つ・・・
NAME                     READY   STATUS    RESTARTS   AGE
sleep-79cc87b6b9-cjgbk   1/1     Running   0          4m

※ ここで何故かminikubeだと,Podが生成されなかったため,Docker for Desctopにて,kubernetesを起動しました.

サイドカーインジェクションを名前空間単位で有効にする

# ラベリング
kubectl label namespace default istio-injection=enabled
# 確認
kubectl get namespace -L istio-injection

インジェクションが有効になっているか確認

# Podを一度消去
kubectl delete pod ポッド名
# 無事にできていそう!
NAME                     READY   STATUS    RESTARTS   AGE
sleep-79cc87b6b9-gwxz9   2/2     Running   0          38s

まとめ

今回は,サービスメッシュが抱える問題とlstioのアプローチそして,lstioの環境構築を行いました.
次は,公式の例を元にlstioをガシガシ使ってみたいと思います!

参照

1
1
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
1
1