Linkerd 2.0がリリースされたみたいですね。
1.0と比べてより軽量かつ高速になったそうです。
またmTLSもサポートということでIstio(※後述)と機能的に似てきました。
(さてさて、今後どちらがメジャーになっていくのか・・・)
この記事ではプロキシ環境下でのインストール時のメモと使ってみた所感について書きます。
Linkerdとは?
Cloud Native Computing Foundation(CNCF)のプロジェクトの一つでサービスメッシュ技術です。
マイクロサービスアーキテクチャを採用する際にはなくてはならない技術ではないのかなと個人的に思っています。
サービスメッシュとは?
マイクロサービスアーキテクチャにおいて問題となる点を解決するための技術です。
例えば自分がつなげたいサービスはどこにあるのか(サービスディスカバリー)や、複数あった場合のロードバランシング、アクセス過多になった場合シャットアウトする(サーキットブレーカー)ようなことをします。
※この記事ではサービスメッシュの詳細には踏み込まないので、詳しくは参考サイトをご覧ください。
参考サイト
- https://qiita.com/rerorero/items/0eea0e02955950dd85fc
- https://qiita.com/hirofumimatsu/items/5f8193c2c4a10c509466
類似ツール(Istio)
似たようなツールとしてIstioというものがあります。
下のほうにIstioとの比較表も書いてみました。
単純に言うとIstioはLinkerdより高機能だが複雑で大変、UIが現状ないって感じです。
インストール
公式ページ(https://linkerd.io/2/getting-started/)を参考にインストールしていきます。
- linkerdのcliをインストール
curl -sL https://run.linkerd.io/install | sh
export PATH=$PATH:$HOME/.linkerd2/bin
linkerd version
- linkerd cliを使ってcontrol planeを作成
linkerd install
コマンドでkubernetesにデプロイするためのyamlを作成するのですが、公式ページのインストール方法はkubernetesのlocal proxyを使う(kubectl proxyみたいな感じ)のでProxy環境下ではそのまま使えません。
そこでkubernetesにデプロイするためのyamlファイルを少し編集します。
※ただしこの方法ではgrafana dashboardにアクセスできなくなります。(プログラムの修正が必要っぽい・・・)
linkerd install > linkerd.yaml
vim linkerd.yaml
※下のlinkerd.yamlを参考に編集してください。
kubectl apply -f linkerd.yaml
# ...(省略)
--- # (297行目付近)
kind: Service
apiVersion: v1
metadata:
name: web
namespace: linkerd
labels:
linkerd.io/control-plane-component: web
annotations:
linkerd.io/created-by: linkerd/cli stable-2.0.0
spec:
type: NodePort # NodePortでアクセスできるように変更
selector:
linkerd.io/control-plane-component: web
ports:
- name: http
port: 8084
targetPort: 8084
nodePort: 31000 # とりあえず31000ポートを使用
- name: admin-http
port: 9994
targetPort: 9994
---
# ...(省略)
- dashboardにアクセス
ブラウザから以下のURLにアクセスしてください。
http://<your-server-ip>:31000 - アプリをデプロイ
アプリをデプロイするためのkubernetesのyamlファイルを用意し、linkerd injectコマンドでlinkerd用のannotesions等を挿入後、デプロイします。
wget https://github.com/microservices-demo/microservices-demo/raw/master/deploy/kubernetes/complete-demo.yaml
kubectl create ns sock-shop
linkerd inject complete-demo.yaml | kubectl apply -f -
Istioと比較した結果
類似ツールのIstioと比較した結果です。
!!!!!!!!!!!!!!!!!!!あくまでも私個人の感想なので、一意見としてお考え下さい!!!!!!!!!!!!!!!!!!!
機能 | Linerd | Istio |
---|---|---|
UI | ◎(シンプルでいい感じ) | ×(そもそもない) |
インストール | ○(簡単だけどproxy環境だと編集必要) | △(コンポーネントがたくさんあって大変) |
セキュリティ | △(ちょっと物足りない) | ◎(mTLS,RBACなど高機能) |
pluggable? | ×(他ツールとの連携が微妙) | ○(jaegerなどと連携可) |
アクセス制御 | ×(できない) | ○(yamlできめ細かく制御可能) |
サービス通信の可視化 | ○(Tap,Top,Service meshが見やすい) | △(servicegraphがあるけど・・・) |
使ってみた感想
UIはかっこよかったです!そしてシンプルでわかりやすかった
また、TapやTop機能など可視化機能は非常に充実していて分析等に便利だなぁという印象です。
そして、all-in-oneで簡単にインストールできるのですぐに使えました!
ただ、Istioのようにアクセス制御や流動制御ができなかったので、もうちょっと頑張ってほしいなぁって感じです。
また、セキュリティに関してもmTLS(相互TLS)がexperimentalで導入されているだけでIstioと比べるとどうしても劣ってしまうので少し残念でした。
とはいっても、今後どんどん良くなっていきそうなので今後に期待です。