メインコンテンツまでスキップ

ルートの設定

このセクションでは、ブルー/グリーンデプロイメントやカナリアスタイルのデプロイメントのための重み付けルーティングを使用した、高度なトラフィック管理にAmazon VPC Latticeを使用する方法を示します。

配送オプションに「Lattice」というプレフィックスを追加したcheckoutマイクロサービスの修正版をデプロイしましょう。Kustomizeを使用して、この新しいバージョンを新しい名前空間(checkoutv2)にデプロイします。

~$kubectl apply -k ~/environment/eks-workshop/modules/networking/vpc-lattice/abtesting/
~$kubectl rollout status deployment/checkout -n checkoutv2

checkoutv2名前空間には、アプリケーションの2番目のバージョンが含まれるようになりましたが、checkout名前空間の同じredisインスタンスを使用しています。

~$kubectl get pods -n checkoutv2
NAME                        READY   STATUS    RESTARTS   AGE
checkout-854cd7cd66-s2blp   1/1     Running   0          26s

次に、HTTPRouteリソースを作成して重み付けルーティングがどのように機能するかを実演しましょう。まず、Latticeが私たちのcheckoutサービスで適切なヘルスチェックを実行する方法を指示するTargetGroupPolicyを作成します:

~/environment/eks-workshop/modules/networking/vpc-lattice/target-group-policy/target-group-policy.yaml
apiVersion: application-networking.k8s.aws/v1alpha1
kind: TargetGroupPolicy
metadata:
name: checkout-policy
namespace: checkout
spec:
targetRef:
group: ""
kind: Service
name: checkout
protocol: HTTP
protocolVersion: HTTP1
healthCheck:
enabled: true
intervalSeconds: 10
timeoutSeconds: 1
healthyThresholdCount: 3
unhealthyThresholdCount: 2
path: "/health"
port: 8080
protocol: HTTP
protocolVersion: HTTP1
statusMatch: "200"
A

targetRefはこのポリシーをcheckoutサービスに適用します

B

healthCheckセクションの設定はVPC Latticeがサービスの健全性をどのように監視するかを定義します

C

intervalSeconds: 10:10秒ごとにチェック

D

timeoutSeconds: 1:チェックごとに1秒のタイムアウト

E

healthyThresholdCount: 3:3回連続成功=健全

F

unhealthyThresholdCount: 2:2回連続失敗=不健全

G

path: "/health":ヘルスチェックエンドポイントのパス

H

port: 8080:ヘルスチェックエンドポイントのポート

I

protocol: HTTP:ヘルスチェックエンドポイントのプロトコル

J

statusMatch: "200":HTTP 200レスポンスを期待

このリソースを適用します:

~$kubectl apply -k ~/environment/eks-workshop/modules/networking/vpc-lattice/target-group-policy

次に、checkoutv2に75%のトラフィックを、残りの25%のトラフィックをcheckoutに分散するKubernetes HTTPRouteルートを作成します:

~/environment/eks-workshop/modules/networking/vpc-lattice/routes/checkout-route.yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: checkoutroute
namespace: checkout
spec:
parentRefs:
- name: ${EKS_CLUSTER_NAME}
sectionName: http
rules:
- backendRefs:
- name: checkout
namespace: checkout
kind: Service
port: 80
weight: 25
- name: checkout
namespace: checkoutv2
kind: Service
port: 80
weight: 75
A

parentRefsはこのHTTPRouteルートを${EKS_CLUSTER_NAME}という名前のゲートウェイのhttpリスナーに接続します

B

このbackendRefsルールはトラフィックの25%checkout名前空間のcheckoutサービスのポート80に送信します

C

このbackendRefsルールはトラフィックの75%checkoutv2名前空間のcheckoutサービスのポート80に送信します

このリソースを適用します:

~$cat ~/environment/eks-workshop/modules/networking/vpc-lattice/routes/checkout-route.yaml \
| envsubst | kubectl apply -f -

関連するリソースの作成には2〜3分かかることがあります。完了を待つために次のコマンドを実行してください:

~$kubectl wait -n checkout --timeout=3m \
--for=jsonpath='{.metadata.annotations.application-networking\.k8s\.aws\/lattice-assigned-domain-name}' httproute/checkoutroute

完了すると、HTTPRouteのDNS名をHTTPRouteアノテーションapplication-networking.k8s.aws/lattice-assigned-domain-nameから見つけることができます:

~$kubectl describe httproute checkoutroute -n checkout
Name:         checkoutroute
Namespace:    checkout
Labels:       <none>
Annotations:  application-networking.k8s.aws/lattice-assigned-domain-name:
                checkoutroute-checkout-0d8e3f4604a069e36.7d67968.vpc-lattice-svcs.us-east-2.on.aws
API Version:  gateway.networking.k8s.io/v1beta1
Kind:         HTTPRoute
...

これで、VPC LatticeコンソールのLatticeリソースの下に作成された関連サービスを確認できます。 CheckoutRouteサービス

トラフィックは現在Amazon VPC Latticeによって処理されています

Amazon VPC Latticeは、異なるVPCを含む任意のソースからこのサービスへのトラフィックを自動的にリダイレクトできるようになりました!また、他のVPC Latticeの機能も十分に活用できます。