トラフィックルーティングのテスト
実際の環境では、カナリアデプロイメントは定期的に一部のユーザーに機能をリリースするために使用されます。このシナリオでは、人為的にトラフィックの75%を新しいバージョンのチェックアウトサービスにルーティングしています。カートに異なるオブジェクトを入れて複数回チェックアウト手順を完了すると、ユーザーに2つのバージョンのアプリケーションが表示されるはずです。
まず、Kubernetes execを使用して、UIポッドからLatticeサービスURLが機能することを確認しましょう。これはHTTPRouteリソースのアノテーションから取得します:
~$export CHECKOUT_ROUTE_DNS="http://$(kubectl get httproute checkoutroute -n checkout -o json | jq -r '.metadata.annotations["application-networking.k8s.aws/lattice-assigned-domain-name"]')"
~$echo "Checkout Lattice DNS is $CHECKOUT_ROUTE_DNS"
~$POD_NAME=$(kubectl -n ui get pods -o jsonpath='{.items[0].metadata.name}')
~$kubectl exec $POD_NAME -n ui -- curl -s $CHECKOUT_ROUTE_DNS/health
{"status":"ok","info":{},"error":{},"details":{}}次に、UIコンポーネントのConfigMapをパッチして、UIサービスをVPC Latticeサービスエンドポイントに向けるようにします:
- Kustomize Patch
- ConfigMap/ui
- Diff
~/environment/eks-workshop/modules/networking/vpc-lattice/ui/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: ui
namespace: ui
data:
ENDPOINTS_CHECKOUT: "${CHECKOUT_ROUTE_DNS}"
apiVersion: v1
data:
ENDPOINTS_CHECKOUT: ${CHECKOUT_ROUTE_DNS}
RETAIL_UI_ENDPOINTS_CARTS: http://carts.carts.svc:80
RETAIL_UI_ENDPOINTS_CATALOG: http://catalog.catalog.svc:80
RETAIL_UI_ENDPOINTS_CHECKOUT: http://checkout.checkout.svc:80
RETAIL_UI_ENDPOINTS_ORDERS: http://orders.orders.svc:80
kind: ConfigMap
metadata:
name: ui
namespace: ui
apiVersion: v1
data:
+ ENDPOINTS_CHECKOUT: ${CHECKOUT_ROUTE_DNS}
RETAIL_UI_ENDPOINTS_CARTS: http://carts.carts.svc:80
RETAIL_UI_ENDPOINTS_CATALOG: http://catalog.catalog.svc:80
RETAIL_UI_ENDPOINTS_CHECKOUT: http://checkout.checkout.svc:80
RETAIL_UI_ENDPOINTS_ORDERS: http://orders.orders.svc:80
この設定変更を行いましょう:
~$kubectl kustomize ~/environment/eks-workshop/modules/networking/vpc-lattice/ui/ \
| envsubst | kubectl apply -f -
次に、UIコンポーネントのポッドを再起動します:
~$kubectl rollout restart deployment/ui -n ui
~$kubectl rollout status deployment/ui -n ui
ブラウザを使用してアプリケーションにアクセスしてみましょう。uiネームスペースにはui-nlbという名前のLoadBalancerタイプのサービスが提供されており、そこからアプリケーションのUIにアクセスできます。
~$kubectl get service -n ui ui-nlb -o jsonpath='{.status.loadBalancer.ingress[*].hostname}{"\n"}'
k8s-ui-uinlb-647e781087-6717c5049aa96bd9.elb.us-west-2.amazonaws.com
ブラウザでこのURLにアクセスし、複数回チェックアウトを試してみてください(カートに異なるアイテムを入れてみてください):
チェックアウト時に「Lattice checkout」ポッドが約75%の確率で使用されていることに気づくでしょう: