UI の公開
このセクションでは、UI アプリケーションを Application Load Balancer 経由で公開するために必要な Gateway API リソースを作成します。
GatewayClass の作成
GatewayClass は、どのコントローラーが Gateway リソースの管理を担当するかを定義します。AWS Load Balancer Controller を使用する GatewayClass を作成します:
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: aws-alb
spec:
controllerName: gateway.k8s.aws/alb
これにより、aws-alb クラスを参照する Gateway は AWS Load Balancer Controller によって処理されることを Kubernetes に指示します。
GatewayClass を適用します:
Load Balancer の設定
LBC v3.x で Gateway API を使用する場合、Load Balancer の設定はアノテーションではなく LoadBalancerConfiguration CRD を通じて行われます。このリソースは ALB のスキームを定義します:
apiVersion: gateway.k8s.aws/v1beta1
kind: LoadBalancerConfiguration
metadata:
name: retail-store-lb-config
namespace: ui
spec:
scheme: internet-facing
sourceRanges: $SOURCE_RANGES
scheme: internet-facing により、ALB がインターネットから公開アクセス可能になります。
LoadBalancerConfiguration を適用します:
Gateway の作成
Gateway リソースは実際の Load Balancer インフラストラクチャをプロビジョニングします。これは GatewayClass と LoadBalancerConfiguration を参照します:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: retail-store-gateway
namespace: ui
spec:
gatewayClassName: aws-alb
infrastructure:
parametersRef:
group: gateway.k8s.aws
kind: LoadBalancerConfiguration
name: retail-store-lb-config
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: All
重要なポイント:
gatewayClassName: aws-albは、この Gateway を作成した GatewayClass にリンクしますinfrastructure.parametersRefは ALB 設定用の LoadBalancerConfiguration を参照します- リスナーはポート 80 で HTTP トラフィックを受け入れます
Gateway を適用します:
HTTPRoute の作成
HTTPRoute は、Gateway に到着したトラフィックをバックエンドサービスにどのようにルーティングするかを定義します。パスプレフィックス / を持つすべてのトラフィックを UI サービスにルーティングします:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: ui-route
namespace: ui
spec:
parentRefs:
- name: retail-store-gateway
namespace: ui
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: ui
port: 80
parentRefs はこのルートを Gateway にリンクします
ルールは / で始まるすべてのパスに一致し、トラフィックをポート 80 の ui サービスに転送します
HTTPRoute を適用します:
リソースの検証
すべてのリソースが正常に作成されたことを確認します:
NAME CONTROLLER ACCEPTED AGE
aws-alb gateway.k8s.aws/alb True 2m
NAME CLASS ADDRESS PROGRAMMED AGE
retail-store-gateway aws-alb k8s-ui-retailst-xxxxxxxxxx.us-west-2.elb.amazonaws.com True 2m
NAME HOSTNAMES AGE
ui-route 2m
Gateway ALB 経由で UI にアクセスします:
http://k8s-ui-retailst-xxxxxxxxxx.us-west-2.elb.amazonaws.com
Gateway でプロビジョニングされた ALB を通じて、ブラウザで retail store の UI にアクセスできるようになりました。
