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

Container Service for Kubernetes:NGINX Ingressの作成

最終更新日:Nov 21, 2024

Ingressは、Kubernetesクラスター内のサービスへの外部アクセスを有効にするために使用されるKubernetesリソースオブジェクトです。 Container Service for Kubernetes (ACK) では、Ingressを使用して、Kubernetesクラスター内のポッドへのリクエストを処理するための複数の転送ルールを設定できます。 このトピックでは、ACKコンソールまたはkubectlを使用してNGINX Ingressを作成、表示、更新、および削除する方法について説明します。

前提条件

ACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。

使用上の注意

NGINX Ingressコントローラーを使用する場合は、次の項目に注意してください。

  • コンポーネントパラメーターをカスタマイズする場合は、ACKコンソールのクラスター詳細ページに移動するか、ACK APIを呼び出します。 他のメソッドを使用してコンポーネントパラメーターをカスタマイズすると、コンポーネントが期待どおりに実行されず、更新の問題が発生する可能性があります。

  • nginx ingressコントローラーで使用されるデフォルトのサービスであるkube-system /NGINX-Ingress-lbサービスは削除しないでください。 サービスを削除すると、NGINX Ingressコンポーネントが期待どおりに実行されないか、実行が停止することがあります。

  • スニペットまたはLuaコードを使用する代わりに、アノテーションとパラメーターを使用してコンポーネントの機能を構成することをお勧めします。 Snippet構成を使用してコンポーネントを構成し、Snippet構成が期待どおりに有効にならない場合、ACKはテクニカルサポートを提供しません。

  • NGINX Ingressコントローラーには、オープンソースバージョンで発見されたバグや脆弱性がある可能性があります。 アプリケーションへの悪影響を避けるため、NGINX Ingressコントローラーを最新バージョンに更新します。

  • 負荷が大きいシナリオでは、NGINX Ingressコントローラーの各ポッドを専用ノードにデプロイすることをお勧めします。 詳細については、「高信頼性アーキテクチャでのIngress Controllerのデプロイ」をご参照ください。

  • NGINX Ingressコントローラーの使用方法の詳細については、「NGINX Ingressコントローラーの使用に関する注意事項」をご参照ください。

手順

方法1: ACKコンソールを使用する

NGINX Ingressの作成

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ネットワーク] > [Ingress] を選択します。

  3. [Ingress] ページで、[Ingressの作成] をクリックします。 [Ingressの作成] ダイアログボックスで、Ingressを設定します。

    パラメーター

    説明

    ゲートウェイタイプ

    要件に基づいて、ALB IngressMSE Ingressy、またはNginx Ingressを選択できます。

    3つのゲートウェイタイプの違いの詳細については、「NGINX Ingress、ALB Ingress、およびMSE Ingressの比較」をご参照ください。

    Nginx Ingress

    名前

    Ingressの名前を指定します。

    nginx-ingress

    Ingressクラス

    Ingressのクラスを指定します。

    nginx

    ルール

    [+ ルールの追加] をクリックして、Ingressルールを追加します。

    • ドメイン名: カスタムドメイン名を入力します。

    • マッピング: 次のパラメーターを指定します。

      • パス: バックエンドサービスのURLパスを入力します。 この例では、ルートパス /が使用されます。

      • ルール: [プレフィックス (プレフィックスベースの一致)][完全一致] 、または [ImplementationSpecific (デフォルト値)] を選択できます。

      • サービス: バックエンドサービスを選択します。

      • ポート: 公開するサービスポートを指定します。

    • ドメイン名に複数のパスを設定できます。 [+ 追加] をクリックしてパスを追加します。

    • ドメイン名: test.example.com

    • マッピング:

      • パス: この例では、ルートパス /が使用されます。

      • ルール: ImplementationSpecific (デフォルト値)

      • サービス: nginx-ingress-lb

      • ポート: 80

    TLS設定

    IngressのTLS認証を有効にできます。

    • ドメイン名: カスタムドメイン名を入力します。

    • シークレット: 使用するシークレットを選択します。

      シークレットを作成する場合は、次の手順を実行します。

      1. Secretの右側にある [作成] をクリックします。

      2. [シークレットの作成] ダイアログボックスで、[名前][証明書] 、および [キー] パラメーターを指定します。 [OK] をクリックします。

      3. [シークレット] ドロップダウンリストから作成したシークレットを選択します。

    [+ 追加] をクリックしてTLS証明書を追加します。

    Ingressの使用方法の詳細については、「Ingressのサポート」をご参照ください。

    TLS認証を有効にします。

    • ドメイン名: test.example.com

    • 秘密: cert

    その他

    • カナリアリリース: カナリアリリースを有効にします。 リクエストヘッダー、Cookie、および重みに基づいてカナリアリリースルールを設定できます。

      説明

      カナリアリリースルールは、リクエストヘッダー、Cookie、および重みのいずれかの要素のみに基づいて設定できます。 リクエストヘッダー、Cookie、および重みに基づいて、カナリアリリースルールを同時に設定することもできます。 この場合、リクエストヘッダー、Cookie、および重みは、優先順位の高い順に有効になります。

      • [リクエストヘッダーに基づく]: nginx.ingress.kubernetes.io/canary-by-Headernginx.ingress.kubernetes.io/canary-by-header-value、またはnginx.ingress.kubernetes.io/canary-by-header-pattern注釈を追加して、リクエストヘッダーに基づいてトラフィックを分散します。

      • Cookieに基づく: nginx.ingress.kubernetes.io/canary-by-cookie注釈を追加して、Cookieに基づいてトラフィックを配布します。

      • [重みに基づく]: nginx.ingress.kubernetes.io/canary-Weightアノテーションを追加して、サービスの重み (0〜100の整数) に基づいてトラフィックを分散します。

    • プロトコル: nginx.ingress.kubernetes.io/backend-Protocolアノテーションを追加して、バックエンドサービスで使用されるプロトコルを選択します。

      HTTP、HTTPS、gRPC、およびgRPCSがサポートされています。

    • パスの書き換え: nginx.ingress.kubernetes.io /Rewrite-targetアノテーションを追加して、リクエストがバックエンドサービスに転送される前にクライアントリクエストのパスを書き換えます。

    カナリアリリースを有効にします。

    • [リクエストヘッダーに基づく] を選択し、次のパラメーターを指定します。

      • リクエストヘッダー: foo

      • 一致ルール: 完全一致

      • 一致値: バー

    • プロトコル: gRPC

    • パスの書き換え: このパラメーターは空のままにします。

    注釈

    カスタム注釈の名前と値を入力できます。 ドロップダウンリストから名前で注釈を選択または検索することもできます。 Ingressアノテーションの詳細については、「アノテーション」をご参照ください。

    [+ 注釈の追加] をクリックして注釈を追加します。 ACKは、追加できるIngressアノテーションの数を制限しません。

    • 名前: nginx.ingress.kubernetes.io/proxy-body-size

    • : 10m

    ラベル

    Ingressの特性を表すラベルを追加できます。

    [+ ラベルの追加] をクリックしてラベルを追加します。 追加できるIngressラベルの数に制限はありません。

    • 名前: foo

    • : bar

  4. 設定が完了したら、をクリックします。OK.

    Ingressページで、Ingressの作成後にIngressを表示できます。

    関連ドキュメント

    [Ingress] ページで、[更新][YAMLの編集] 、または [監視] をクリックするか、[操作] 列の 更多 /> [削除] を選択してIngressを管理します。

方法2: kubectlを使用する

NGINX Ingressの作成

  1. デプロイメントとサービスを作成します。

    Ingressを作成する前に、外部アクセスを有効にするサービスを作成する必要があります。

    1. という名前のファイルを作成します。test-deployment-service.yaml次の内容をファイルにコピーします。

      次のYAMLテンプレートを使用して、test-web1という名前のデプロイメントとweb1-serviceという名前のサービスを作成します。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: test-web1
        labels:
          app: test-web1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: test-web1
        template:
          metadata:
            labels:
              app: test-web1
          spec:
            containers:
            - name: test-web1
              imagePullPolicy: IfNotPresent
              image: registry.cn-hangzhou.aliyuncs.com/yilong/ingress-test:web1
              ports:
              - containerPort: 8080
      --- 
      apiVersion: v1
      kind: Service
      metadata:
        name: web1-service
      spec:
        type: ClusterIP
        selector:
          app: test-web1
        ports:
          - port: 8080
            targetPort: 8080
    2. 次のコマンドを実行して、展開とサービスを作成します。

      kubectl apply -f test-deployment-service.yaml
  2. Ingressを作成します。

    1. test-ingress.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。

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

      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      metadata:
        name: test-ingress
        namespace: default
      spec:
        rules:
        - host: test-ingress.com
          http:
            paths:
            - path: /foo
              backend:
                serviceName: web1-service
                servicePort: 8080
            - path: /bar
              backend:
                serviceName: web1-service
                servicePort: 8080

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

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: test-ingress
        namespace: default
      spec:
        rules:
        - host: test-ingress.com
          http:
            paths:
            - path: /foo
              backend:
                service: 
                  name: web1-service
                  port:
                    number: 8080
              pathType: ImplementationSpecific
            - path: /bar
              backend:
                service: 
                  name: web1-service
                  port:
                    number: 8080
              pathType: ImplementationSpecific
      • : Ingressの名前。 この例では、名前はtest-ingressに設定されています。

      • : バックエンドサービスへの外部アクセスを許可するドメイン名。

      • : リクエストの照合に使用されるURLパス。 SLBは、インバウンドリクエストがホストおよびパス設定と一致する場合にのみ、トラフィックをバックエンドサービスに転送します。

      • backend: バックエンドサービスの名前とポート番号。

        • サービス名: バックエンドサービスの名前。

        • サービスポート: 公開されているサービスポート。

    2. 次のコマンドを実行してIngressを作成します。

      kubectl apply -f test-ingress.yaml

Ingressの表示

次のコマンドを実行して、Ingressを表示します。

kubectl get ingress

Ingress の更新

次のコマンドを実行して、Ingressを更新します。

kubectl edit ingress <Ingress name>

Ingress の削除

次のコマンドを実行して、Ingressを削除します。

kubectl delete ingress <Ingress name>