すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:MSE Ingressの高度な使用

最終更新日:Dec 10, 2024

Microservices Engine (MSE) Ingressは、Kubernetesクラスター内のサービスへの外部アクセスを管理するためのレイヤー7負荷分散を提供するAPIオブジェクトです。 このトピックでは、MSE Ingressの高度な使用方法について説明します。 これにより、クラスターのイングレストラフィックを管理できます。

カナリアリリース

MSE Ingressでは、複雑なトラフィックルーティングを処理するために、ヘッダー、クエリパラメーター、Cookie、または重みに基づいたカナリアリリースを設定できます。 Ingressリソース設定にアノテーションを追加することで、カナリアリリース機能を設定できます。 カナリアリリース機能を有効にするには、注釈nginx.ingress.kubernetes.io/canary: "true" を追加する必要があります。 このセクションでは、さまざまなアノテーションを使用してさまざまな種類のカナリアリリースメソッドを設定する方法について説明します。

説明

4種類のカナリアリリースメソッドがすべて設定されている場合、MSE Ingressは次の優先順位でカナリアリリースメソッドを選択します。ヘッダーベースのカナリアリリースまたはクエリパラメーターベースのカナリアリリース> クッキーベースのカナリアリリース> 重みベースのカナリアリリース。

ヘッダーベースのカナリアリリース

  • nginx.ingress.kubernetes.io/canary-by-headerアノテーションのみを設定すると、リクエストはヘッダーに基づいて送信されます。 ヘッダーの値が常にの場合、リクエストはカナリアバージョンに送信されます。 それ以外の場合、要求はカナリアバージョンに送信されません。

  • nginx.ingress.kubernetes.io/canary-by-header-valueとnginx.ingress.kubernetes.io/canary-by-headerの両方のアノテーションを設定すると、リクエストヘッダーのキーと値がアノテーションで指定されたものと同じである場合にのみ、リクエストがカナリアバージョンに送信されます。 それ以外の場合、要求はカナリアバージョンに送信されません。

説明

NGINX IngressとALB Ingressは、カナリアリリース中に最大2つのバージョンのサービスをサポートします。 MSE Ingressは、カナリアリリース中に3つ以上のバージョンのサービスをサポートします。 バージョンの数は制限されていません。

例:

  • リクエストヘッダーがmse:alwaysの場合、リクエストはcanaryバージョンのdemo-service-canaryに送信されます。 それ以外の場合、リクエストは基本バージョンのデモサービスに送信されます。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "mse"
      名前: demo-canary
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service-canary
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "mse"
      名前: demo-canary
    spec:
      ingressClassName: mse
      ルール:
        -http:
            paths:
              -パス: /hello
                バックエンド:
                  serviceName: demo-service-canary
                  servicePort: 80
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      名前: デモ
    spec:
      ingressClassName: mse
      ルール:
        -http:
            paths:
              -パス: /hello
                バックエンド:
                  serviceName: デモサービス
                  servicePort: 80 
  • リクエストヘッダーがmse:v1の場合、リクエストはカナリアバージョンdemo-service-canary-v1に送信されます。 リクエストヘッダーがmse:v2の場合、リクエストはカナリアバージョンdemo-service-canary-v2に送信されます。 それ以外の場合、リクエストは基本バージョンのデモサービスに送信されます。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "mse"
        nginx.ingress.kubernetes.io/canary-by-header-value: "v1"
      名前: demo-canary-v1
    spec:
      ingressClassName: mse
      rules:
        -http:
            パス:
              - backend:
                  service:
                    名前: demo-service-canary-v1
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "mse"
        nginx.ingress.kubernetes.io/canary-by-header-value: "v2"
      名前: demo-canary-v2
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service-canary-v2
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "mse"
        nginx.ingress.kubernetes.io/canary-by-header-value: "v1"
      名前: demo-canary-v1
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /hello
                backend:
                  serviceName: demo-service-canary-v1
                  servicePort: 80
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "mse"
        nginx.ingress.kubernetes.io/canary-by-header-value: "v2"
      名前: demo-canary-v2
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /hello
                backend:
                  serviceName: demo-service-canary-v2
                  servicePort: 80
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /hello
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

パラメーターベースのカナリアリリースのクエリ

  • mse.ingress.kubernetes.io/canary-by-queryの設定

    リクエストは、URLのクエリパラメータに基づいて送信されます。 リクエストのURLで、クエリパラメータキーがアノテーションで指定されたものと同じで、クエリパラメータ値が常にである場合、リクエストはカナリアバージョンに送信されます。 それ以外の場合、要求はカナリアバージョンに送信されません。

  • mse.ingress.kubernetes.io/canary-by-query値とmse.ingress.kubernetes.io/canary-by-query

    リクエストのURLで、クエリパラメータキークエリパラメータ値がアノテーションで指定されたものと同じ場合、リクエストはカナリアバージョンに送信されます。 それ以外の場合、要求はカナリアバージョンに送信されません。

    説明

    ヘッダーベースのカナリアリリースは、クエリパラメータベースのカナリアリリースと一緒に使用できます。 両方のカナリアリリースメソッドの一致条件が満たされている場合にのみ、要求がカナリアバージョンに送信されます。

例:

  • リクエストURLのクエリパラメーターがcanary:grayに設定されている場合、リクエストはcanaryバージョンdemo-service-canaryに送信されます。 それ以外の場合、リクエストは基本バージョンのデモサービスに送信されます。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion:networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        mse.ingress.kubernetes.io/canary-by-query: "canary"
        mse.ingress.kubernetes.io/canary-by-query-value: "gray"
      名前: demo-canary
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service-canary
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        mse.ingress.kubernetes.io/canary-by-query: "canary"
        mse.ingress.kubernetes.io/canary-by-query-value: "gray"
      名前: demo-canary
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /hello
                backend:
                  serviceName: demo-service-canary
                  servicePort: 80
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /hello
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  • リクエストURLのクエリパラメーターがcanary:grayに設定され、x-user-id: testがリクエストヘッダーに含まれている場合、リクエストはcanaryバージョンのdemo-service-canaryに送信されます。 それ以外の場合、リクエストは基本バージョンのデモサービスに送信されます。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion:networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        mse.ingress.kubernetes.io/canary-by-query: "canary"
        mse.ingress.kubernetes.io/canary-by-query-value: "gray"
        nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
        nginx.ingress.kubernetes.io/canary-by-header-value: "test"
      名前: demo-canary
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service-canary
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        mse.ingress.kubernetes.io/canary-by-query: "canary"
        mse.ingress.kubernetes.io/canary-by-query-value: "gray"
        nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
        nginx.ingress.kubernetes.io/canary-by-header-value: "test"
      名前: demo-canary
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /hello
                backend:
                  serviceName: demo-service-canary
                  servicePort: 80
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /hello
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

クッキーベースのカナリアリリース

nginx.ingress.kubernetes.io/canary-by-cookieアノテーションを設定すると、リクエストはcookieに基づいて送信されます。 cookiealwaysに設定されている場合、リクエストはカナリアバージョンに送信されます。 それ以外の場合、要求はカナリアバージョンに送信されません。

説明

cookieベースのカナリアリリースを設定する場合、カスタムcookie値はサポートされません。 設定されたcookie値は常にである必要があります。

たとえば、リクエストcookieがdemo=alwaysの場合、リクエストはcanaryバージョンのdemo-service-canaryに送信されます。 それ以外の場合、リクエストは基本バージョンのデモサービスに送信されます。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-cookie: "demo"
  名前: demo-canary
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: demo-service-canary
                port: 
                  number: 80
            パス: /hello
            pathType: 正確
---
apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /hello
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-cookie: "demo"
  名前: demo-canary
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /hello
            backend:
              serviceName: demo-service-canary
              servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /hello
            backend:
              serviceName: デモサービス
              servicePort: 80 

体重ベースのカナリアリリース

注釈

説明

nginx.ingress.kubernetes.io/canary-weight

カナリアバージョンに送信されるリクエストの割合を指定します。 値は0から100の範囲の整数です。

nginx.ingress.kubernetes.io/canary-weight-total

合計の重みを指定します。 デフォルト値:100

たとえば、カナリアバージョンのdemo-service-canary-v1の重みを30% に設定し、カナリアバージョンのdemo-service-canary-v2の重みを20% に設定し、基本バージョンのデモサービスの重みを50% に設定できます。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "30"
  名前: demo-canary-v1
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: demo-service-canary-v1
                port: 
                  number: 80
            パス: /hello
            pathType: 正確
---
apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "20"
  名前: demo-canary-v2
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: demo-service-canary-v2
                port: 
                  number: 80
            パス: /hello
            pathType: 正確
---
apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /hello
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "30"
  名前: demo-canary-v1
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /hello
            backend:
              serviceName: demo-service-canary-v1
              servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "20"
  名前: demo-canary-v2
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /hello
            backend:
              serviceName: demo-service-canary-v2
              servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /hello
            backend:
              serviceName: デモサービス
              servicePort: 80 

サービスサブセット

サービスサブセットは、サービスが複数の展開に関連付けられるシナリオに適しています。 Ingressを使用して、サービスのポッドのサブセットにリクエストを転送できます。 ほとんどの場合、リクエストは特定のラベルを持つサービスポッドに転送されます。 次のいずれかの方法を使用して、サービスサブセットを設定できます。

MseIngressConfigでのポッドラベルの使用

注釈mse.ingress.kubernetes.io/service-subsetを使用して、サービスサブセットを設定します。 デフォルトでは、MseIngressConfigで設定されたサービスサブセットは、opensergo.io/canaryというプレフィックスが付いたポッドラベルにマップされます。 このアノテーションの意味は次のとおりです。

  • このアノテーションが "またはbaseに設定されている場合、リクエストは、ラベルにopensergo.io/canary: " が含まれているポッド、またはラベルキーの先頭にopensergo.io/canaryが付いていないポッドに転送されます。 このようにして、リクエストは空のラベルを持つポッドまたはラベルを持たないポッドに転送されます。

  • このアノテーションが "" またはbaseに設定されていない場合、リクエストはラベルにopensergo.io/canary-{指定値}: {指定値} を含むポッドに転送されます。 たとえば、このアノテーションをgrayに設定した場合、リクエストは、ラベルにopensergo.io/canary-gray: grayが含まれているポッドに転送されます。

たとえば、go-httpbinという名前のKubernetesサービスは、2つのデプロイに関連付けられています。 1つのデプロイメントで管理されるポッドには、プレフィックスがopensergo.io/canaryであるラベルキーはありません。 他の展開で管理されるポッドには、canaryラベルopensergo.io/canary-gray: grayがあります。 サンプル設定:

# go-httpbin k8sサービス
apiVersion: v1
種類: サービス
メタデータ:
  名前: go-httpbin
  namespace: デフォルト
spec:
  ポート:
    - port: 8080
      protocol: TCP
  セレクタ:
    アプリ: go-httpbin
---
# go-httpbinベースの展開
apiVersion: apps/v1
kind: 配置
メタデータ:
  名前: go-httpbin-base
  namespace: デフォルト
spec:
  replicas: 1
  セレクタ:
    matchLabels:
      アプリ: go-httpbin
  template:
    metadata:
      labels:
        アプリ: go-httpbin
    仕様:
      containers:
        -画像: registry.cn-hangzhou.aliyuncs.com/mse/go-httpbin
          args:
            -"-- version=base"
          imagePullPolicy: Always
          名前: go-httpbin
---
# go-httpbinグレー展開
apiVersion: apps/v1
kind: 配置
メタデータ:
  名前: go-httpbin-gray
  namespace: デフォルト
spec:
  replicas: 1
  セレクタ:
    matchLabels:
      アプリ: go-httpbin
  template:
    metadata:
      labels:
        アプリ: go-httpbin
        opensergo.io /カナリアグレー: グレー
    仕様:
      containers:
        -画像: registry.cn-hangzhou.aliyuncs.com/mse/go-httpbin
          args:
            -"-- version=gray"
          imagePullPolicy: Always
          名前: go-httpbin 

e example.com/testリクエストのヘッダーにx-user-id: testが含まれている場合、リクエストはgo-httpbin-grayに転送されます。 それ以外の場合、リクエストはhttpbin-baseに転送されます。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion:networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
    nginx.ingress.kubernetes.io/canary-by-header-value: "test"
    # canaryラベルopensergo.io/canary-gray: grayを持つポッドにリクエストを転送します。
    mse.ingress.kubernetes.io/service-subset: グレー
  名前: demo-canary
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: go-httpbin
                port: 
                  数: 8080
            パス: /test
            pathType: 正確
---
apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    # ラベルの先頭にopensergo.io/canaryが付いていないポッドにリクエストを転送します。
    mse.ingress.kubernetes.io/service-subset: ""
  名前: デモ
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: go-httpbin
                port: 
                  数: 8080
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
    nginx.ingress.kubernetes.io/canary-by-header-value: "test"
    # canaryラベルopensergo.io/canary-gray: grayを持つポッドにリクエストを転送します。
    mse.ingress.kubernetes.io/service-subset: グレー
  名前: demo-canary
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /test
            backend:
              # go-httpbinサービスを設定し、アノテーションでバージョンを指定します。
              serviceName: go-httpbin
              servicePort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    # ラベルの先頭にopensergo.io/canaryが付いていないポッドにリクエストを転送します。
    mse.ingress.kubernetes.io/service-subset: ""
  名前: デモ
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /test
            backend:
              # go-httpbinサービスを設定し、アノテーションでバージョンを指定します。
              serviceName: go-httpbin
              servicePort: 8080 

カスタムラベルの使用

mse.ingress.kubernetes.io/service-subsetmse.ingress.kubernetes.io/subset-labelsの両方のアノテーションを使用して、サブセットが属するポッドを定義するために使用されるカスタムラベルを設定できます。

説明

この場合、サブセットは、プレフィックスがopensergo.io/canaryであるラベルにマッピングされなくなります。

たとえば、go-httpbinという名前のKubernetesサービスは、2つのデプロイに関連付けられています。 1つのデプロイメントで管理されるポッドには、プレフィックスがopensergo.io/canaryであるラベルキーはありません。 他の展開で管理されるポッドには、canaryラベルopensergo.io/canary-gray: grayがあります。 サンプル設定:

# go-httpbin k8sサービス
apiVersion: v1
種類: サービス
メタデータ:
  名前: go-httpbin
  namespace: デフォルト
spec:
  ポート:
    - port: 8080
      protocol: TCP
  セレクタ:
    アプリ: go-httpbin
---
# go-httpbinベースの展開
apiVersion: apps/v1
kind: 配置
メタデータ:
  名前: go-httpbin-base
  namespace: デフォルト
spec:
  replicas: 1
  セレクタ:
    matchLabels:
      アプリ: go-httpbin
  template:
    metadata:
      labels:
        アプリ: go-httpbin
    仕様:
      containers:
        -画像: registry.cn-hangzhou.aliyuncs.com/mse/go-httpbin
          args:
            -"-- version=base"
          imagePullPolicy: Always
          名前: go-httpbin
---
# go-httpbinベースグレー
apiVersion: apps/v1
kind: 配置
メタデータ:
  名前: go-httpbin-gray
  namespace: デフォルト
spec:
  replicas: 1
  セレクタ:
    matchLabels:
      アプリ: go-httpbin
  template:
    metadata:
      labels:
        アプリ: go-httpbin
        バージョン: グレー
    仕様:
      containers:
        -画像: registry.cn-hangzhou.aliyuncs.com/mse/go-httpbin
          args:
            -"-- version=gray"
          imagePullPolicy: Always
          名前: go-httpbin 

e example.com/testリクエストのヘッダーにx-user-id: testが含まれている場合、リクエストはgo-httpbin-grayに転送されます。 それ以外の場合、リクエストはhttpbin-baseに転送されます。

Kubernetes V1.19以降を実行するクラスター

apiVersion:networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
    nginx.ingress.kubernetes.io/canary-by-header-value: "test"
    # canaryラベルバージョン: grayのポッドにリクエストを転送します。
    mse.ingress.kubernetes.io/service-subset: グレー
    mse.ingress.kubernetes.io/subset-labels: バージョングレー
  名前: demo-canary
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: go-httpbin
                port: 
                  数: 8080
            パス: /test
            pathType: 正確
---
apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    # ラベルの先頭にopensergo.io/canaryが付いていないポッドにリクエストを転送します。
    mse.ingress.kubernetes.io/service-subset: ""
  名前: デモ
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: go-httpbin
                port: 
                  数: 8080
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
    nginx.ingress.kubernetes.io/canary-by-header-value: "test"
    # canaryラベルバージョン: grayのポッドにリクエストを転送します。
    mse.ingress.kubernetes.io/service-subset: グレー
    mse.ingress.kubernetes.io/subset-labels: バージョングレー
  名前: demo-canary
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /test
            backend:
              # go-httpbinサービスを設定し、アノテーションでバージョンを指定します。
              serviceName: go-httpbin
              servicePort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    # ラベルの先頭にopensergo.io/canaryが付いていないポッドにリクエストを転送します。
    mse.ingress.kubernetes.io/service-subset: ""
  名前: デモ
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /test
            backend:
              # go-httpbinサービスを設定し、アノテーションでバージョンを指定します。
              serviceName: go-httpbin
              servicePort: 8080 

CORS

クロスオリジンリソース共有 (CORS) を使用すると、webアプリケーションサーバーはクロスオリジンリソースにアクセスし、クロスオリジンデータ送信を保護できます。 CORSの詳細については、「クロスオリジンリソース共有 (CORS) 」をご参照ください。

注釈

説明

nginx.ingress.kubernetes.io/enable-cors

CORSを有効にするかどうかを指定します。

nginx.ingress.kubernetes.io/cors-allow-origin

許可されるサードパーティのサイトを指定します。 サードパーティのサイトはコンマ (,) で区切ります。 ワイルドカード (*) がサポートされています。 デフォルト値: * 。 この値は、すべてのサードパーティサイトがCORSに許可されていることを示します。

nginx.ingress.kubernetes.io/cors-allow-methods

GET、POST、PUTなどの許可されたリクエストメソッドを指定します。 リクエストメソッドはコンマ (,) で区切ります。 ワイルドカード (*) がサポートされています。 デフォルト値: GET、PUT、POST、DELETE、PATCH、OPTIONS。

nginx.ingress.kubernetes.io/cors-allow-headers

許可されたリクエストヘッダーを指定します。 リクエストヘッダーはコンマ (,) で区切ります。 ワイルドカード (*) がサポートされています。 デフォルト値: DNT、X-CustomHeader、Keep-Alive、User-Agent、X-Requested-With、If-Modified-Since、Cache-Control、Content-Type、Authorization。

nginx.ingress.kubernetes.io/cors-expose-headers

ブラウザーに公開できるレスポンスヘッダーを指定します。 レスポンスヘッダーはコンマ (,) で区切ります。

nginx.ingress.kubernetes.io/cors-allow-credentials

資格情報をCORSリクエストに含めることができるかどうかを指定します。 デフォルトでは、CORS操作中に資格情報を渡すことができます。

nginx.ingress.kubernetes.io/cors-max-age

事前チェック結果をキャッシュできる最大期間を指定します。 単位は秒です。 デフォルト値: 1728000

たとえば、許可されたサードパーティのWebサイトとしてconfigurがe example.comされ、許可されたリクエストメソッドとしてGETとPOSTが、許可されたリクエストヘッダーとしてX-Foo-Barが、CORS操作中に資格情報を渡すことを許可しません。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-origin: "example.com"
    nginx.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
    nginx.ingress.kubernetes.io/cors-allow-headers: "X-Foo-Bar"
    nginx.ingress.kubernetes.io/cors-allow-credentials: "false"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /hello
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-origin: "example.com"
    nginx.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
    nginx.ingress.kubernetes.io/cors-allow-headers: "X-Foo-Bar"
    nginx.ingress.kubernetes.io/cors-allow-credentials: "false"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /hello
            backend:
              serviceName: デモサービス
              servicePort: 80 

正規表現マッチ

MSE Ingressは、標準のKubernetes Ingressでサポートされている完全一致とプレフィックス一致に加えて、正規表現一致をサポートしています。 注釈nginx.ingress.kubernetes.io/use-regex: trueを使用して、Ingress Specで定義されているパスの一致を正規表現の一致に変更できます。

予想されるドメイン名iがs example.comすると、リクエストパスが /appまたは /testで始まるリクエストがサービスデモに転送されます。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/use-regex: 'true'
  名前: regex-match
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          - backend:
              service:
                名前: デモ
                port: 
                  数: 8080
            パス: /(アプリ | テスト)/(.*)
            pathType: プレフィックス 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/use-regex: 'true'
  名前: regex-match
  namespace: デフォルト
spec:
  ingressClassName: mse
  rules:
    - http:
        paths:
          -パス: /(アプリ | テスト)/(.*)
            backend:
              serviceName: デモ
              servicePort: 8080 

パスとホストの書き換え

リクエストが宛先バックエンドサービスに転送される前に、書き換え操作を実行して、リクエスト内の元のパスとホストを変更できます。

注釈

説明

nginx.ingress.kubernetes.io /書き換え対象

書き換え操作の宛先パスを指定します。 キャプチャグループがサポートされています。

nginx.ingress.kubernetes.io/upstream-vhost

書き換え先ホストを指定します。

パスの書き換え

  1. e example.com/testリクエストがバックエンドサービスに転送される前に、s example.com/dev. e example.com/test サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/rewrite-target: "/dev"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/rewrite-target: "/dev"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /test
                pathType: 正確
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  2. e example.com/v1/xxxリクエストがバックエンドサービスに転送される前に、プレフィックス /v1を削除し、リクエストをs example.com/xxx. サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/rewrite-target: "/$1"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /v1/(.*)
                pathType: プレフィックス 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/rewrite-target: "/$1"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /v1/(.*) 
              	pathType: プレフィックス
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  3. e example.com/v1/xxxリクエストがバックエンドサービスに転送される前に、プレフィックス /v1を /v2に変更し、リクエストをs example.com/v2/xxx. サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/rewrite-target: "/v2/$1"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /v1/(.*)
                pathType: プレフィックス 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/rewrite-target: "/v2/$1"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /v1/(.*)
                pathType: プレフィックス
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

ホストの書き換え

たとえば、e example.com/test要求がバックエンドサービスに転送される前に、s test.com/test. をe example.com/testします。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com 
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

Redirect

リダイレクトは、元のクライアント要求を宛先要求に変更するために使用されます。

HTTPからHTTPSへのリダイレクト

注釈

説明

nginx.ingress.kubernetes.io/ssl-リダイレクト

HTTPリクエストをHTTPSリクエストにリダイレクトするかどうかを指定します。

nginx.ingress.kubernetes.io/force-ssl-redirect

HTTPリクエストをHTTPSリクエストにリダイレクトするかどうかを指定します。

説明

MSE Ingressは2つのアノテーションを区別しません。 2つのアノテーションは両方とも、HTTPリクエストをHTTPSリクエストに強制的にリダイレクトするために使用されます。

たとえば、リクエスト http://example.com/test を https://example.com/test. にリダイレクトします。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com 
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

永久リダイレクト

注釈

説明

nginx.ingress.kubernetes.io/permanent-redirect

永久リダイレクトの宛先URLを指定します。 宛先URLには、HTTPまたはHTTPSのスキームが含まれている必要があります。

nginx.ingress.kubernetes.io/permanent-redirect-code

永続リダイレクトのHTTPステータスコードを指定します。 デフォルト値: 301

たとえば、http://example.com/test から http://example.com/app. への永続的なリダイレクトを実行します。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/permanent-redirect: " http://example.com/app "
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/permanent-redirect: " http://example.com/app "
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com 
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

一時的なリダイレクト

nginx.ingress.kubernetes.io/temporal-redirect: 一時リダイレクトの宛先URLを指定します。 宛先URLには、HTTPまたはHTTPSのスキームが含まれている必要があります。

たとえば、http://example.com/test から http://example.com/app. への一時的なリダイレクトを実行します。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/temporal-redirect: " http://example.com/app "
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/temporal-redirect: " http://example.com/app "
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com 
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

ヘッダー制御

ヘッダーコントロールを使用すると、MSE Ingressがリクエストをバックエンドサービスに転送する前に、リクエストヘッダーを追加、削除、または変更できます。 ヘッダーコントロールでは、MSE Ingressが受信した応答をクライアントに転送する前に、応答ヘッダーを追加、削除、または変更することもできます。

リクエストヘッダー制御

注釈

説明

mse.ingress.kubernetes.io/request-header-control-add

リクエストがバックエンドサービスに転送されるときにリクエストに追加されるヘッダーを指定します。 ヘッダーが存在する場合、その値は元の値の後に連結されます。 次の構文が使用されます。

  • シングルヘッダー: キーと値のペアが使用されます。

  • 複数のヘッダー: YAMLファイルの縦棒 (|) が使用されます。 各キーと値のペアは別々の行を占めます。

mse.ingress.kubernetes.io/request-header-control-update

リクエストがバックエンドサービスに転送されるときにリクエストで変更されるヘッダーを指定します。 ヘッダーが存在する場合、その値は元の値を上書きします。 次の構文が使用されます。

  • シングルヘッダー: キーと値のペアが使用されます。

  • 複数のヘッダー: YAMLファイルの縦棒 (|) が使用されます。 各キーと値のペアは別々の行を占めます。

mse.ingress.kubernetes.io/request-header-control-remove

リクエストがバックエンドサービスに転送されたときにリクエストから削除されるヘッダーを指定します。 次の構文が使用されます。

  • シングルヘッダー: キーが使用されます。

  • 複数のヘッダー: 複数のヘッダーをコンマ (,) で区切ります。

例:

  • ヘッダーfoo: barとtest: trueをreques t example.com/test. に追加します サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/request-header-control-add: |
          fooバー
          テストtrue
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/request-header-control-add: |
          fooバー
          テストtrue
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com 
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  • ヘッダ制御は、カナリアバージョンに送信される要求を識別するためにカナリアリリースと共に使用することができる。 リクエストヘッダーがmse: v1の場合、リクエストはカナリアバージョンdemo-service-canary-v1に送信され、ヘッダーstage: grayがリクエストに追加されます。 それ以外の場合は、リクエストは基本バージョンのデモサービスに送信され、ヘッダーステージ: プロダクションがリクエストに追加されます。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "mse"
        nginx.ingress.kubernetes.io/canary-by-header-value: "v1"
        mse.ingress.kubernetes.io/request-header-control-add: "stage gray"
      名前: demo-canary-v1
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service-canary-v1
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/request-header-control-add: "stage production"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /hello
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "mse"
        nginx.ingress.kubernetes.io/canary-by-header-value: "v1"
        mse.ingress.kubernetes.io/request-header-control-add: "stage gray"
      名前: demo-canary-v1
    spec:
      ingressClassName: mse
      rules:
        - http:
            paths:
              -パス: /hello
                backend:
                  serviceName: demo-service-canary-v1
                  servicePort: 80
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/request-header-control-add: |
          fooバー
          テストtrue
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com 
          http:
            paths:
              -パス: /hello
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

応答ヘッダー制御

注釈

説明

mse.ingress.kubernetes.io/response-header-control-add

応答がクライアントに転送される前に、バックエンドサービスから受信した応答に追加されるヘッダーを指定します。 ヘッダーが存在する場合、その値は元の値の後に連結されます。 次の構文が使用されます。

  • シングルヘッダー: キーと値のペアが使用されます。

  • 複数のヘッダー: YAMLファイルの縦棒 (|) が使用されます。 各キーと値のペアは別々の行を占めます。

mse.ingress.kubernetes.io/response-header-control-update

応答がクライアントに転送される前にバックエンドサービスから受信した応答で変更されるヘッダーを指定します。 ヘッダーが存在する場合、その値は元の値を上書きします。 次の構文が使用されます。

  • シングルヘッダー: キーと値のペアが使用されます。

  • 複数のヘッダー: YAMLファイルの縦棒 (|) が使用されます。 各キーと値のペアは別々の行を占めます。

mse.ingress.kubernetes.io/response-header-control-remove

応答がクライアントに転送される前に、バックエンドサービスから受信した応答から削除されるヘッダーを指定します。 次の構文が使用されます。

  • シングルヘッダー: キーが使用されます。

  • 複数のヘッダー: 複数のヘッダーをコンマ (,) で区切ります。

たとえば、要求t example.com/test. への応答からヘッダーreq-cost-timeを削除します。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/response-header-control-remove: "req-cost-time"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/response-header-control-remove: "req-cost-time"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com 
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

再試行

MSE Ingressは、エラー要求を自動的に再試行するために使用できるルートレベルの再試行設定を提供します。 ビジネス要件に基づいて再試行条件を指定できます。 たとえば、接続の確立が失敗した場合、バックエンドサービスが利用できない場合、指定されたHTTPステータスコードが返された場合に、リクエストを再試行するように設定できます。

注釈

説明

nginx.ingress.kubernetes.io/proxy-next-upstream-tries

リクエストの再試行の最大回数を指定します。 デフォルト値: 3。

nginx.ingress.kubernetes.io/proxy-next-upstream-timeout

リクエストの再試行のタイムアウト期間を指定します。 単位は秒です。 デフォルトでは、タイムアウト期間は設定されていません。

nginx.ingress.kubernetes.io/proxy-next-upstream

リトライ条件を指定します。 複数の再試行条件はコンマ (,) で区切ります。 デフォルト値: error,timeout 有効な値:

  • error: 接続の確立に失敗し、ステータスコード5xxが返されます。

  • timeout: 接続確立がタイムアウトし、ステータスコード5xxが返されます。

  • invalid_header: リクエストエラーが発生し、ステータスコード5xxが返されます。

  • http_xxx: 返されたステータスコードに基づいて再試行がトリガーされます。 例: http_502およびhttp_403

  • non_idempotent: 非idempotentリクエストなどのリクエストに対してエラーが返されると、再試行がトリガーされます。 デフォルトでは、リクエストに対してエラーが返された場合、MSE IngressはPOSTやPATCHリクエストなどの非べき要求を再試行しません。 nginx.ingress.kubernetes.io/proxy-next-upstreamをnon_idempotentに設定した場合、非idempotentリクエストに対して再試行を有効にできます。

  • off: 再試行は無効です。

たとえば、example/testリクエストが利用可能です。 リクエストの場合、リクエストの再試行の最大数を2に設定し、再試行タイムアウト期間を5秒に設定し、ステータスコード502が返された場合にのみ再試行をトリガーし、べきでないリクエストの再試行を有効にします。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/proxy-next-upstream-tries: "2"
    nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "5"
    nginx.ingress.kubernetes.io/proxy-next-upstream: "http_502,non_idempotent"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/proxy-next-upstream-tries: "2"
    nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "5"
    nginx.ingress.kubernetes.io/proxy-next-upstream: "http_502,non_idempotent"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com 
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

IPアドレスホワイトリストとブラックリストに基づくアクセス制御

MSE Ingressは、ドメイン名とルートレベルでIPアドレスのホワイトリストとブラックリストを提供します。 ルートレベルのIPアドレスホワイトリストとブラックリストは、ドメイン名レベルのIPアドレスホワイトリストとブラックリストよりも優先されます。

ルートレベルのIPアドレスホワイトリストとブラックリスト

注釈

説明

nginx.ingress.kubernetes.io/whitelist-source-range

特定のルートのIPアドレスホワイトリストを指定します。 IPアドレスとCIDRブロックがサポートされています。 IPアドレスまたはCIDRブロックはコンマ (,) で区切ります。

mse.ingress.kubernetes.io/blacklist-source-range

特定のルートのIPアドレスブラックリストを指定します。 IPアドレスとCIDRブロックがサポートされています。 IPアドレスまたはCIDRブロックはコンマ (,) で区切ります。

例:

  • クライアントIPアドレス1.1.xx.xxからのo example.com/testへのアクセスを許可します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/whitelist-source-range: 1.1.X.X
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/whitelist-source-range: 1.1.X.X
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com 
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  • クライアントIPアドレス2.2.xx.xxからのo example.com/testアクセスを拒否します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/blacklist-source-range: 2.2.2.2
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/blacklist-source-range: 2.2.2.2
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

ドメイン名レベルのIPアドレスホワイトリストとブラックリスト

注釈

説明

mse.ingress.kubernetes.io/domain-whitelist-source-range

特定のドメイン名のIPアドレスホワイトリストを指定します。 ルートレベルのIPアドレスホワイトリストは、ドメイン名レベルのIPアドレスホワイトリストよりも優先されます。 IPアドレスとCIDRブロックがサポートされています。 IPアドレスまたはCIDRブロックはコンマ (,) で区切ります。

mse.ingress.kubernetes.io /ドメイン-blacklist-source-range

特定のドメイン名のIPアドレスブラックリストを指定します。 ルートレベルのIPアドレスブラックリストは、ドメイン名レベルのIPアドレスブラックリストよりも優先されます。 IPアドレスとCIDRブロックがサポートされています。 IPアドレスまたはCIDRブロックはコンマ (,) で区切ります。

例:

  • クライアントIPアドレス1.1.xx.xxおよび2.2.xx.xxからドメイン名e example.comのすべてのルートへのアクセスを許可します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確
             - backend:
                  service:
                    name: app-service
                    port: 
                      number: 80
                パス: /app
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80
              -パス: /app
                backend:
                  serviceName: app-service
                  servicePort: 80 
  • ドメイン名レベルでIPアドレスホワイトリストとブラックリストを使用し、ルートレベルでIPアドレスホワイトリストとブラックリストを使用します。 クライアントIPアドレス1.1.xx.xxおよびクライアントIPアドレス2.2.xx.xxからe example.comドメイン名のすべてのルートへのアクセスを許可し、クライアントIPアドレス3.3.xx.xxからのみe example.com/orderのルートへのアクセスを許可します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2
      名前: demo-domain
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確
             - backend:
                  service:
                    name: app-service
                    port: 
                      number: 80
                パス: /app
                pathType: 正確
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/whitelist-source-range: 3.3.X.X
      名前: demo-route
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /order
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2
      名前: demo-domain
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80
              -パス: /app
                backend:
                  serviceName: app-service
                  servicePort: 80
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/whitelist-source-range: 3.3.X.X
      名前: demo-route
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /order
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

単一ゲートウェイ調整

MSE Ingressでは、ルートレベルで単一のゲートウェイインスタンスのスロットリングポリシーを設定できます。 スロットリングポリシーは、ゲートウェイレプリカのルートで一致するリクエストの数が、指定された期間内に設定されたしきい値を超えないようにします。

説明

システムは、設定されたしきい値に基づいて単一のゲートウェイインスタンスに対してスロットリングを実行します。 ゲートウェイクラスターのルートのトラフィックをスロットルする場合は、代わりにグローバルスロットル制御ポリシーを使用できます。

注釈

説明

mse.ingress.kubernetes.io/route-limit-rpm

ゲートウェイでルーティングされる1分あたりの最大リクエスト数 (RPM) を指定します。 RPMの最大数のバースト制限は、指定された値にmse.ingress.kubernetes.io/route-limit-burst-multiplierを掛けた値に等しくなります。

スロットリングがトリガーされると、応答本文の内容はlocal_rate_limitedになります。 応答ステータスコード:

  • ゲートウェイのバージョンがV1.2.23より前の場合、ステータスコード503が返されます。

  • ゲートウェイのバージョンがV1.2.23以降の場合、ステータスコード429が返されます。

mse.ingress.kubernetes.io/route-limit-rps

ゲートウェイでルーティングされる1秒あたりの最大リクエスト数 (RPS) を指定します。 RPSの最大数のバースト制限は、指定された値にmse.ingress.kubernetes.io/route-limit-burst-multiplierを掛けた値に等しくなります。

スロットリングがトリガーされると、応答本文の内容はlocal_rate_limitedになります。 応答ステータスコード:

  • ゲートウェイのバージョンがV1.2.23より前の場合、ステータスコード503が返されます。

  • ゲートウェイのバージョンがV1.2.23以降の場合、ステータスコード429が返されます。

mse.ingress.kubernetes.io/route-limit-burst-multiplier

バースト制限の乗数を指定します。 既定値:5

例:

  • e example.com/testリクエストの場合、RPMの最大数を100に設定し、RPMの最大数のバースト制限を200に設定します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/route-limit-rpm: "100"
        mse.ingress.kubernetes.io/route-limit-burst-multiplier: "2"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/route-limit-rpm: "100"
        mse.ingress.kubernetes.io/route-limit-burst-multiplier: "2"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  • e example.com/testリクエストの場合、RPSの最大数を10に設定し、RPSの最大数のバースト制限を50に設定します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/route-limit-rps: "10"
        # デフォルト値は5です。
        # mse.ingress.kubernetes.io/route-limit-burst-multiplier: "5"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        mse.ingress.kubernetes.io/route-limit-rps: "10"
        # デフォルト値は5です。
        # mse.ingress.kubernetes.io/route-limit-burst-multiplier: "5"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

グローバルスロットリング制御

MSE IngressはSentinelと統合されており、ルートレベルでゲートウェイクラスターのグローバルスロットル制御を提供します。 グローバルスロットリング制御を実装するには、ゲートウェイクラスター内のルート上のRPSの最大数を指定する必要があります。

説明

この機能を使用するには、MSE Ingressゲートウェイのバージョンが1.2.25以降であることを確認する必要があります。

mse.ingress.kubernetes.io/rate-limitアノテーションを使用して、ゲートウェイクラスター内のルート上のRPSの最大数を指定できます。 デフォルトでは、応答コードは429で、スロットリングがトリガーされると応答本文はセンチネルレート制限されます。 MSE Ingressには、カスタムスロットリング動作を設定するための2つの方法があります。カスタムレスポンスとリダイレクトです。 2つの方法のいずれかのみを選択できます。

カスタム応答

  • mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-code: スロットリングがトリガーされたときのレスポンスコード。 デフォルトの応答コードは429です。

  • mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body-type: スロットリングがトリガーされたときのレスポンスボディタイプ。 デフォルトのレスポンスボディタイプはtextです。

    • このアノテーションをtextに設定した場合、レスポンスのContent-Type値はtext/plain; charset=UTF-8になります。

    • このアノテーションをjsonに設定した場合、レスポンスのContent-Type値はapplication/json; charset=UTF-8になります。

  • mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body: スロットリングがトリガーされたときのレスポンスボディ。 デフォルト値はセンチネルレート制限です。

例1: ゲートウェイクラスターのe example.com/testリクエストの最大RPS数を100に設定し、デフォルトのスロットリング動作を維持します。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/rate-limit: "100"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/rate-limit: "100"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

例2: ゲートウェイクラスターのe example.com/testリクエストの最大RPS数を100に設定し、スロットリングがトリガーされるとレスポンスコードを503に設定します。

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/rate-limit: "100"
    mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-code: 503
    mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body: "server is overload"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/rate-limit: "100"
    mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-code: 503
    mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body: "server is overload"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

リダイレクト

  • mse.ingress.kubernetes.io/rate-limit-fallback-redirect-url: スロットリングがトリガーされたときのリダイレクトURL。

例1: ゲートウェイクラスター内のe example.com/testリクエストの最大RPS数を100に設定し、スロットリングがトリガーされたときにリダイレクトURLをo example.com/fallbackします。

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/rate-limit: "100"
    mse.ingress.kubernetes.io/rate-limit-fallback-redirect-url: "example.com/fallback"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/rate-limit: "100"
    mse.ingress.kubernetes.io/rate-limit-fallback-redirect-url: "example.com/fallback"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

グローバル同時実行制御

MSE IngressはSentinelと統合されており、ルートレベルでゲートウェイクラスターのグローバル同時実行制御を提供します。 グローバル同時実行制御を実装するには、ゲートウェイクラスター内のルートで処理されるリクエストの最大数を指定する必要があります。

説明

この機能を使用するには、MSE Ingressゲートウェイのバージョンが1.2.25以降であることを確認する必要があります。

mse.ingress.kubernetes.io/concurrency-limitアノテーションを使用して、ゲートウェイクラスターのルートで処理できるリクエストの最大数を指定できます。 グローバル同時実行制御がトリガーされると、応答コードが429され、応答本文はセンチネルレートが制限されます。 MSE Ingressには、カスタム同時実行動作を設定する2つの方法があります。カスタム応答とリダイレクトです。 2つの方法のいずれかのみを選択できます。

カスタム応答

  • mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code: 同時実行制御がトリガーされたときのレスポンスコード。 デフォルトの応答コードは429です。

  • mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body-type: 同時実行制御がトリガーされたときの応答ボディタイプ。 デフォルトのレスポンスボディタイプはtextです。

    • このアノテーションをtextに設定した場合、レスポンスのContent-Type値はtext/plain; charset=UTF-8になります。

    • このアノテーションをjsonに設定した場合、レスポンスのContent-Type値はapplication/json; charset=UTF-8になります。

  • mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body: 同時実行制御がトリガーされたときのレスポンスボディ。 デフォルト値はセンチネルレート制限です。

例1: ゲートウェイクラスターで処理されるf example.com/testリクエストの最大数を1000に設定し、デフォルトの同時実行制御動作を保持します。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/concurrency-limit: "1000"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/concurrency-limit: "1000"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

例2: ゲートウェイクラスターで処理されるm example.com/testからのリクエストの最大数を1,000に設定し、レスポンスコードを503に設定し、並行制御がトリガーされるとレスポンスボディがサーバーにオーバーロードされます。

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/concurrency-limit: "1000"
    mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code: 503
    mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body: "server is overload"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/concurrency-limit: "1000"
    mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code: 503
    mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body: "server is overload"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

リダイレクト

  • mse.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url: 同時実行制御がトリガーされたときのリダイレクトURL。

同時実行制御がトリガーされたときに、ゲートウェイクラスターで処理されるf example.com/testリクエストの最大数を1000に設定し、リダイレクトURLをo example.com/fallbackします。

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/concurrency-limit: "1000"
    mse.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url: "example.com/fallback"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/concurrency-limit: "1000"
    mse.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url: "example.com/fallback"
  名前: デモ
spec:
  ingressClassName: mse
  ルール:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

トラフィックミラーリング

指定したサービスにトラフィックをコピーするようにトラフィックミラーリングを設定できます。 トラフィックミラーリングは、運用監査やトラフィックテストなどのシナリオに適しています。

  • mse.ingress.kubernetes.io/mirror-target-service: コピーされたトラフィックが転送される宛先サービス。 サービス形式はnamespace/name:portです。

    • namespace: Kubernetesサービスが存在する名前空間。 このパラメーターはオプションです。 デフォルトの名前空間は、Ingressゲートウェイが存在する名前空間です。

    • name: Kubernetesサービスの名前。 This parameter is required.

    • port: ミラーリングされたトラフィックが転送されるKubernetesサービスポート。 このパラメーターはオプションです。 デフォルトでは、最初のポートが使用されます。

  • mse.ingress.kubernetes.io/mirror-percentage: ミラーリングされたトラフィックの割合。 有効な値: 0-100 デフォルト値: 100

説明

コピーされたトラフィックが宛先サービスに転送されると、-shadowサフィックスが元のリクエストのHostヘッダーに自動的に追加されます。

例えば、m example.com/testからの要求はコピーされ、宛先サービスtest/app:8080に転送される。

説明

この例では、コピーされたトラフィックが宛先サービスに転送されるときに、Hostヘッダーの値がo example.comシャドウで自動的に変更されます。

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  注釈:
    mse.ingress.kubernetes.io/mirror-target-service: test/app:8080
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/mirror-target-service: test/app:8080
  名前: デモ
spec:
  ingressClassName: mse
  ルール:
    -host: example.com
      http:
        パス:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

たとえば、m example.com/testからの要求がコピーされ、宛先サービスtest/app:8080に転送され、ミラーリングされたトラフィックの割合が10% になります。

説明

この例では、コピーされたトラフィックが宛先サービスに転送されるときに、Hostヘッダーの値がo example.comシャドウで自動的に変更されます。

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/mirror-target-service: test/app:8080
    mse.ingress.kubernetes.io /ミラーパーセンテージ: 10
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        パス:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/mirror-target-service: test/app:8080
    mse.ingress.kubernetes.io /ミラーパーセンテージ: 10
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

バックエンドサービスプロトコル: HTTPSおよびgRPC

デフォルトでは、MSE IngressはHTTPを使用してリクエストをバックエンドサービスコンテナに転送します。 バックエンドサービスコンテナがHTTPSを使用している場合、nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" という注釈を使用して、リクエストをバックエンドサービスコンテナに転送できます。 バックエンドサービスコンテナがgRPCを使用している場合、nginx.ingress.kubernetes.io/backend-protocol: "GRPC" という注釈を使用して、リクエストをバックエンドサービスコンテナに転送できます。

説明

バックエンドサービスが属するKubernetesサービスのリソース設定のポートの名前にgRPCまたはHTTP/2が指定されている場合、MSE Ingressは自動的にgRPCまたはHTTP/2プロトコルを使用してバックエンドサービスコンテナにリクエストを転送します。 注釈nginx.ingress.kubernetes.io/backend-protocol: "GRPC" を設定する必要はありません。 この実装は、NGINX Ingressの実装とは異なります。

例:

  • HTTPSを使用して、サンプル /テストリクエストをバックエンドサービスに転送します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                path: /
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  • gRPCを使用して、サンプル /テスト要求をバックエンドサービスに転送します。 次の方法を使用できます。

    • 方法1: 注釈を使用する。 サンプル設定:

      Kubernetes V1.19以降を実行するクラスター

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      メタデータ:
        アノテーション:
          nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
        名前: デモ
      spec:
        ingressClassName: mse
        rules:
          -host: example.com
            http:
              paths:
                - backend:
                    service:
                      名前: demo-service
                      port: 
                        number: 80
                  パス: /test
                  pathType: 正確 

      V1.19より前のバージョンのKubernetesを実行するクラスター

      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      メタデータ:
        アノテーション:
          nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
        名前: デモ
      spec:
        ingressClassName: mse
        rules:
          -host: example.com
            http:
              paths:
                -パス: /test
                  backend:
                    serviceName: デモサービス
                    servicePort: 80 
    • 方法2: Ingressリソース設定でspec > ports > nameを使用します。 サンプル設定:

      Kubernetes V1.19以降を実行するクラスター

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      メタデータ:
        名前: デモ
      spec:
        ingressClassName: mse
        rules:
          -host: example.com
            http:
              paths:
                - backend:
                    service:
                      名前: demo-service
                      port: 
                        number: 80
                  パス: /order
                  pathType: 正確
      ---
      apiVersion: v1
      種類: サービス
      メタデータ:
        名前: demo-service
      spec:
        ポート:
          -名前: grpc
            port: 80
            protocol: TCP
        セレクタ:
          app: デモサービス 

      V1.19より前のバージョンのKubernetesを実行するクラスター

      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      メタデータ:
        名前: デモ
      spec:
        ingressClassName: mse
        rules:
          -host: example.com
            http:
              paths:
                -パス: /test
                  backend:
                    serviceName: デモサービス
                    servicePort: 80
      ---
      apiVersion: v1
      種類: サービス
      メタデータ:
        名前: demo-service
      spec:
        ポート:
          -名前: grpc
            port: 80
            protocol: TCP
        セレクタ:
          app: デモサービス 

バックエンドサービスの負荷分散アルゴリズム

負荷分散アルゴリズムは、ゲートウェイがバックエンドサービスに要求を転送するときにノードを選択する方法を決定します。

一般的な負荷分散アルゴリズム

nginx.ingress.kubernetes.io/load-balance: バックエンドサービスで使用される一般的な負荷分散アルゴリズムを指定します。 デフォルト値: round_robin。 有効な値:

  • round_robin: ラウンドロビンに基づく負荷分散。

  • least_conn: 最小接続に基づく負荷分散。

  • random: ランダムな負荷分散。

重要

クラウドネイティブゲートウェイは、指数加重移動平均 (EWMA) アルゴリズムをサポートしていません。 EWMAアルゴリズムを設定すると、アルゴリズムはラウンドロビン負荷分散アルゴリズムにロールバックされます。

たとえば、デモサービスのバックエンドサービスに最小接続負荷分散アルゴリズムを設定します。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/load-balance: "least_conn"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /order
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/load-balance: "least_conn"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

一貫性のあるハッシュに基づく負荷分散アルゴリズム

コンシステントハッシングに基づく負荷分散アルゴリズムは、要求親和性を有する。 同じ特性を持つリクエストは、常に同じノードに配信されます。 MSE Ingressでは、NGINX変数、リクエストヘッダー、およびリクエストパスパラメーターをハッシュキーとして使用できます。

nginx.ingress.kubernetes.io/upstream-hash-by: コンシステントハッシングに基づく負荷分散アルゴリズムを指定します。 クラウドネイティブゲートウェイは、次のタイプのコンシステントハッシングをサポートします。

  • NGINX変数に基づく一貫したハッシュ:

    • $request_uri: ハッシュキーとして使用されるリクエストパス。 パスパラメータが含まれています。

    • $host: ハッシュキーとして使用されるリクエストホスト。

    • $remote_addr: ハッシュキーとして使用されるクライアントIPアドレス。

  • リクエストヘッダーに基づく一貫したハッシュ。 $http_headerNameを設定するだけです。

  • 要求パスパラメータに基づく一貫したハッシュ。 $arg_varNameを設定するだけです。

例:

  • リクエストのクライアントIPアドレスをハッシュキーとして使用します。 クライアントIPアドレスからのリクエストは、常に同じノードに配信されます。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  • リクエストヘッダーX-Stageをハッシュキーとして使用し、リクエストヘッダーX-Stageと同じ値のリクエストを同じノードに配布します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x-stage"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x-stage"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  • リクエストパスパラメーターX-Stageをハッシュキーとして使用し、リクエストパスパラメーターX-Stageの値が同じリクエストを同じノードに配布します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/upstream-hash-by: "$arg_x-stage"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/upstream-hash-by: "$arg_x-stage"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

サービスの先取り (graceful start)

サービスプリフェッチ機能により、新しいノードが解放されると、指定されたサービスプリフェッチウィンドウでトラフィックが徐々に増加します。 これは、ノードが完全にプリフェッチされることを保証する。

mse.ingress.kubernetes.io/warmup: サービスがプリフェッチされる期間を指定します。 単位は秒です。 デフォルトでは、サービスプリフェッチ機能は有効になっていません。

説明

サービスプリフェッチは、選択した負荷分散アルゴリズムに依存します。 ラウンドロビンおよび最小接続に基づく負荷分散アルゴリズムのみがサポートされています。

たとえば、バックエンドサービスデモサービスのサービスプリフェッチ機能を有効にし、プリフェッチ時間ウィンドウを30秒に設定します。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/warmup: "30"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/warmup: "30"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

Cookieアフィニティ (セッション永続化)

同じcookieを持つリクエストは、常にクラウドネイティブゲートウェイ上の同じノードに配信されます。 クライアントが最初のリクエストをcookieと共にゲートウェイに送信すると、MSE Ingressはクライアントに対して生成されたcookieを含む応答を返します。 生成されたcookieは、後続の要求が常にゲートウェイの同じノードに配信されるようにするために使用されます。

注釈

説明

nginx.ingress.kubernetes.io/affinity

affinity型を指定します。 デフォルトで有効な値はcookieのみです。

nginx.ingress.kubernetes.io/affinity-mode

affinityモードを指定します。 デフォルト値と有効値のみがバランスされます。

nginx.ingress.kubernetes.io/session-cookie-name

ハッシュキーとして使用されるcookieの名前を指定します。 デフォルト値: INGRESSCOKIE。

nginx.ingress.kubernetes.io/session-cookie-path

指定されたcookieが存在しない場合に生成されるcookieのパスを指定します。 デフォルト値: /。

nginx.ingress.kubernetes.io/session-cookie-max-age

指定されたcookieが存在しない場合に生成されるcookieの有効期限を指定します。 単位は秒です。 デフォルトでは、このアノテーションはセッションレベルで指定されます。

nginx.ingress.kubernetes.io/session-cookie-expires

指定されたcookieが存在しない場合に生成されるcookieの有効期限を指定します。 単位は秒です。 デフォルトでは、このアノテーションはセッションレベルで指定されます。

例:

  • cookieアフィニティを有効にし、MSE Ingressのデフォルト設定を使用します。 cookie名をINGRESSCOKIEに設定し、パスを /に設定し、セッションレベルでcookieのライフサイクルを設定します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/affinity: "cookie"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/affinity: "cookie"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 
  • cookie affinityを有効にし、テストするcookie名、/へのパス、およびcookieの有効期限を10秒に設定します。 サンプル設定:

    Kubernetes V1.19以降を実行するクラスター

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/affinity: "cookie"
        nginx.ingress.kubernetes.io/session-cookie-name: "test"
        nginx.ingress.kubernetes.io/session-cookie-max-age: "10"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              - backend:
                  service:
                    名前: demo-service
                    port: 
                      number: 80
                パス: /test
                pathType: 正確 

    V1.19より前のバージョンのKubernetesを実行するクラスター

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    メタデータ:
      アノテーション:
        nginx.ingress.kubernetes.io/affinity: "cookie"
        nginx.ingress.kubernetes.io/session-cookie-name: "test"
        nginx.ingress.kubernetes.io/session-cookie-max-age: "10"
      名前: デモ
    spec:
      ingressClassName: mse
      rules:
        -host: example.com
          http:
            paths:
              -パス: /test
                backend:
                  serviceName: デモサービス
                  servicePort: 80 

ゲートウェイとバックエンドサービス間の接続プールの設定

ゲートウェイ上の指定されたバックエンドサービスの接続プールを設定した後、ゲートウェイとバックエンドサービス間の接続数を制御できます。 これにより、バックエンドサービスが過負荷になるのを防ぎ、バックエンドサービスの安定性と高可用性を保証します。

  • mse.ingress.kubernetes.io/connection-policy-tcp-max-connection: ゲートウェイとバックエンドサービスの間に確立できる接続の最大数。

  • mse.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint: ゲートウェイとバックエンドサービスの単一ノード間に確立できる接続の最大数。

  • mse.ingress.kubernetes.io/connection-policy-http-max-request-per-connection: ゲートウェイとバックエンドサービス間の単一の接続でのリクエストの最大数。

たとえば、バックエンドサービスのデモサービスの場合、ゲートウェイとバックエンドサービスの間に確立できる最大接続数を10に設定し、ゲートウェイとバックエンドサービスの単一ノードの間に確立できる最大接続数を2に設定できます。

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/connection-policy-tcp-max-connection: 10
  	mse.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint: 2
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/connection-policy-tcp-max-connection: 10
  	mse.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint: 2
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

クライアントとクラウドネイティブゲートウェイ間の通信用のTLSバージョンと暗号スイート

MSE Ingressでサポートされているデフォルトの最も古いTLSバージョンはTLSv1.0です。 デフォルトの最新のTLSバージョンはTLSv1.3です。 デフォルトでは、次の暗号スイートが使用されます。

  • ECDHE-ECDSA-AES128-GCM-SHA256

  • ECDHE-RSA-AES128-GCM-SHA256

  • ECDHE-ECDSA-AES128-SHA

  • ECDHE-RSA-AES128-SHA

  • AES128-GCM-SHA256

  • AES128-SHA

  • ECDHE-ECDSA-AES256-GCM-SHA384

  • ECDHE-RSA-AES256-GCM-SHA384

  • ECDHE-ECDSA-AES256-SHA

  • ECDHE-RSA-AES256-SHA

  • AES256-GCM-SHA384

  • AES256-SHA

次の表に、特定のドメイン名の最も古いまたは最新のTLSバージョンと暗号スイートを指定するために使用できるアノテーションを示します。

注釈

説明

mse.ingress.kubernetes.io/tls-min-protocol-version

TLSの最も古いバージョンを指定します。 デフォルト値: TLSv1.0。 有効な値:

  • TLSv1.0

  • TLSv1.1

  • TLSv1.2

  • TLSv1.3

mse.ingress.kubernetes.io/tls-max-protocol-version

TLSの最新バージョンを指定します。 デフォルト値: TLSv1.3.

nginx.ingress.kubernetes.io/ssl-cipher

TLS暗号スイートを指定します。 カンマ (,) で区切られた複数のTLS暗号スイートを指定できます。 このアノテーションは、TLSハンドシェイクにv1.0からv1.2までのTLSバージョンが使用されている場合にのみ有効です。

例えば、ドメイン名e example.comが利用可能である。 このドメイン名の場合、最も古いTLSバージョンをTLSv1.2に設定し、最新バージョンをTLSv1.2に設定します。 サンプル設定:

Kubernetes V1.19以降を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/tls-min-protocol-version: "TLSv1.2"
    mse.ingress.kubernetes.io/tls-max-protocol-version: "TLSv1.2"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    mse.ingress.kubernetes.io/tls-min-protocol-version: "TLSv1.2"
    mse.ingress.kubernetes.io/tls-max-protocol-version: "TLSv1.2"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80 

ゲートウェイとバックエンドサービス間のmTLS

デフォルトでは、MSE IngressはHTTPを使用してリクエストをバックエンドサービスコンテナに転送します。 注釈nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" を使用すると、MSE IngressがHTTPS経由でバックエンドサービスにアクセスできるようになります。 この場合、一方向TLSが使用される。 MSE Ingressは、バックエンドサービスによって提供される証明書を認証します。証明書は、よく知られている認証局 (CA) によって発行される必要があります。 相互TLS (mTLS) も許可されています。 mTLSを使用する場合、ゲートウェイとバックエンドサービスは双方向認証を実行します。 ゲートウェイは、バックエンドサービスによって提供される証明書が有効であるかどうかを検証し、バックエンドサービスは、ゲートウェイによって提供される証明書が有効であるかどうかを検証する。

注釈

説明

nginx.ingress.kubernetes.io/proxy-ssl-secret

ゲートウェイで使用されるクライアント証明書を指定します。 クライアント証明書は、バックエンドサービスがゲートウェイを認証するために使用されます。 形式はsecretNamespace/secretNameです。

nginx.ingress.kubernetes.io/proxy-ssl-name

TLSハンドシェイク中に使用されるサーバー名表示 (SNI) を指定します。

nginx.ingress.kubernetes.io/proxy-ssl-server-name

TLSハンドシェイク中に使用されるSNIを有効にするか無効にするかを指定します。

たとえば、クラウドネイティブゲートウェイとバックエンドサービス間でmTLSを実行し、secretNameをgateway-certに設定し、secretNamespaceをdefaultに設定します。 サンプル設定:

Kubernetes 1.19を実行するクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/proxy-ssl-secret: "default/ateway-cert"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          - backend:
              service:
                名前: demo-service
                port: 
                  number: 80
            パス: /test
            pathType: 正確 

V1.19より前のバージョンのKubernetesを実行するクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
メタデータ:
  アノテーション:
    nginx.ingress.kubernetes.io/proxy-ssl-secret: "default/ateway-cert"
  名前: デモ
spec:
  ingressClassName: mse
  rules:
    -host: example.com
      http:
        paths:
          -パス: /test
            backend:
              serviceName: デモサービス
              servicePort: 80