Ingress は、Kubernetes クラスター内の Service への外部アクセスを有効にするために使用される Kubernetes リソースオブジェクトです。このトピックでは、Container Service for Kubernetes (ACK) で NGINX Ingress を作成、表示、更新、削除する方法について、ACK コンソールまたは kubectl を使用して説明します。
前提条件
開始する前に、以下を確認してください:
ACK クラスターが必要です。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
制限事項
NGINX Ingress コントローラーが正しく実行されるかどうかに影響するため、以下の制限事項に違反しないでください:
kube-system/nginx-ingress-lbService を削除しないでください。これは NGINX Ingress コントローラーが使用するデフォルトの Service です。削除すると、コントローラーが失敗したり停止したりする可能性があります。コンポーネントのパラメーターは、ACK コンソールまたは ACK API を介してのみカスタマイズしてください。他の方法を使用すると、予期しない動作や更新の失敗を引き起こす可能性があります。
推奨事項
コンポーネントの機能は、スニペットや Lua コードではなく、アノテーションとパラメーターを介して設定してください。ACK は、スニペット設定によって引き起こされた問題に対するテクニカルサポートを提供しません。
アップストリームのオープンソースリリースからの既知のバグや脆弱性を避けるため、NGINX Ingress コントローラーを最新バージョンに更新してください。
高負荷シナリオでは、各 NGINX Ingress コントローラー Pod を専用ノードにデプロイします。詳細については、「Ingress コントローラーを高信頼性アーキテクチャでデプロイする」をご参照ください。
完全な使用リファレンスについては、「NGINX Ingress コントローラーの使用上の注意」をご参照ください。
ACK コンソールでの NGINX Ingress の作成
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、対象クラスターの名前をクリックします。左側のペインで、[ネットワーク] > [Ingress] を選択します。
[Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、次のパラメーターを設定します:
パラメーター 説明 例 ゲートウェイタイプ ALB、MSE クラウドネイティブゲートウェイ、または Nginx を選択します。比較については、「Nginx Ingress、ALB Ingress、MSE Ingress の比較」をご参照ください。 Nginx 名前 Ingress の名前。 nginx-ingress Ingress クラス Ingress のクラス。 nginx ルール [+ ルールの追加] をクリックしてルーティングルールを定義します。各ルールについて、[ドメイン名] (カスタムドメイン)、[パス] (バックエンド Service の URL パス)、[ルール] (Prefix、Exact、または ImplementationSpecific)、Service (バックエンド Service)、および [ポート] (公開される Service ポート) を指定します。[+ 追加] をクリックして、同じドメインに複数のパスを追加します。 ドメイン名: test.example.com、パス:/、ルール: ImplementationSpecific、Service:nginx-ingress-lb、ポート:80TLS 設定 TLS 認証を有効にします。ドメイン名を指定し、Secret を選択または作成します ( [名前]、[証明書]、[キー] が必要です)。[+ 追加] をクリックして、複数の TLS 証明書をアタッチします。詳細については、「Ingress のサポート」をご参照ください。 ドメイン名: test.example.com、Secret:certその他 オプション機能を設定します: [カナリアリリース] — リクエストヘッダー ( nginx.ingress.kubernetes.io/canary-by-header、nginx.ingress.kubernetes.io/canary-by-header-value、nginx.ingress.kubernetes.io/canary-by-header-pattern)、Cookie (nginx.ingress.kubernetes.io/canary-by-cookie)、または重み (nginx.ingress.kubernetes.io/canary-weight、整数 0–100) によってトラフィックをルーティングします。複数のメソッドがアクティブな場合、リクエストヘッダーが Cookie よりも優先され、Cookie が重みよりも優先されます。[プロトコル] — バックエンドプロトコル (nginx.ingress.kubernetes.io/backend-protocol) を設定します: HTTP、HTTPS、gRPC、または gRPCS。[パスの書き換え] — 転送前にリクエストパスを書き換えます (nginx.ingress.kubernetes.io/rewrite-target)。カナリアリリース: リクエストヘッダー foo: bar(完全一致) に基づく。プロトコル: gRPCアノテーション 名前と値でカスタムアノテーションを追加します。ドロップダウンリストから選択するか、カスタムキーを入力します。アノテーションの数に制限はありません。詳細については、「アノテーション」をご参照ください。 名前: nginx.ingress.kubernetes.io/proxy-body-size、値:10mラベル Ingress の特性を記述するためのラベルを追加します。ラベルの数に制限はありません。 名前: foo、値:bar[OK] をクリックします。
Ingress が [Ingress] ページに表示されます。
既存の Ingress の管理
[Ingress] ページで、[操作] 列を使用して既存の Ingress を管理します:
[更新] — Ingress の構成を編集します
[YAML の編集] — Ingress の YAML を直接変更します
[監視] — 監視メトリクスを表示します
> [削除] — Ingress を削除します
kubectl を使用した NGINX Ingress の作成
ステップ 1:Deployment と Service の作成
Ingress はトラフィックを Service にルーティングするため、Ingress を作成する前に Service が存在している必要があります。
test-deployment-service.yamlという名前のファイルを次の内容で作成します: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マニフェストを適用します:
kubectl apply -f test-deployment-service.yaml
ステップ 2:Ingress の作成
Ingress のマニフェストフォーマットは Kubernetes のバージョンによって異なります。主な違いは、API バージョンフィールドとバックエンドサービスを指定するための spec 構造です。以下の両方の例では、/foo と /bar をポート 8080 の web1-service にルーティングします。
Kubernetes 1.19 以降 (明示的な pathType を持つ networking.k8s.io/v1 を使用):
test-ingress.yamlという名前のファイルを次の内容で作成します:フィールド 説明 metadata.nameIngress リソースの名前 ( test-ingress)。spec.rules[].host外部アクセス用のドメイン名 ( test-ingress.com)。hostとpathの両方がインバウンドリクエストに一致する場合にのみ、トラフィックがバックエンドに転送されます。spec.rules[].http.paths[].path一致させる URL パス ( /foo、/bar)。spec.rules[].http.paths[].pathTypeパスのマッチングモード。 ImplementationSpecificは、動作を Ingress コントローラーにデリゲートします。backend.service.nameバックエンド Service の名前 ( web1-service)。backend.service.port.numberトラフィックを転送する Service ポート ( 8080)。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主要なフィールド:
Kubernetes 1.19 より前のバージョン (pathType なしで networking.k8s.io/v1beta1 を使用):
test-ingress.yamlという名前のファイルを次の内容で作成します: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マニフェストを適用します:
kubectl apply -f test-ingress.yaml
ステップ 3:Ingress の確認
次のコマンドを実行して、Ingress が作成されたことを確認します:
kubectl get ingressIngress の表示、更新、削除
| 操作 | コマンド |
|---|---|
| すべての Ingress を表示 | kubectl get ingress |
| Ingress を更新 | kubectl edit ingress <Ingress name> |
| Ingress を削除 | kubectl delete ingress <Ingress name> |