IngressTrait

IngressTraitカスタム・リソースには、アプリケーションへのトラフィック・ルーティングのホストおよびパス・ルールの構成が含まれます。IngressTraitを指定するサンプルApplicationConfigurationを次に示します。このIngressTraitを示すサンプル・アプリケーションをデプロイするには、Hello World Helidonを参照してください。

apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
  name: hello-helidon-appconf
  namespace: hello-helidon
  annotations:
    version: v1.0.0
    description: "Hello Helidon application"
spec:
  components:
    - componentName: hello-helidon-component
      traits:
        - trait:
            apiVersion: oam.verrazzano.io/v1alpha1
            kind: IngressTrait
            metadata:
              name: hello-helidon-ingress
            spec:
              rules:
                - paths:
                    - path: "/greet"
                      pathType: Prefix

サンプル構成では、IngressTrait hello-helidon-ingresshello-helidon-componentアプリケーション・コンポーネントに設定され、パスとパス・タイプを構成するイングレス・ルールを定義します。これにより、アプリケーションへの外部アクセス用のルートが公開されます。IngressRulehostsリストが指定されていないため、DNSホスト名が自動的に生成されます。

たとえば、サンプル・アプリケーション構成が正常にデプロイされると、IngressTraitで指定されたpathおよび生成されたホスト名でアプリケーションにアクセスできます。

$ HOST=$(kubectl get gateways.networking.istio.io hello-helidon-hello-helidon-gw -n hello-helidon -o jsonpath={.spec.servers[0].hosts[0]})
$ echo $HOST
hello-helidon-appconf.hello-helidon.11.22.33.44.nip.io

$ curl -sk -X GET https://${HOST}/greet

ロード・バランサのセッション・アフィニティは、宛先ルールにHTTP Cookieを使用して構成します。次に示すApplicationConfigurationのサンプルは更新したもので、宛先ルールにHTTP Cookieが使用されています。

apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
  name: hello-helidon-appconf
  namespace: hello-helidon
  annotations:
    version: v1.0.0
    description: "Hello Helidon application"
spec:
  components:
    - componentName: hello-helidon-component
      traits:
        - trait:
            apiVersion: oam.verrazzano.io/v1alpha1
            kind: IngressTrait
            metadata:
              name: hello-helidon-ingress
            spec:
              rules:
                - paths:
                    - path: "/greet"
                      pathType: Prefix
                - destination:
                    httpCookie:
                      name: sessioncookie
                      path: "/"
                      ttl: 600

さらに、特定のリクエスト・プリンシパルへのアクセスを制限し、オプションで追加条件に基づいて予測される認可ポリシーを、パスに対して指定できます。パスのリクエストは、定義した条件を満たす一致リクエスト・プリンシパルに制限されます。それ以外の場合、リクエストは拒否されます。

apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
  name: hello-helidon-appconf
  namespace: hello-helidon
  annotations:
    version: v1.0.0
    description: "Hello Helidon application"
spec:
  components:
    - componentName: hello-helidon-component
      traits:
        - trait:
            apiVersion: oam.verrazzano.io/v1alpha1
            kind: IngressTrait
            metadata:
              name: hello-helidon-ingress
            spec:
              rules:
                - paths:
                    - path: "/greet"
                      pathType: Prefix
                      authorizationPolicy:
                        rules:
                          - from:
                              requestPrincipals:
                                - "*"
                              when:
                                - key: request.auth.claims[realm_access][roles]
                                  values:
                                    - "customer"

ホスト名に関連する次のルールを使用します:

  • ホスト名を指定した場合、証明書を指定するオプションがあります。証明書を指定しないと、Verrazzanoによって証明書が生成されます。
  • 証明書を指定する場合は、ホスト名を指定する必要があります。
  • ホスト名または証明書を指定しないと、Verrazzanoによってそれらが生成されます。

IngressTrait

フィールド 説明 必須
apiVersion 文字列 oam.verrazzano.io/v1alpha1 はい
kind 文字列 IngressTrait はい
metadata ObjectMeta メタデータのフィールドについては、Kubernetes APIのドキュメントを参照してください。 いいえ
spec IngressTraitSpec イングレス・トレイトの希望の状態。 はい

IngressTraitSpec

IngressTraitSpecは、イングレス・トレイトの希望の状態を指定します。

フィールド 説明 必須
rules IngressRule配列 イングレス・トレイトに対するイングレス・ルールのリスト。 はい
tls IngressSecurity イングレス・トレイトのセキュリティ・パラメータ。これは、IngressRuleに特定のホストが指定されている場合にのみ必要です。 いいえ

IngressRule

IngressRuleは、イングレス・トレイトのルールを指定します。

フィールド 説明 必須
hosts 文字列配列 イングレス・トレイトによって公開される1つ以上のホスト。ワイルドカード・ホストまたは空のホストは除外されます。有効なホストが指定されていない場合は、DNSホスト名が自動的に生成され、使用されます。 いいえ
paths IngressPath配列 イングレス・トレイト用に公開されるパス。 はい
destination IngressDestination イングレス・パスの宛先ホストおよびポート。 いいえ

IngressPath

IngressPathは、イングレス・トレイト用に公開する特定のパスを指定します。

フィールド 説明 必須
path 文字列 パスが指定されない場合、デフォルトでスラッシュ(/)に設定されます。 いいえ
pathType 文字列 パス・タイプ値は大/小文字が区別され、次のように書式設定されます:
  • exact: 文字列の完全一致
  • prefix: 接頭辞ベースの一致
  • regex: 正規表現ベースの一致
指定されたイングレス・パスにpathTypeが含まれていない場合、パスが/の場合はprefix、それ以外の場合はexactにデフォルト設定されます。
いいえ
authorizationPolicy AuthorizationPolicy リクエストを承認するためのルールのセットを定義します。 いいえ

IngressDestination

IngressDestinationは、イングレス・パスの特定の宛先ホストおよびポートを指定します。

フィールド 説明 必須
host 文字列 宛先ホスト。 いいえ
port uint32 宛先ポート。 いいえ
httpCookie HttpCookie セッション・アフィニティCookie。 いいえ

HttpCookie

HttpCookieは、イングレス・トレイのセッション・アフィニティCookieを指定します。

フィールド 説明 必須
name 文字列 HTTP Cookieの名前。 いいえ
path 文字列 HTTP Cookieのパス。 いいえ
ttl uint32 HTTP Cookieの存続期間(秒)。 いいえ

IngressSecurity

IngressSecurityは、イングレス・トレイトのトランスポートを保護する証明書を含むシークレットを指定します。

フィールド 説明 必須
secretName 文字列 トランスポートを保護している証明書を含むシークレットの名前。ここでシークレットを指定することは、IngressRuleで指定された特定のホストに対して証明書が作成されたことを意味します。 はい

AuthorizationPolicy

AuthorizationPolicyは、リクエストを承認するためのルールのセットを定義します。

フィールド 説明 必須
rules 文字列配列 ルールを使用して、リクエスト・プリンシパルのリクエストと、オプションの条件リストに指定された特定のパスを照合します。 はい

AuthorizationRule

AuthorizationRuleは、条件リストに該当する特定のパスにアクセスする、リクエスト・プリンシパル・リストのリクエストを照合します。

フィールド 説明 必須
from AuthorizationRuleFrom リクエストにアクセスするためのリクエスト・プリンシパルを指定します。アスタリスク(*)は、リクエストにリクエスト・プリンシパルが見つかった場合など、値が空でない場合と一致します。 はい
when AuthorizationRuleCondition リクエストにアクセスするための追加条件のリストを指定します。 いいえ

AuthorizationRuleFrom

リクエスト・プリンシパルのリストを指定します。

フィールド 説明 必須
requestPrincipals 文字列配列 リクエストにアクセスするためのリクエスト・プリンシパルを指定します。 はい

AuthorizationRuleCondition

承認のためのその他の必須属性を指定します。

フィールド 説明 必須
key 文字列 リクエスト属性の名前。 はい
values 文字列配列 属性で許可される値のリスト。 はい