イングレス コントローラーをデプロイする
適用対象: Azure Local 22H2 上の AKS、Windows Server 上の AKS
"イングレス コントローラー" は、Kubernetes クラスター内のサービスへの外部アクセスを可能にする Kubernetes リソースです。 イングレスを使用して、オペレーターは外部ネットワーク要求 (通常は HTTP または HTTPS) にサービスを公開できます。 特定のサービスに到達する受信接続を定義する一連の規則を作成して、アクセスを構成します。
イングレス コントローラーは、Kubernetes サービスに構成可能なトラフィック ルーティングを提供するソフトウェアです。 個別の Kubernetes サービスのイングレス ルールとルートを構成するには、Kubernetes イングレス リソースが使われます。 イングレス コントローラーとイングレス ルールを使用することにより、1 つの IP アドレスを使用して、Kubernetes クラスター内の複数のサービスにトラフィックをルーティングできます。
環境内にコントローラーをデプロイした後、イングレス マニフェストを作成してデプロイできます。 現時点では、NGINX イングレス コントローラーを使用して AKS Arc のイングレスを使用します。 NGINX イングレス コントローラーをインストール、構成、および使用する方法については、「 マニフェストを使用したインストールを参照してください。
イングレスは NodePort と LoadBalancer とはユニークな方法で異なります。また、低コストの方法でクラスターへのトラフィック ルーティングが向上します。 NodePort サービスを定義すると、多数のランダム ポートが作成され、LoadBalancer サービスを定義すると、クラウド リソースのコストが必要以上に増加します。 イングレス コントローラーを定義すると、トラフィックのルーティング規則がクラスターの一部として実行される 1 つのリソースに統合されます。 NodePort と LoadBalancer では、サービスの種類でその値を指定することでサービスを公開します。一方、イングレスはサービスの独立したリソースです。 イングレスは、サービスとは別に定義、作成、破棄されます。
イングレスは、ユース ケースに応じてさまざまな方法でデプロイできます。 イングレス リソースは、イングレス コントローラー内の構成を更新して、その機能を決定するために使用されます。
イングレスを使用して外部から到達可能な URL を介してサービスを公開する
イングレスの使用例を次の YAML マニフェストに示します。 ingress.class
はメタデータ (この例では ingress-nginx
) 内に表示され、この設定により、NGINX イングレス コントローラーは、監視と更新に必要なものを認識できます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: test.example.com
http:
paths:
- path: /hello-world
pathType: Prefix
backend:
service:
name: hello-world
port:
number: 8080
spec
セクションでは、構成内容に関する情報を提供します。 この例では、ルール (またはルールのセット) が定義され、次の項目が含まれています。
- 規則が適用されるホスト。
- トラフィックが HTTP か HTTPS か。
- 監視対象のパス。
- トラフィックが送信される内部サービスとポート。
イングレスを使用してトラフィックを負荷分散する
次の例では、アプリケーションのさまざまなバックエンド間の負荷分散を許可する別のパスがマニフェストに追加されています。 この例では、オペレーターはトラフィックを分割し、説明されているパスに基づいて異なるサービス エンドポイントとデプロイに送信できます。 各パスの背後にはデプロイとサービスがあり、より多くのトラフィックを受信するエンドポイントに役立ちます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world-and-earth
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.example.com
http:
paths:
- path: /hello-world
pathType: Prefix
backend:
service:
name: hello-world
port:
number: 8080
- path: /hello-earth
pathType: Prefix
backend:
service:
name: hello-earth
port:
number: 8080
イングレスを使用して、同じ IP アドレス上の複数のホスト名に HTTP トラフィックをルーティングする
ホストごとに異なるイングレス リソースを使用できます。これにより、複数のホスト名でトラフィックを制御できます。 別のイングレス リソースを使用するには、LoadBalancer サービスに使用されている同じパブリック IP アドレスで複数のホスト名をポイントします。 次のマニフェスト ファイルでは、hello-world
の実稼働バージョンが追加されました。 ホスト名 prod.example.com
が使用され、トラフィックは新しいサービス hello-world-prod
を指します。 トラフィックはロード バランサーの IP アドレスを介して送信され、ホスト名と指定したパスに基づいてルーティングされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world-prod
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.example.com
http:
paths:
- path: /hello-world
pathType: Prefix
backend:
service:
name: hello-world-test
port:
number: 8080
- host: prod.example.com
http:
paths:
- path: /hello-world
pathType: Prefix
backend:
service:
name: hello-world-prod
port:
number: 8080
次のステップ
詳細については、次のリンクを参照してください。