📝

MacのMinikubeにIstio入れてみる

2021/07/23に公開

概要

なんか作ろう。Kubernetesにしよう。Minikube入れるか
せっかくなら前から気になってたサービスメッシュ(Istio)も入れてみよう!

とりあえず公式のGetting Startedをやってみる

完全に作業メモ

Minikube起動

VM Driverをdefaultのdockerにすると
後続のステップで出てくるminikube tunnelでスタックしちゃったので
hyperkitをVM Driverとして指定した

$ minikube config set driver hyperkit
$ minikube start --memory=16384 --cpus=4
$ minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|
| Profile  | VM Driver | Runtime |      IP      | Port | Version | Status  | Nodes |
|----------|-----------|---------|--------------|------|---------|---------|-------|
| minikube | hyperkit  | docker  | 192.168.64.4 | 8443 | v1.21.2 | Running |     1 |
|----------|-----------|---------|--------------|------|---------|---------|-------|

Istioのダウンロード

cd ~
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.10.3
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
kubectl label namespace default istio-injection=enabled

Bookinfo sample appをデプロイ

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
$ kubectl get pods -w
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-79f774bdb9-jjr4l       2/2     Running   0          4h57m
productpage-v1-6b746f74dc-w4kqz   2/2     Running   0          4h57m
ratings-v1-b6994bb9-2xc9z         2/2     Running   0          4h57m
reviews-v1-545db77b95-9vpr8       2/2     Running   0          4h57m
reviews-v2-7bf8c9648f-mzq5t       2/2     Running   0          4h57m
reviews-v3-84779c7bbc-969f8       2/2     Running   0          4h57m

podsが全部起動したらtitle tagが表示されることを確認。
これが出たらうまくデプロイ完了されてるはず!!

$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>

ブラウザからアクセスできるようにする

$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
$ istioctl analyze
✔ No validation issues found when analyzing namespace: default.
$ sudo minikube tunnel --cleanup
Status:
	machine: minikube
	pid: 9551
	route: 10.96.0.0/12 -> 192.168.64.4
	minikube: Running
	services: []
    errors:
		minikube: no errors
		router: no errors
		loadbalancer emulator: no errors

接続先のURLを取得

$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
$ export INGRESS_HOST=$(minikube ip)
$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
$ echo "http://$GATEWAY_URL/productpage"
http://192.168.64.4:31782/productpage

出力したURLにブラウザから実際にアクセスしてみる
http://192.168.64.4:31782/productpage

なんか出た!!!

Kiali Dashboard表示

Istioのサービスメッシュを可視化できる
Kialiなるダッシュボードを入れてみる

kubectl apply -f samples/addons
kubectl rollout status deployment/kiali -n istio-system
istioctl dashboard kiali

なんか出た!!

トラフィックへのアクセス状況を見てみる

ある程度アクセスないと表示されない雰囲気なので
以下コマンドで100回くらいproductpageにアクセスする

for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done

表示されるまでにちょっと時間かかったけど
DashboardでGraph→Namespace: default
Versioned App Graphを選択するとこんな感じで
どこにアクセスが来てるかみることできた!!!

まとめ

とりあえずチュートリアルの通り進めて
なんだかIstioが入って、Dashboardが見れるようになった

Istio使うと、アプリケーションへのコード介入なしに
Manage Trafic, Security, Observabilityなど
マイクロサービスを素敵に管理できるみたいなので、一つ一つ理解して
自分のアプリケーションに適用していこう🏄‍♂️

Discussion