Service Mesh : Istio

Ciliumネットワークポリシーでパケット制御をしたとき(下記)、課題としていたサービスメッシュ(Istio)について試してみました。

Cilium Network Policy

環境) 下記と同じ (Ubuntu 20.04 / WSL)

Pod-to-Pod Communication / Kubernetes

参考)
「Istioでのトラフィック制御」
https://amateur-engineer-blog.com/istio-traffic-management-basic/
「Kialiでサービス メッシュの稼働状況を可視化する」
https://www.mtioutput.com/entry/istio-mesh-kiali
「istio-proxyがどのように通信を仲介しているかを知る」
https://zenn.dev/tayusa/articles/aa54bbff3d0d2d

Istioインストール

curl -L https://istio.io/downloadIstio | sh –

ダウンロードされた istio-1.18.0/bin/istioctl をパスの通ったところにコピー

環境のチェック

istioctl x precheck

サンプルプログラムのダウンロード

git clone https://github.com/istio/istio.git

Istio core, Istiodインストール

istioctl install -f istio/samples/bookinfo/demo-profile-no-gateways.yaml

(サンプルbookinfoの設定だからと思ってつかったが、後で試したいことをするのに、Ingress,Egressがないとまずいのであとで下記を実行)
Istio core, Istiod, Egress GW, Ingress GW インストール

istioctl install –set profile=demo -y

サイドカーの有効化

kubectl label namespace default istio-injection=enabled

bookinfoサンプルのPod,Serviceを展開

kubectl apply -f istio/samples/bookinfo/platform/kube/bookinfo.yaml
kubectl apply -f istio/samples/bookinfo/networking/bookinfo-gateway.yaml

あといろいろとしらべてみました。

(iptable -L -t nat) や、(crictl ps) などいろいろと調べようと思いましたが、権限やコマンドがありませんでした。(productの中はpsもなし)

外部からアクセス確認

$ curl -I localhost/productpage
HTTP/1.1 200 OK
server: istio-envoy
content-type: text/html; charset=utf-8
content-length: 5290
x-envoy-upstream-service-time: 620

Kailiの導入

kubectl apply -f istio/samples/addons

ダッシュボードの起動(ブラウザアクセス http://localhost:20001)

istioctl dashboard kiali

下記でも可

kubectl -n istio-system port-forward service/kiali 20001:20001

準備ができたところで、ネットワーク制御をしてみます。

DestinationRuleの作成

kubectl apply -f istio/samples/bookinfo/networking/destination-rule-all.yaml

VirtualServiceの作成(内容は最下部に引用)
すべてv1

kubectl apply -f istio/samples/bookinfo/networking/virtual-service-all-v1.yaml

v2とv3半々

kubectl apply -f istio/samples/bookinfo/networking/virtual-service-reviews-v2-v3.yaml

テストリクエスト

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

all v1

v2 & v3

以上変化を確認できました。サイドカープロキシ(envoy)の注入によりこのようなことが可能になるのですね。
他にもこのnetworkingディレクトリには様々な設定がありますので、また試してみようと思います。

virtual-service-all-v1.yaml

virtual-service-reviews-v2-v3.yaml