Ciliumネットワークポリシーでパケット制御をしたとき(下記)、課題としていたサービスメッシュ(Istio)について試してみました。
環境) 下記と同じ (Ubuntu 20.04 / WSL)
参考)
「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
以上変化を確認できました。サイドカープロキシ(envoy)の注入によりこのようなことが可能になるのですね。
他にもこのnetworkingディレクトリには様々な設定がありますので、また試してみようと思います。
virtual-service-all-v1.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: productpage spec: hosts: - productpage http: - route: - destination: host: productpage subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - route: - destination: host: ratings subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: details spec: hosts: - details http: - route: - destination: host: details subset: v1 --- |
virtual-service-reviews-v2-v3.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v2 weight: 50 - destination: host: reviews subset: v3 weight: 50 |