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の作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[Ingress] ページで、[Ingressの作成] をクリックします。 [Ingressの作成] ダイアログボックスで、Ingressを設定します。
パラメーター
説明
例
ゲートウェイタイプ
要件に基づいて、ALB Ingress、MSE 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認証を有効にできます。
ドメイン名: カスタムドメイン名を入力します。
シークレット: 使用するシークレットを選択します。
シークレットを作成する場合は、次の手順を実行します。
Secretの右側にある [作成] をクリックします。
[シークレットの作成] ダイアログボックスで、[名前] 、[証明書] 、および [キー] パラメーターを指定します。 [OK] をクリックします。
[シークレット] ドロップダウンリストから作成したシークレットを選択します。
[+ 追加] をクリックしてTLS証明書を追加します。
Ingressの使用方法の詳細については、「Ingressのサポート」をご参照ください。
TLS認証を有効にします。
ドメイン名: test.example.com
秘密: cert
その他
カナリアリリース: カナリアリリースを有効にします。 リクエストヘッダー、Cookie、および重みに基づいてカナリアリリースルールを設定できます。
説明カナリアリリースルールは、リクエストヘッダー、Cookie、および重みのいずれかの要素のみに基づいて設定できます。 リクエストヘッダー、Cookie、および重みに基づいて、カナリアリリースルールを同時に設定することもできます。 この場合、リクエストヘッダー、Cookie、および重みは、優先順位の高い順に有効になります。
[リクエストヘッダーに基づく]:
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
注釈を追加して、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
設定が完了したら、をクリックします。OK.
Ingressページで、Ingressの作成後にIngressを表示できます。
関連ドキュメント
[Ingress] ページで、[更新] 、[YAMLの編集] 、または [監視] をクリックするか、[操作] 列の /> [削除] を選択してIngressを管理します。
方法2: kubectlを使用する
NGINX Ingressの作成
デプロイメントとサービスを作成します。
Ingressを作成する前に、外部アクセスを有効にするサービスを作成する必要があります。
という名前のファイルを作成します。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
次のコマンドを実行して、展開とサービスを作成します。
kubectl apply -f test-deployment-service.yaml
Ingressを作成します。
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
: バックエンドサービスの名前とポート番号。サービス名:
バックエンド
サービスの名前。サービスポート: 公開されているサービスポート。
次のコマンドを実行して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>