Citrix ADC ingress controller

Citrix ingress controller を使用したクロスオリジンリソース共有ポリシーの設定

Citrix では、Kubernetes 用の CORS CRD と呼ばれるカスタムリソース定義(CRD)を提供しています。CORS CRDを使用して、Citrix ADC上のCitrix ingress controller でクロスオリジンリソース共有(CORS)ポリシーを構成できます。

CORSって何ですか

クロスオリジンリソース共有は、特定の Web アプリケーションが別のオリジンの別の Web アプリケーションとリソースを共有できるかどうかをブラウザーが判断できるようにするメカニズムです。これにより、ユーザーは元のドメイン外のドメインからリソース (画像、フォント、ビデオなど) をリクエストできます。

CORS プリフライト

JavaScript が URL への POST の発行を許可する前に、Webブラウザはpre-flightリクエストを実行します。プリフライトリクエストは、POST ではなく OPTIONS メソッドを使用して、同じ URL を使用してサーバーに送信する単純なリクエストです。Web ブラウザは、HTTP ヘッダーの CORS 関連ヘッダーをチェックして、ユーザーに代わって POST 操作が許可されているかどうかを判断します。

CORS リクエスト

CORS CRD 定義

CORS CRD は、Citrix ingress controller GitHub リポジトリ cors-crd.yamlで入手できます。CORS CRDは、APIゲートウェイとして機能するIngress Citrix ADCでCORSポリシーを定義するために必要なさまざまなオプションの属性を提供します。必須の属性には、servicenamesallow_originallow_methodsおよびallow_headersがあります。

CORS CRD で提供される属性は次のとおりです。

属性 説明
servicenames CORS ポリシーを適用する Kubernetes サービスのリストを指定します。
allow_origin 許可されたオリジンのリストを指定します。受信オリジンはこのリストに対してスクリーニングされます。
allow_methods CORS プロトコルの一部として許可されるメソッドの一覧を指定します。
allow_headers CORS プロトコルの一部として許可されるヘッダーのリストを指定します。
max_age Access-Control-Allow-MethodsおよびAccess-Control-Allow-Headersヘッダーから提供された情報をキャッシュできる秒数を指定します。デフォルト値は 86400 です。
allow_credentials リクエストの認証情報モードが「include」の場合に、レスポンスを共有できるかどうかを指定します。デフォルト値は ‘true’ です。

CORS CRD をデプロイする

CORS CRD を展開するには、次の手順を実行します。

  1. CORS CRDをダウンロードします。

  2. 次のコマンドを使用して CORS CRD を展開します。

    kubectl create -f cors-crd.yaml
    

    次に例を示します:

    $ kubectl create -f cors-crd.yaml
    customresourcedefinition.apiextensions.k8s.io/corspolicies.citrix.com created
    $ kubectl get crd
    NAME                         CREATED AT
    corspolicies.citrix.com      2021-05-21T20:01:13Z
    

CORS ポリシー設定の書き方

Citrix が提供する CORS CRD を Kubernetes クラスターに展開したら、CORS ポリシー構成を.yamlファイルに定義できます。.yamlファイルのkindフィールドでcorspolicyを使用し、specセクションで、ポリシー設定の要件に基づいて CORS CRD 属性を追加します。

次の YAML ファイルは、servicenames フィールドにリストされたサービスに、設定されたポリシーを適用します。オリジンが allow_origins [“random1234.com”, “hotdrink.beverages.com”] のいずれかである場合、Citrix ADCはプリフライトリクエストに対して200 OKレスポンスコードで応答します。応答には、設定されたallow_methodsallow_headersおよびmax_ageが含まれます 。

apiVersion: citrix.com/v1beta1
kind: corspolicy
metadata:
  name: corspolicy-example
spec:
  servicenames:
   - "cors-service"
  allow_origin:
   - "random1234.com"
   - "hotdrink.beverages.com"
  allow_methods:
   - "POST"
   - "GET"
   - "OPTIONS"
  allow_headers:
   - "Origin"
   - "X-Requested-With"
   - "Content-Type"
   - "Accept"
   - "X-PINGOTHER"
  max_age: 86400
  allow_credentials: true
<!--NeedCopy-->

ポリシー設定を定義したら、次のコマンドを使用して.yamlファイルを展開します。

user@master:~/cors$ kubectl create -f corspolicy-example.yaml
corspolicy.citrix.com/corspolicy-example created

Citrix ingress controller は、Ingress Citrix ADC デバイスにポリシー構成を適用します。

Citrix ingress controller を使用したクロスオリジンリソース共有ポリシーの設定