概要
k3sでistioのサンプル(Bookinfo)を動作させる。
環境
- OS : osx multipass上で動作するUbuntu
- k3s : 最新を取得(v1.22.5+k3s1)
- Istio : 最新を取得(istio-1.12.2)
手順
- Bookinfoアプリケーションをデプロイ。
- オートマチック・サイドカー・インジェクションによりenvoryを入れる。
$ kubectl label namespace default istio-injection=enabled
- Bookinfoアプリケーションをデプロイする。
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details unchanged
serviceaccount/bookinfo-details unchanged
deployment.apps/details-v1 unchanged
service/ratings unchanged
serviceaccount/bookinfo-ratings unchanged
deployment.apps/ratings-v1 unchanged
service/reviews unchanged
serviceaccount/bookinfo-reviews unchanged
deployment.apps/reviews-v1 unchanged
deployment.apps/reviews-v2 unchanged
deployment.apps/reviews-v3 unchanged
service/productpage unchanged
serviceaccount/bookinfo-productpage unchanged
deployment.apps/productpage-v1 unchanged
- 作成されたサービスの確認。
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 443/TCP 6d18h
details ClusterIP 10.43.250.211 9080/TCP 6d18h
ratings ClusterIP 10.43.128.103 9080/TCP 6d18h
reviews ClusterIP 10.43.252.163 9080/TCP 6d18h
productpage ClusterIP 10.43.12.119 9080/TCP 6d18h
- 作成されたPodの確認。
$ kubectl get po
NAME READY STATUS RESTARTS AGE
ratings-v1-b6994bb9-tfcth 2/2 Running 4 (8m13s ago) 6d18h
reviews-v3-84779c7bbc-cjtcj 2/2 Running 4 (8m13s ago) 6d18h
reviews-v2-7bf8c9648f-z4sgl 2/2 Running 4 (8m13s ago) 6d18h
reviews-v1-545db77b95-f69kc 2/2 Running 4 (8m14s ago) 6d18h
details-v1-79f774bdb9-btrng 2/2 Running 4 (8m13s ago) 6d18h
productpage-v1-6b746f74dc-p76xs 2/2 Running 4 (8m13s ago) 6d18h
- Bookinfoアプリケーションに外部からアクセスできるように、サービス・メッシュのエッジ(境界)にIstio gatewayを作成。
- Istio gatewayをデプロイ。
$ 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.
- 作成したGatewayを確認。
$ kubectl get gateway
NAME AGE
bookinfo-gateway 23m
- 外部アクセス用のIP、ポートの設定。
- 現在動作しているクラスタのLoadBalancerの設定の確認。
$ kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.43.54.163 192.168.64.8 15021:31355/TCP,80:30877/TCP,443:32355/TCP,31400:31017/TCP,15443:30817/TCP 6d19h
- 環境変数を設定
$ 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}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
- IPアドレスとポートの確認。
$ echo "$GATEWAY_URL"
192.168.64.8:80
- 外部アクセス用のURL確認。
$ echo "http://$GATEWAY_URL/productpage"
http://192.168.64.8:80/productpage
- アクセス確認。
$ curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
200
参考