Connectivity Link を使用した Gateway ポリシーの設定およびデプロイ


Red Hat Connectivity Link 1.0

OpenShift での API のセキュリティー、保護、接続

Red Hat Connectivity Link documentation team

概要

このガイドでは、OpenShift で Connectivity Link ポリシーを使用して、Kubernetes Gateway API をベースとしてゲートウェイが公開する API をセキュアにし、保護および接続する方法を説明します。これには、単一の OpenShift クラスターにデプロイされたゲートウェイと、複数のクラスターに分散されたゲートウェイが含まれます。

はじめに

Red Hat ドキュメントへのフィードバック

製品ドキュメントに関するご意見をお寄せください。

改善を提案するには、Jira 課題を作成し、変更案を説明してください。ドキュメントチームがご要望に迅速に対応できるよう、できるだけ詳細にご記入ください。

前提条件

  • Red Hat カスタマーポータルのアカウントがある。このアカウントを使用すると、Red Hat Jira Software インスタンスにログインできます。アカウントをお持ちでない場合は、アカウントを作成するように求められます。

手順

  1. Create issue にアクセスします。
  2. Summary テキストボックスに、問題の簡単な説明を入力します。
  3. Description テキストボックスに、次の情報を入力します。

    • 問題が見つかったページの URL。
    • 問題の詳細情報。他のフィールドは、そのままデフォルト値にできます。
  4. Reporter フィールドに Jira ユーザー名を入力します。
  5. Create をクリックして、Jira 課題をドキュメントチームに送信します。

フィードバックをご提供いただきありがとうございました。

第2章 Connectivity Link のインストールと権限を確認する

このガイドでは、1 つ以上の OpenShift クラスターに Connectivity Link が正常にインストールされ、適切なユーザー権限があることを想定しています。

前提条件

  • OpenShift への Connectivity Link のインストール の説明に従って、1 つ以上のクラスターで Connectivity Link のインストール手順を完了している。
  • kubectl または oc コマンドがインストールされている。
  • このガイドで使用する OpenShift namespace への書き込み権限がある。
  • このガイドのサンプル用に、Amazon Route 53 と DNS ゾーンを備えた AWS アカウントがある。Google Cloud DNS と Microsoft Azure DNS もサポートされている。
  • オプション:

    • マルチクラスター環境での流量制御のために、複数のクラスターに Connectivity Link をインストールし、アクセス可能な Redis ベースのデータストアを共有している。詳細は、OpenShift への Connectivity Link のインストール を参照してください。
    • Observability の場合、Connectivity Link 可観測性ガイド で説明されているように、Thanos などの中央ストレージシステムにリモート書き込みするように、OpenShift ユーザーワークロードの監視を設定する必要があります。

第3章 Connectivity Link プラットフォームエンジニアのワークフロー

このセクションでは、プラットフォームエンジニアとしてゲートウェイをデプロイする方法を説明します。ゲートウェイは、セキュアな通信を提供し、保護され、アプリケーション開発チームが使用できる状態になっています。また、複数の地理的リージョンの複数クラスターでこのゲートウェイを使用する方法も説明しています。

前提条件

注記

マルチクラスター環境では、特に除外されていない限り、クラスターごとに次のステップを個別に実行する必要があります。

3.1. ステップ 1 - 環境変数を設定する

手順

  • 次の環境変数 (便宜上使用する変数) を設定します。

    export zid=change-to-your-DNS-zone-ID
    export rootDomain=demo.example.com
    export gatewayNS=api-gateway
    export gatewayName=external
    export devNS=toystore
    export AWS_ACCESS_KEY_ID=xxxx
    export AWS_SECRET_ACCESS_KEY=xxxx
    export AWS_REGION=us-east-1
    export clusterIssuerName=lets-encrypt
    export EMAIL=foo@example.com

    この例では、zid は AWS Route 53 コンソールに表示されるホストされるゾーンの ID です。rootDomain は、Connectivity Link で使用する最上位の AWS Route 53 ドメインの名前です。

    注記

    便宜上、このガイドでは環境変数を使用します。環境変数の値がわかっている場合は、ニーズに合った方法で必要な .yaml ファイルを設定できます。

3.2. ステップ 2 - DNS プロバイダーシークレットを設定する

DNS プロバイダーは、Connectivity Link が DNS 設定のセットアップに使用できる DNS ゾーンにアクセスするための認証情報を提供します。この認証情報で、管理するゾーンのみにアクセスできるようにする必要があります。

注記

以下の Secret リソースを各クラスターに適用する必要があります。クラスターを追加する場合は、新しいクラスターに追加します。

手順

  1. Gateway namespace が存在しない場合は、以下のように作成します。

    kubectl create ns ${gatewayNS}
  2. Connectivity Link のインストール時に DNS プロバイダー認証情報のシークレットが作成されていない場合は、以下のように Gateway namespace にこのシークレットを作成します。

    kubectl -n ${gatewayNS} create secret generic aws-credentials \
      --type=kuadrant.io/aws \
      --from-literal=AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
      --from-literal=AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
  3. TLS 発行者を追加する前に、以下のように cert-manager namespace に認証情報シークレットを作成する必要もあります。

    kubectl -n cert-manager create secret generic aws-credentials \
      --type=kuadrant.io/aws \
      --from-literal=AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
      --from-literal=AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY

3.3. ステップ 3 - TLS 発行者を追加する

ゲートウェイとの通信をセキュアにするために、TLS 証明書の TLS 発行者を定義します。この例では Let's Encrypt を使用していますが、cert-manager でサポートされている任意の証明書発行者を使用できます。

手順

  1. 次のコマンドを入力して、TLS 発行者を定義します。この例では Let's Encrypt を使用しており、これをすべてのクラスターに適用する必要があります。

    kubectl apply -f - <<EOF
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: ${clusterIssuerName}
    spec:
      acme:
        email: ${EMAIL}
        privateKeySecretRef:
          name: le-secret
        server: https://acme-v02.api.letsencrypt.org/directory
        solvers:
          - dns01:
              route53:
                hostedZoneID: ${zid}
                region: ${AWS_REGION}
                accessKeyIDSecretRef:
                  key: AWS_ACCESS_KEY_ID
                  name: aws-credentials
                secretAccessKeySecretRef:
                  key: AWS_SECRET_ACCESS_KEY
                  name: aws-credentials
    EOF
  2. ClusterIssuer の準備が完了するまで待ちます。

    kubectl wait clusterissuer/${clusterIssuerName} --for=condition=ready=true

3.4. ステップ 4 - ゲートウェイを設定する

Connectivity Link が 2 つ以上のクラスター間で DNS を使用してトラフィックのバランスを調整するには、共有ホストでゲートウェイを定義する必要があります。これは、root ドメインに基づき、ワイルドカードホスト名で HTTPS リスナーを使用して定義します。前述のように、これらのリソースをすべてのクラスターに適用する必要があります。

注記

現在、ゲートウェイは同じ namespace からの HTTPRoute のみを受け入れるように設定されています。これにより、一般使用の準備が完了するまで、ゲートウェイを使用できるユーザーを制限できます。

手順

  1. 以下のコマンドを入力してゲートウェイを作成します。

    kubectl apply -f - <<EOF
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: ${gatewayName}
      namespace: ${gatewayNS}
      labels:
        kuadrant.io/gateway: "true"
    spec:
        gatewayClassName: istio
        listeners:
        - allowedRoutes:
            namespaces:
              from: Same
          hostname: "*.${rootDomain}"
          name: api
          port: 443
          protocol: HTTPS
          tls:
            certificateRefs:
            - group: ""
              kind: Secret
              name: api-${gatewayName}-tls
            mode: Terminate
    EOF
  2. 次のとおり、ゲートウェイのステータスを確認します。

    kubectl get gateway ${gatewayName} -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
    kubectl get gateway ${gatewayName} -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Programmed")].message}'

    ゲートウェイは受け入れられ、プログラムされるはずです。これは、ゲートウェイが有効で、外部アドレスが割り当てられたことを意味します。

  3. ただし、以下に示すとおり HTTPS リスナーのステータスを確認すると、不正な TLS 設定が原因でプログラムされていない、またはトラフィックを受け入れる準備ができていないことがわかります。

    kubectl get gateway ${gatewayName} -n ${gatewayNS} -o=jsonpath='{.status.listeners[0].conditions[?(@.type=="Programmed")].message}'

    このような場合も、Connectivity Link は TLSPolicy を使用して有効な手段を提供できます。この点は、次のステップで説明しています。

3.4.1. オプション: Gateway インスタンスからメトリクスを収集するように設定する

クラスターに Prometheus をセットアップしている場合は、Gateway Pod から直接メトリクスを収集するように PodMonitor を設定できます。この設定は、istio_requests_total などのメトリクスに必須です。ゲートウェイが実行されている namespace に、次の設定を追加する必要があります。

kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: istio-proxies-monitor
  namespace: ${gatewayNS}
spec:
  selector:
    matchExpressions:
      - key: istio-prometheus-ignore
        operator: DoesNotExist
  podMetricsEndpoints:
    - path: /stats/prometheus
      interval: 30s
      relabelings:
        - action: keep
          sourceLabels: ["__meta_kubernetes_pod_container_name"]
          regex: "istio-proxy"
        - action: keep
          sourceLabels:
            ["__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape"]
        - action: replace
          regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})
          replacement: "[\$2]:\$1"
          sourceLabels:
            [
              "__meta_kubernetes_pod_annotation_prometheus_io_port",
              "__meta_kubernetes_pod_ip",
            ]
          targetLabel: "__address__"
        - action: replace
          regex: (\d+);((([0-9]+?)(\.|$)){4})
          replacement: "\$2:\$1"
          sourceLabels:
            [
              "__meta_kubernetes_pod_annotation_prometheus_io_port",
              "__meta_kubernetes_pod_ip",
            ]
          targetLabel: "__address__"
        - action: labeldrop
          regex: "__meta_kubernetes_pod_label_(.+)"
        - sourceLabels: ["__meta_kubernetes_namespace"]
          action: replace
          targetLabel: namespace
        - sourceLabels: ["__meta_kubernetes_pod_name"]
          action: replace
          targetLabel: pod_name
EOF

メトリクスの設定に関する詳細は、Connectivity Link 可観測性ガイド を参照してください。

3.5. ステップ 5 - ゲートウェイポリシーと HTTP ルートの設定

この時点で、ゲートウェイのデプロイは完了していますが、エンドポイントは公開されておらず、HTTPS リスナーはプログラムされていません。次に、CertificateIssuer を使用して HTTPS リスナー証明書をセットアップする TLSPolicy を設定できます。

保護されていないエンドポイントに対してデフォルトの HTTP 403 レスポンスをセットアップする AuthPolicy と、このゲートウェイによって公開されるエンドポイントをさらに保護するために意図的に低く指定されたデフォルトのグローバル制限を設定する RateLimitPolicy を定義します。

また、負荷分散ストラテジーが含まれる DNSPolicy と、ゲートウェイがバックエンドアプリケーション API と通信するための HTTPRoute も定義します。

3.5.1. TLS ポリシーの設定

手順

  1. 次のとおり、ゲートウェイの 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
  2. 次のとおり、TLS ポリシーがコントローラーによって受け入れられたことを確認します。

    kubectl get tlspolicy ${gatewayName}-tls -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'

3.5.2. 認証ポリシーの設定

手順

  1. 次のとおり、ゲートウェイのデフォルトの 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
  2. 次のとおり、認証ポリシーがコントローラーによって受け入れられたことを確認します。

    kubectl get authpolicy ${gatewayName}-auth -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'

3.5.3. 流量制御ポリシーの設定

手順

  1. 次のとおり、ゲートウェイのデフォルトの 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 が適用されるまでに数分間がかかる場合があります。この例では、制限が機能していることを示すために意図的に低く設定されています。

  2. 流量制御が受け入れられたことを確認するには、以下のコマンドを入力します。

    kubectl get ratelimitpolicy ${gatewayName}-rlp -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'

3.5.4. DNS ポリシーの設定

手順

  1. 次のとおり、ゲートウェイの 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 を使用します。この例の geoEU ですが、必要に応じて変更できます。

  2. 次のとおり、DNSPolicy が受け入れられたことを確認します。

    kubectl get dnspolicy ${gatewayName}-dnspolicy -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'

3.5.5. HTTP ルートの作成

注記

テストの目的で、このセクションでは、toystore アプリケーションがデプロイされていることを前提としています。詳細は、4章Connectivity Link アプリケーション開発者のワークフロー を参照してください。

手順

  1. 次のように 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
  2. 次のとおり、ゲートウェイポリシーが適用されたことを確認します。

    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}'
  3. 次のとおり、HTTPS リスナーの準備が完了したことを確認します。

    kubectl get gateway ${gatewayName} -n ${gatewayNS} -o=jsonpath='{.status.listeners[0].conditions[?(@.type=="Programmed")].message}'

3.6. ステップ 6 - 接続と deny-all 認証のテスト

curl を使用して、エンドポイント接続と認証をテストできます。

手順

  • 以下のコマンドを実行します。

    curl -w "%{http_code}" https://$(kubectl get httproute test -n ${gatewayNS} -o=jsonpath='{.spec.hostnames[0]}')

    HTTP 403 レスポンスが表示されるはずです。

3.7. ステップ 7 - 他の名 namespace のゲートウェイを開く

この時点で、ゲートウェイを設定し、そのゲートウェイを Connectivity Link ポリシーで保護し、テストを完了しています。次に、他の namespace の他のチームが使用できるように、ゲートウェイを開くことができます。

手順

  • 以下のコマンドを実行します。

    kubectl patch gateway ${gatewayName} -n ${gatewayNS} --type='json' -p='[{"op": "replace", "path": "/spec/listeners/0/allowedRoutes/namespaces/from", "value":"All"}]'

手順

  1. このゲートウェイを複数のクラスターに分散するには、クラスターごとにこのセットアッププロセスを繰り返します。

    デフォルトでは、これによりラウンドロビン DNS ストラテジーが実装され、複数のクラスターにトラフィックが均等に分散されます。現在の設定では、地理的位置に基づきクライアントにサービスを提供するように、ゲートウェイを簡単にセットアップできます。

  2. このガイドでは複数のクラスターにゲートウェイインスタンスをデプロイしていると想定していますが、その場合の次のステップとして、認識可能なゲートウェイの地理的リージョンを使用して DNS コントローラーを更新します。

    たとえば、北アメリカにクラスターが 1 つあり、EU に別のクラスターがある場合は、適切なポリシーを設定することで、位置に基づきトラフィックをゲートウェイに誘導できます。その場合は、北アメリカのクラスターに対し、DNSPolicy を作成して loadBalancing:geo フィールドを US に設定します。

第4章 Connectivity Link アプリケーション開発者のワークフロー

このセクションでは、アプリケーション開発者が既存のゲートウェイレベルのポリシーをオーバーライドして、アプリケーションレベルのルーティング、認証、流量制御に関する要件を設定する方法を説明します。

前提条件

4.1. ステップ 1: toystore アプリケーションをデプロイする

手順

  1. アプリケーションの名前空間がまだ存在しない場合は、次のように作成します。

    kubectl create ns ${devNS}
  2. デプロイされていない場合は、次のようにして、toystore アプリケーションを開発者名前空間にデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/Kuadrant/Kuadrant-operator/main/examples/toystore/toystore.yaml -n ${devNS}

4.2. ステップ 2 - API の HTTPRoute をセットアップする

手順

  1. 次のコマンドを入力して、Toystore アプリケーション API の HTTP ルートを定義します。

    kubectl apply -f - <<EOF
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: toystore
      labels:
        deployment: toystore
        service: toystore
    spec:
      parentRefs:
      - name: ${gatewayName}
        namespace: ${gatewayNS}
      hostnames:
      - "api.${rootDomain}"
      rules:
      - matches:
        - method: GET
          path:
            type: PathPrefix
            value: "/cars"
        - method: GET
          path:
            type: PathPrefix
            value: "/dolls"
        backendRefs:
        - name: toystore
          port: 80
      - matches:
        - path:
            type: PathPrefix
            value: "/admin"
        backendRefs:
        - name: toystore
          port: 80
    EOF

    この HTTPRoute が配置されると、デプロイしたサービスがゲートウェイによって公開されます。

  2. 次のとおり、HTTPS 経由で API エンドポイントにアクセスできます。

    export INGRESS_HOST=$(kubectl get gtw ${gatewayName} -o jsonpath='{.status.addresses[0].value}' -n api-gateway)
    
    curl --resolve api.${rootDomain}:443:${INGRESS_HOST} "https://api.${rootDomain}/cars"

4.3. ステップ 3 - ゲートウェイの deny-all AuthPolicy をオーバーライドする

次に、Toystore API への認証済みアクセスを許可します。そのためには、前のステップで作成した HTTPRoute リソースをターゲットとする AuthPolicy を定義します。

注記

新しい HTTPRoutes は、ゲートウェイレベルの既存ポリシーの影響を受けます。ユーザーがこの API にアクセスできるようにするためには、該当するゲートウェイポリシーをオーバーライドする必要があります。シンプルに API キーを使用してリクエストを認証できますが、OpenID Connect などの他のオプションも利用できます。

手順

  1. 次のとおり、ユーザーである bob および alice の API キーを定義します。

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: bob-key
      labels:
        authorino.kuadrant.io/managed-by: authorino
        app: toystore
      annotations:
        secret.kuadrant.io/user-id: bob
    stringData:
      api_key: IAMBOB
    type: Opaque
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: alice-key
      labels:
        authorino.kuadrant.io/managed-by: authorino
        app: toystore
      annotations:
        secret.kuadrant.io/user-id: alice
    stringData:
      api_key: IAMALICE
    type: Opaque
    EOF
  2. 次のとおり、AuthPolicy をオーバーライドして API キーの受け入れを開始します。

    kubectl apply -f - <<EOF
    apiVersion: kuadrant.io/v1
    kind: AuthPolicy
    metadata:
      name: toystore
    spec:
      targetRef:
        group: gateway.networking.k8s.io
        kind: HTTPRoute
        name: toystore
      rules:
        authentication:
          "api-key-users":
            apiKey:
              selector:
                matchLabels:
                  app: toystore
            credentials:
              authorizationHeader:
                prefix: APIKEY
        response:
          success:
            filters:
              "identity":
                json:
                  properties:
                    "userid":
                      selector: auth.identity.metadata.annotations.secret\.kuadrant\.io/user-id
    EOF

4.4. ステップ 4 - ゲートウェイの RateLimitPolicy をオーバーライドする

設定されたゲートウェイ制限は、一般的なケースに適した制限セットとして使用できます。ただし、Toystore API の開発者は、特定ユーザーのリクエストには具体的な数の制限を、その他のユーザーに対しては汎用の制限を適用することが必要になる場合もあります。

手順

  1. 次のコマンドを実行して、特定ユーザーに流量制御を設定します。

    kubectl apply -f - <<EOF
    apiVersion: kuadrant.io/v1
    kind: RateLimitPolicy
    metadata:
      name: toystore
    spec:
      targetRef:
        group: gateway.networking.k8s.io
        kind: HTTPRoute
        name: toystore
      limits:
        "general-user":
          rates:
          - limit: 1
            duration: 3
            unit: second
          counters:
          - metadata.filter_metadata.envoy\.filters\.http\.ext_authz.identity.userid
          when:
          - selector: metadata.filter_metadata.envoy\.filters\.http\.ext_authz.identity.userid
            operator: neq
            value: bob
        "bob-limit":
          rates:
          - limit: 2
            duration: 3
            unit: second
          when:
          - selector: metadata.filter_metadata.envoy\.filters\.http\.ext_authz.identity.userid
            operator: eq
            value: bob
    EOF
    注記

    クラスターによっては、RateLimitPolicy が適用されるまでに数分間がかかる場合があります。

    別の例として、bob に対して、その他ユーザーの 2 倍のリクエスト数を付与できます。

  2. 新しいセットアップをテストするには、次のとおり alice としてリクエストを送信します。

    while :; do curl --resolve api.${rootDomain}:443:${INGRESS_HOST} --write-out '%{http_code}\n' --silent --output /dev/null -H 'Authorization: APIKEY IAMALICE' "https://api.${rootDomain}/cars" | grep -E --color "\b(429)\b|$"; sleep 1; done
  3. 次のとおり、bob としてリクエストを送信します。

    while :; do curl --resolve api.${rootDomain}:443:${INGRESS_HOST} --write-out '%{http_code}\n' --silent --output /dev/null -H 'Authorization: APIKEY IAMBOB' "https://api.${rootDomain}/cars" | grep -E --color "\b(429)\b|$"; sleep 1; done
    注記

    プラットフォームエンジニアのワークフローで説明されているとおり、DNS プロバイダーをセットアップして DNSPolicy を設定した場合は、--resolve api.${rootDomain}:443:${INGRESS_HOST} フラグを省略できます。たとえば alice の場合は、次のようになります。

    while :; do curl --write-out '%{http_code}\n' --silent --output /dev/null -H 'Authorization: APIKEY IAMALICE' "https://api.${rootDomain}/cars" | grep -E --color "\b(429)\b|$"; sleep 1; done
    注記

    複数のクラスターでこのガイドの手順を実行すると、HTTPRoute ホスト名の DNS レコードに複数の IP アドレスが含まれるようになります。これは、DNS プロバイダーが異なるレスポンスをルックアップに送信するため、リクエストがクラスターをまたいでラウンドロビンパターンで実行されることを意味します。

付録A Red Hat サブスクリプションの使用

Red Hat Connectivity Link は、ソフトウェアサブスクリプションを通じて提供されます。サブスクリプションを管理するには、Red Hat カスタマーポータルでアカウントにアクセスします。

サブスクリプションの管理

  1. access.redhat.com に移動します。
  2. アカウントがない場合は作成します。
  3. アカウントにログインします。
  4. メニューバーで Subscriptions をクリックし、サブスクリプションを表示および管理します。

改訂日時: 2025-06-12

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る