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: MetricsTrait
            spec:
                scraper: verrazzano-system/vmi-system-prometheus-0
        - 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-appconf-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

あるいは、IngressRuleに特定のホスト名を指定することもできます。これは、特定のホストに対してシークレットと証明書が作成され、関連付けられたIngressSecurity secretNameフィールドにシークレット名が指定されていることを意味します。

ロード・バランサのセッション・アフィニティは、宛先ルールに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: MetricsTrait
            spec:
                scraper: verrazzano-system/vmi-system-prometheus-0
        - 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

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にデフォルト設定されます。
いいえ

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で指定された特定のホストに対して証明書が作成されたことを意味します。 はい