Citrix ADC ingress controller

GitOps で API ゲートウェイをデプロイする

カスタムリソース定義 (CRD) は、クラウドネイティブ展開で API ゲートウェイポリシーを設定する主な方法です。運用チームは構成ポリシー (ルーティング、認証、書き換え、Web アプリケーションファイアウォール (WAF) など) を作成し、CRD の形式で適用します。API Gateway コンテキストでは、これらのポリシーは特定の API およびこれらの API をホストするアップストリームに適用されます。

API 開発者は、API の詳細を使用するために、クライアントソフトウェア開発者およびピアサービス実装チーム向けに、API の詳細を Open API 仕様形式で文書化します。API ドキュメントには、ベースパス、パス、メソッド、認証、承認などの情報が含まれています。

運用チームは API 仕様書の情報を使用して API Gateway を設定できます。ソース管理ソリューションである Git は、開発者や運用チームによって広く使用されています。GitOps ソリューションにより、開発チームと運用チーム間のコラボレーションとコミュニケーションが容易になります。GitOps は、Kubernetes の安定性を損なうことなく、より速く、より合理化された継続的なデリバリーを作成するのに役立ちます。

GitOps ソリューションを使用した API Gateway のデプロイメントにより、運用チームはソフトウェア開発者が作成した API 仕様ドキュメントを API ゲートウェイ構成で使用できます。このソリューションにより、API 開発チームと運用チーム間のタスクと情報交換が自動化されます。

API ゲートウェイ用 GitOps ソリューションについて

GitOps ソリューションは主に 3 つのエンティティで構成されています。

  • API 仕様ドキュメントを開く
  • ポリシーテンプレート CRD
  • API ゲートウェイデプロイ CRD

API 仕様ドキュメントを開く

API 開発者または API デザイナーによって作成されたこのドキュメントは、API 情報を提供します。GitOps ソリューションでは、Open API 仕様書の以下の詳細を使用します。

  • ベースパス
  • Path
  • 方法
  • タグ
  • 認証
  • 承認

以下は、ポリシーの自動作成に使用される詳細 (赤色) を含む Open API 仕様ファイルのサンプルです。

オープン API 仕様

ポリシーテンプレート CRD

CRD は API ゲートウェイインスタンスを設定する主要な方法です。運用チームは CRD 実装を作成して管理します。従来のワークフローでは、ポリシーの作成の一環として、CRD インスタンスのアップストリームや API パスなどのターゲットの詳細を運用チームが手動で入力します。GitOps ソリューションでは、API パスとアップストリームの詳細が自動的に導出されます。運用チームはターゲットの詳細を指定せずに CRD を作成し、ソリューションはそのような CRD インスタンスをポリシーテンプレートとして参照します。

GitOps ソリューションでは、次のポリシーテンプレートがサポートされています。

  • 書き換えポリシー
  • レート制限ポリシー
  • 認証ポリシー
  • WAF

書き換えポリシーテンプレートの例を次に示します。

:CRD インスタンスの作成方法については、個々の CRD を参照してください。

ポリシーテンプレート

API ゲートウェイデプロイ CRD

API Gateway デプロイ CRD は、API 仕様ドキュメントをポリシーテンプレートにバインドします。この CRD により、API リソースとアップストリームサービス、およびルーティングとセキュリティに関連する API ゲートウェイポリシーとのマッピングが可能になります。API Gateway デプロイ CRD は、開発チームから受け取ったデータを使用して運用チームによって管理されます。

API Gateway デプロイ CRD は以下を構成します。

  • Git リポジトリの詳細
  • エンドポイントリスナー
  • API からアップストリームへのマッピング
  • API からポリシーへのマッピング
  • Open API 認証ポリシーが認証ポリシーテンプレートマッピングを参照する

また、API ゲートウェイ CRD は OpenAPI 仕様 (OAS) ドキュメントのフェッチ用に GIT 以外のソースもサポートしています。現在、HTTP と HTTPS の URL ソースの両方がサポートされています。これらの URL はパスワードで保護でき、基本 HTTP 認証がサポートされています。認証情報は、Git ベースの OAS ファイルソースと同じフィールドを使用して設定できます。

次の図は、API セレクターとポリシーマッピングを使用して API 仕様をポリシーテンプレートにバインドする API Gateway デプロイ CRD を示しています。

オープン API 仕様

/pet 正規表現で始まる API は path regexp パターンで選択され、 /play を含む API はplay** タグで選択されます。API 仕様書内のセキュリティ定義は、認証 CRD テンプレートで使用可能な認証、承認、および監査設定にマッピングされます。

API ゲートウェイ CRD の設定

API ゲートウェイ CRD は、Swagger 仕様で定義されている API リソースを、他の CRD で定義されたポリシーにバインドします。

前提条件

次の CRD オブジェクトに CRD 定義を適用します。

API 定義

Git ウォッチャーが Open API 仕様ファイルを監視する Git リポジトリに関する情報を提供します。

API の定義:Git リポジトリへのアクセスの詳細

フィールド 説明
Repository Git リポジトリ URL を指定します。
Branch Git ブランチ名を指定します (デフォルトでは master)。
oas_secret_ref Git アクセスシークレット参照を Kubernetes シークレットオブジェクト名として指定します。注: シークレットを作成するときは、Git アクセス認証情報のシークレットフィールド名としてusernameおよびpasswordをそのまま使用します。
Files これらの OAS URL の認証情報には、 oas_secret_ref フィールド、または user_name と password フィールドの組み合わせからアクセスできます。

API プロキシ

API Gateway フロントエンドで API を公開するために使用されるエンドポイント (VIP) 設定に関する情報を提供します。

api_proxy: VIP の詳細

フィールド 説明
ip_address エンドポイント (VIP) の IP アドレスを指定します。
port エンドポイントポートを指定します。
protocol プロトコル (HTTP/HTTPS) を指定します。
secret エンドポイント設定の SSL 証明書シークレットを指定します。

ポリシーマッピング

API リソースをアップストリームサービスおよびポリシーテンプレートにマッピングします。このセクションの情報の一部は、運用チームが CRD を作成するときに開発者から収集されます。

セクション [サブセクション] フィールド [サブフィールド] 説明
ポリシー       ポリシーとアップストリームマッピングを指定します。
    名前   ポリシーの名前を指定します。CRD インスタンス内では一意です。
  [セレクタ]     API リソースを選択するためのフィルタのリスト。
    API   API 選択の Regexp パターンを指定します。このパターンと一致するすべての API が、このブロックからポリシーを適用するために選択されます。
    method   HTTP 動詞のリスト。API リソース動詞がリスト内の ANY と一致する場合は選択されます。
    タグ   API と照合するタグのリスト。これらのタグは API 仕様書内のタグと照合されますragexp ベースのパスパターンまたはタグを使用して、ポリシーに一致させることができます。
  上流。     選択したポリシーのアップストリームを指定します。
    Service   バックエンドサービス名を指定します。
    ポート   バックエンドサービスポートを指定します。
  ポリシーバインディング     選択した API に適用されるポリシーリストを指定します。
      ポリシーテンプレートのタイプ ポリシーの正確なタイプを指定します。サポートされるタイプは WAF、リライトポリシー、レートリミットです。
      名前 ポリシーテンプレートの名前を指定します。

AAA マッピング

API 仕様書内の認証参照を、認証 CRD テンプレート内の使用可能なポリシー定義セクションにマッピングします。

セクション [サブセクション] フィールド [サブフィールド] 説明
aaa       認証、承認、および監査ポリシーセクションのマッピング。
    Crd_name   認証 CRD テンプレートの名前を指定します。
  マッピング     API 仕様のセキュリティポリシー参照を認証 CRD テンプレートの適切なセクションにマッピングします。:API 仕様が CRD テンプレートのポリシーセクション名と一致する文字列を参照する場合、明示的なマッピングは不要です。

API Gateway CRD をデプロイするには、次の手順を実行します。

  1. API ゲートウェイ CRDをダウンロードします。

  2. 以下のコマンドを使用して API Gateway CRD をデプロイします。

        kubectl create -f apigateway-crd.yaml`
    

    API ゲートウェイ CRD の設定例を次に示します。

    apiVersion: citrix.com/v1beta1
    kind: apigatewaypolicy
    metadata:
      name: apigatewaypolicyinstance
    spec:
        api_definition:
            repository: "https://code.citrite.net/scm/cnn/cic-gitops.git"
            branch: "modify-test-branch"
            oas_secret_ref: "mysecret"
            files:
                - "test_gitwatcher/petstore.yaml"
                - "test_gitwatcher/playstore.yaml"
        api_proxy:
            ipaddress: "10.106.172.83"
            port:  80
            protocol: "http"
            secret: "listner-secret"
        policies:
          - name: "p1"
            selector:
                - api: "/pet.\*"
                  method: ["GET", "POST"]
            upstream:
                service: "pet-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops-slow"
          - name: "p2"
            selector:
                - api: "/user.\*"
                  method: ["GET", "POST"]
            upstream:
                service: "user-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops-slow"
          - name: "p3"
            selector:
                - tags: ["play"]
            upstream:
                service: "play-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops"
                rewritepolicy:
                    name: "prefixurl"
                waf:
                    name: "buffoverflow"
        aaa:
          - crd_name: authgitops
            mappings:
              - petstore_auth: jwt-auth-provider
              - api_key: introspect-auth-provider
    <!--NeedCopy-->
    

Web インサイトベースの分析のサポート

Web インサイトベースの分析が API ゲートウェイ CRD でサポートされるようになりました。GitOps を使用すると、次の Web Insight パラメーターがデフォルトで有効になります。

  • httpurl
  • httpuseragent
  • httphost
  • httpmethod
  • httpcontenttype
GitOps で API ゲートウェイをデプロイする