📝
MacのMinikubeにIstio入れてみる
概要
なんか作ろう。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