Kubernetesお勉強その7【環境構築】Istioに入門してみる

kubernetesってやっぱりマイクロサービスで使うことを想定しているわけだからやっぱりサービスメッシュとか大事になってくるわけで。さくっとそのサービスメッシュを管理してくれるIstioを試してみました。といってもサンプルの手順なぞっただけでほとんどコピペですが・・・。

ロギングとか、認証認可とかコンテナの制御系周りでビジネスに関係ないとこは切り出してPODビジネスロジックに集中できるような仕組みのようなもんという理解です。(正解かどうかは知らんけど)

PODがマイクロサービスを担うような感じにしたいので、マイクロサービスとして共通のものを一々POD毎に書いてられっかというのが背景にあるのかなと、結局最後はドメイン駆動設計に行き着く感じなんかなぁと思いました。

けどSOAとどこが違うんすっかとモヤモヤとしつつ手を動かしました。手を動かすところはほかの先人のサイトのコピペばかりなのであまり役に立たないかもしれないです。


◆手順

# 1.FireWall設定(FireWallを一旦リセットし内部からの通信のみ許可)
$ sudo ufw reset
$ sudo ufw enable
$ sudo ufw allow from 192.168.0.0/24
$ sudo ufw reload

# 2.Istioctlインストール
$  curl -L https://istio.io/downloadIstio | sh -
$ cd
$ echo 'export PATH="$PATH:/home/youruser/istio-1.13.0/bin"' | tee -a .bashrc
$ source .bashrc
$ istioctl x precheck

# 3.metallb準備(IstioでLoadBarancer使うので事前準備)
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.0/manifests/namespace.yaml
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.0/manifests/metallb.yaml
$ cat << EOF > config/metallb-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.0.20-192.168.0.30
EOF
$ kubectl apply -f config/metallb-configmap.yaml
$ kubectl -n metallb-system get all


# 4.デモ環境インストール
$ istioctl manifest apply --set profile=demo
$ sudo chown -R  youruser:yourgroup ~/.kube/cache
$ kubectl get all -n istio-system

# 5.サンプルアプリ構築
$ cd istio-1.13.0/
$ kubectl create namespace sample-app
$ kubectl label namespace sample-app istio-injection=enabled
$ kubectl get ns sample-app --show-labels
$ kubectl apply -f ./samples/bookinfo/platform/kube/bookinfo.yaml -n sample-app
$ kubectl apply -f ./samples/bookinfo/networking/bookinfo-gateway.yaml -n sample-app

# 6.動作確認
$ kubectl exec "$(kubectl get pod -n sample-app -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -n sample-app -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
$ kubectl logs -n sample-app "$(kubectl get pod -n sample-app -l app=productpage -o jsonpath={.items..metadata.name})" -c istio-proxy | tail -5

# アプリケーションの外部公開
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')

$ curl -s "http://${INGRESS_HOST}:${INGRESS_PORT}/productpage" | grep -o "<title>.*</title>"
$ echo http://${INGRESS_HOST}:${INGRESS_PORT}/productpage
# 出力されたURLにアクセスする
$ kubectl logs -n sample-app "$(kubectl get pod -n sample-app -l app=productpage -o jsonpath={.items..metadata.name})" -c istio-proxy | tail -3
# アドオン適用
$ kubectl apply -f ./samples/addons
$ kubectl get pod -n istio-system
# アドオン起動
$ istioctl dashboard kiali &
$ istioctl dashboard grafana &
$ istioctl dashboard jaeger &
# アドオンポートフォワード
$ kubectl -n istio-system port-forward svc/kiali 31780:20001 --address 0.0.0.0 &
$ kubectl -n istio-system port-forward svc/grafana 31779:3000 --address 0.0.0.0 &
$ kubectl -n istio-system port-forward svc/prometheus 31778:9090 --address 0.0.0.0 &
$ kubectl -n istio-system port-forward \
$(kubectl -n istio-system get pod -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 31777:16686 \
--address 0.0.0.0 &

#  7.後片付け
$ killall istioctl
$ cd ~/istio-1.13.0
$ kubectl delete -f ./samples/bookinfo/platform/kube/bookinfo.yaml -n sample-app
$ kubectl -n sample-app get all
$ kubectl delete namespaces sample-app
$ istioctl x uninstall --purge
$ cd
$ kubectl delete -f config/metallb-configmap.yaml
$ kubectl delete -f https://raw.githubusercontent.com/metallb/metallb/v0.12.0/manifests/metallb.yaml
$ kubectl delete -f https://raw.githubusercontent.com/metallb/metallb/v0.12.0/manifests/namespace.yaml


 ◆参考資料

・Istio

https://ascii.jp/elem/000/004/044/4044285/

https://qiita.com/ishishow/items/401629972bea46c680f6

https://blog.pepese.com/entry/k8s-istio-basics/

https://amateur-engineer-blog.com/getting-started-istio/

https://zenn.dev/tkoyama/articles/c49b35c32e4923

https://qiita.com/prodigy413/items/f7e2f25b094aa31d155a

https://istio.io/latest/docs/examples/microservices-istio/setup-kubernetes-cluster/

https://knowledge.sakura.ad.jp/20489/

https://techstep.hatenablog.com/entry/2020/12/26/112229


・サンプル確認

https://atmarkit.itmedia.co.jp/ait/articles/2111/05/news005.html

https://qiita.com/suzuyui/items/f5142414c63b9af84291

https://zaki-hmkc.hatenablog.com/entry/2020/07/26/184849

https://qiita.com/erb_owl/items/dfb322ceaecdb02952e8


・MetalLB(IstioのIngressでLoadBarancerが使いたかったので使用)

https://zaki-hmkc.hatenablog.com/entry/2020/07/10/235944

https://www.kaitoy.xyz/2020/10/31/metallb/

https://blog.framinal.life/entry/2020/04/16/022042

https://qiita.com/prodigy413/items/3a24ff85819dc5eafe25

https://docs.netapp.com/ja-jp/netapp-solutions/containers/rh-os-n_LB_MetalLB.html#metallb-%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%BE%E3%81%99


・Istioアンインストール

https://kamotora.net/system/container/kubernetes/istio-uninstall/

https://qiita.com/reoring/items/f2da66f3cad95b9342ea


あとはHelmとかあるみたいですが、まぁインフラはもうこんなもんで良くてそろそろバックエンドアプリとかそっちの方を試したほうがいいのではと思ったんですが、kubernetesが必要となるほどの規模のアプリなど個人で書くこともないんじゃないかと、気が向いたらなんかAPI的なものを作ってみてお勉強してみようとか思う次第です。いったんkubernetesはこれでいいかな

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)