コンテンツへスキップ

イングレスゲートウェイの設定

Knativeは、Knativeサービスメッシュ内のすべての着信トラフィックを処理するために、共有イングレスゲートウェイ(`knative-serving`名前空間下の`knative-ingress-gateway`ゲートウェイ)を使用します。デフォルトでは、`istio-system`名前空間下のIstioゲートウェイサービス`istio-ingressgateway`を基盤となるサービスとして使用します。このサービスとゲートウェイは、以下のように独自のものに置き換えることができます。

デフォルトの`istio-ingressgateway`サービスの置き換え

ステップ1:ゲートウェイサービスとデプロイメントインスタンスの作成

まず、トラフィックを処理するためのゲートウェイサービスとデプロイメントインスタンスを作成する必要があります。例えば、デフォルトの`istio-ingressgateway`を`custom-ingressgateway`にカスタマイズしたとします。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    ingressGateways:
      - name: custom-ingressgateway
        enabled: true
        namespace: custom-ns
        label:
          istio: custom-gateway

ステップ2:Knativeゲートウェイの更新

`knative-serving`名前空間下のゲートウェイインスタンス`knative-ingress-gateway`を更新します。

kubectl edit gateway knative-ingress-gateway -n knative-serving

ラベルセレクタをサービスのラベルに置き換えます。

istio: ingressgateway

前述の`custom-ingressgateway`サービスの例では、次のように更新する必要があります。

istio: custom-gateway

サービスポートが(`istio-ingressgateway`と比べて)変更されている場合は、ゲートウェイのポート情報をそれに応じて更新します。

ステップ3:ゲートウェイConfigMapの更新

  1. `knative-serving`名前空間下のゲートウェイconfigmap `config-istio`を更新します。

    kubectl edit configmap config-istio -n knative-serving
    

    このコマンドは、デフォルトのテキストエディタを開き、`config-istio` ConfigMapの編集を可能にします。

    apiVersion: v1
    data:
      _example: |
        ################################
        #                              #
        #    EXAMPLE CONFIGURATION     #
        #                              #
        ################################
        # ...
        external-gateways: |
          - name: knative-ingress-gateway
            namespace: knative-serving
            service: istio-ingressgateway.istio-system.svc.cluster.local
    
  2. ファイルを編集して、サービスの完全修飾URLを使用して`external-gateways`フィールドを追加します。前述の`custom-ingressgateway`サービスの例では、次のように更新する必要があります。

    apiVersion: v1
    data:
      external-gateways: |
        - name: knative-ingress-gateway
          namespace: knative-serving
          service: custom-ingressgateway.custom-ns.svc.cluster.local
    kind: ConfigMap
    [...]
    

Knativeイングレスゲートウェイの置き換え

これまでゲートウェイサービスをカスタマイズしてきましたが、独自のゲートウェイを使用することもできます。以下の手順に従って、デフォルトのゲートウェイを独自のゲートウェイに置き換えることができます。

ステップ1:ゲートウェイの作成

デフォルトの`knative-ingress-gateway`ゲートウェイを`custom-ns`内の`knative-custom-gateway`に置き換えるとします。まず、`knative-custom-gateway`ゲートウェイを作成します。

  1. 次のテンプレートを使用してYAMLファイルを作成します。

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: knative-custom-gateway
      namespace: custom-ns
    spec:
      selector:
        istio: <service-label>
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
    
    ここで、``はサービスを選択するためのラベルです(例:`ingressgateway`)。

  2. 次のコマンドを実行してYAMLファイルを適用します。

    kubectl apply -f <filename>.yaml
    
    ここで、``は前のステップで作成したファイルの名前です。

ステップ2:ゲートウェイConfigMapの更新

  1. `knative-serving`名前空間下のゲートウェイconfigmap `config-istio`を更新します。

    kubectl edit configmap config-istio -n knative-serving
    

    このコマンドは、デフォルトのテキストエディタを開き、`config-istio` ConfigMapの編集を可能にします。

    apiVersion: v1
    data:
      _example: |
        ################################
        #                              #
        #    EXAMPLE CONFIGURATION     #
        #                              #
        ################################
        # ...
        external-gateways: |
          - name: knative-ingress-gateway
            namespace: knative-serving
            service: istio-ingressgateway.istio-system.svc.cluster.local
    
  2. カスタマイズされたゲートウェイを使用して`external-gateways`フィールドを追加するようにファイルを編集します。前述の`knative-custom-gateway`の例では、次のように更新する必要があります。

    apiVersion: v1
    data:
      external-gateways: |
        - name: knative-custom-gateway
          namespace: custom-ns
          service: istio-ingressgateway.istio-system.svc.cluster.local
    kind: ConfigMap
    [...]
    

構成形式は次のとおりです。

  external-gateways: |
    - name: <gateway-name>
      namespace: <gateway-namespace>
      service: <fully-qualified-url-of-istio-ingress-service>

サイトトラフィックを理解するために、アナリティクスとCookieを使用しています。サイトの使用に関する情報は、その目的でGoogleと共有されます。詳細はこちら。