Service Meshの範囲をインクリメンタルに広げる

Service Meshの範囲をインクリメンタルに広げる手順

Service Meshの範囲をインクリメンタルに広げる流れを大まかに説明すると以下のようになります。(KubernetesやIstioのinstallは省略します。)
※ この手順はバージョンが1.1.8のIstioで試しています。

  1. 1つPodにのみ対してistio-proxy(Envoy)をinjectする
  2. 自動テストを流す
  3. 1でistio-proxyをinjectしたPodに対して必要最低限のVirtual ServiceとDestination Ruleを書く
  4. IstioのGatewayを経由させて自動テストを流す

1つPodにのみ対してistio-proxy(Envoy)をinjectする

まず、istio-proxyをinjectするPodを1つ決めます。マイクロサービスの依存関係の末端など、通信の経路が少ないPodからinjectしていく方がサービス全体への影響は少ないでしょう。
istioctlで以下のようにistio-proxyを対象のPodに手動でinjectすることができます。

$ istioctl kube-inject -f <your-app-spec>.yaml | kubectl apply -f 
$ kubectl label namespace <namespace> istio-injection=enabled
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: foo
spec:
template:
metadata:
labels:
app: foo
version: blue
annotations:
sidecar.istio.io/inject: "false"
spec:
containers:
- name: foo
image: foo

自動テストを流す

次はPodに対するテストとE2Eテストを流しましょう。Podに対するトラフィックがistio-proxyを経由しても問題が起こっていないことを確認しています。テストが通っていることだけでなく、テスト実行時間が伸びていないことも確認するとよいでしょう。

Virtual ServiceとDestination Ruleを書く

次はistio-proxをinjectしたPodに対してTraffic Managementのための最低限必要なVirtual ServiceとDestination Ruleを書きます。Virtual ServiceとDestination Ruleの例は以下のとおりです。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: foo-vs
namespace: bar
spec:
gateways:
- default/default-gateway
hosts:
- foo.bar.svc.cluster.local
http:
- route:
- destination:
host: foo.bar.svc.cluster.local
subset: blue
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: foo-dr
namespace: bar
spec:
host: foo.bar.svc.cluster.local
subsets:
- name: blue
labels:
version: blue

IstioのGatewayを経由させて自動テストを流す

最後にIstioのGatewayを経由させてPodに対するテストとE2Eテストを流し、Virtual ServiceとDestination Ruleに書いたルーティングに問題がないかを確認します。また、Kialiを使用すれば、設定ファイルが間違っている場合、YAMLのどこが間違っているかも表示されます。

まとめ

Service Meshは小さく始めることができます。Service Meshに対する知見が少ない場合でも、作業の単位を小さく保つことで、問題が発生した際の原因特定が容易になり、Service Mesh導入の難易度は下がります。また、こまめにE2Eを流すことで、不具合が発生していないことを確かめながら、自信を持って前に進むことができます。

--

--

Software engineer

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store