#はじめに
Istioは、Google、IBM、Lyftで共同開発したOSS化されたサービスメッシュフレームワークで、環境非依存のプラットフォームで利用可能です。
各マイクロサービスと一緒にSidecarProxyとをデプロイし、それ経由で他のマイクロサービスとの通信を行います。Istioでは、SidecarProxyとしてLyftが作成したEnvoyを採用しています。
そんなIstioをkubernetes上で動かしてみたので、まとめておこうと思います。
※2019年3月にバージョンが1.1に到達しています(参考:https://istio.io/blog/2019/announcing-1.1/)
※ベータ版ですが、GCPのマネージドサービスとして提供されています(参考:https://cloud.google.com/istio/docs/istio-on-gke/overview)
#Istioをkubernetesにinjectする
基本的にはPodは1つのcontainerを持つ状態で起動します。そのため、下のコマンドを叩くと、1/1
と表示されます。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
httpbin-5fc7cf895d-mp8vt 1/1 Running 0 27d
sleep-57f9d6fd6b-78xfr 1/1 Running 0 27d
Istioをinject(注入する)ためには、下記のコマンドでラベル付けをします。
$ kubectl label namespace default istio-injection=enabled
$ kubectl get namespace -L istio-injection
NAME STATUS AGE ISTIO-INJECTION
default Active 29d enabled
istio-system Active 29d
kube-public Active 29d
kube-system Active 29d
IstioのinjectはPodを作成するタイミングで発生します。
そのため、これ以降新たなPodを作成するタイミングで、Sidecarがinjectされます。
$ kubectl delete pod sleep-57f9d6fd6b-78xfr
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
sleep-57f9d6fd6b-78xfr 1/1 Terminating 0 1m
sleep-776b7bcdcd-7hpnk 2/2 Running 0 7s
上記の通り、2/2
となっていることからもSidecarがinjectされていることがわかります。
#Istioをkubernetesにinjectしないようにする
上記で設定したinjectは下記のコマンドで無効にすることができます。
$ kubectl label namespace default istio-injection-