サービスメッシュとは
サービスメッシュという用語は,マイクロサービスのネットワークが構築するアプリケーションの相互作用を表します.
※ 複数のPodが相互接続しているイメージだと解釈しています.
サービスメッシュが抱える問題
サービスメッシュの規模が大きくなるにつれて,管理が難しくなる.それは,サービスディスカバリ1,負荷分散,障害回復,ログ収集などが挙げられます.
その他にも
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をガシガシ使ってみたいと思います!