3.5. ステップ 5 - ゲートウェイポリシーと HTTP ルートの設定
この時点で、ゲートウェイのデプロイは完了していますが、エンドポイントは公開されておらず、HTTPS リスナーはプログラムされていません。次に、CertificateIssuer を使用して HTTPS リスナー証明書をセットアップする TLSPolicy を設定できます。
保護されていないエンドポイントに対してデフォルトの HTTP 403 レスポンスをセットアップする AuthPolicy と、このゲートウェイによって公開されるエンドポイントをさらに保護するために意図的に低く指定されたデフォルトのグローバル制限を設定する RateLimitPolicy を定義します。
また、負荷分散ストラテジーが含まれる DNSPolicy と、ゲートウェイがバックエンドアプリケーション API と通信するための HTTPRoute も定義します。
3.5.1. TLS ポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
手順
次のとおり、ゲートウェイの
TLSPolicyを設定します。kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: TLSPolicy metadata: name: ${gatewayName}-tls namespace: ${gatewayNS} spec: targetRef: name: ${gatewayName} group: gateway.networking.k8s.io kind: Gateway issuerRef: group: cert-manager.io kind: ClusterIssuer name: ${clusterIssuerName} EOF次のとおり、TLS ポリシーがコントローラーによって受け入れられたことを確認します。
kubectl get tlspolicy ${gatewayName}-tls -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
3.5.2. 認証ポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
手順
次のとおり、ゲートウェイのデフォルトの deny-all
AuthPolicyを設定します。kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: AuthPolicy metadata: name: ${gatewayName}-auth namespace: ${gatewayNS} spec: targetRef: group: gateway.networking.k8s.io kind: Gateway name: ${gatewayName} defaults: rules: authorization: "deny": opa: rego: "allow = false" EOF次のとおり、認証ポリシーがコントローラーによって受け入れられたことを確認します。
kubectl get authpolicy ${gatewayName}-auth -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
3.5.3. 流量制御ポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
手順
次のとおり、ゲートウェイのデフォルトの
RateLimitPolicyを設定します。kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: RateLimitPolicy metadata: name: ${gatewayName}-rlp namespace: ${gatewayNS} spec: targetRef: group: gateway.networking.k8s.io kind: Gateway name: ${gatewayName} defaults: limits: "low-limit": rates: - limit: 2 window: 10s EOF注記クラスターによっては、
RateLimitPolicyが適用されるまでに数分間がかかる場合があります。この例では、制限が機能していることを示すために意図的に低く設定されています。流量制御が受け入れられたことを確認するには、以下のコマンドを入力します。
kubectl get ratelimitpolicy ${gatewayName}-rlp -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
3.5.4. DNS ポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
手順
次のとおり、ゲートウェイの
DNSPolicyを設定します。kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: DNSPolicy metadata: name: ${gatewayName}-dnspolicy namespace: ${gatewayNS} spec: targetRef: name: ${gatewayName} group: gateway.networking.k8s.io kind: Gateway providerRefs: - name: aws-credentials loadBalancing: weight: 120 geo: EU defaultGeo: true EOF注記DNSPolicyは、これまでの手順で定義した DNS プロバイダーSecretを使用します。この例のgeoはEUですが、必要に応じて変更できます。次のとおり、
DNSPolicyが受け入れられたことを確認します。kubectl get dnspolicy ${gatewayName}-dnspolicy -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
3.5.5. HTTP ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
テストの目的で、このセクションでは、toystore アプリケーションがデプロイされていることを前提としています。詳細は、4章Connectivity Link アプリケーション開発者のワークフロー を参照してください。
手順
次のように
HTTPRouteを作成して Gateway をテストします。kubectl apply -f - <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: test namespace: ${gatewayNS} labels: service: toystore spec: parentRefs: - name: ${gatewayName} namespace: ${gatewayNS} hostnames: - "test.${rootDomain}" rules: - backendRefs: - name: toystore port: 80 EOF次のとおり、ゲートウェイポリシーが適用されたことを確認します。
kubectl get dnspolicy ${gatewayName}-dnspolicy -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Enforced")].message}' kubectl get authpolicy ${gatewayName}-auth -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Enforced")].message}' kubectl get ratelimitpolicy ${gatewayName}-rlp -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Enforced")].message}'次のとおり、HTTPS リスナーの準備が完了したことを確認します。
kubectl get gateway ${gatewayName} -n ${gatewayNS} -o=jsonpath='{.status.listeners[0].conditions[?(@.type=="Programmed")].message}'