アプリケーション ルーティング アドオンでのマネージド NGINX イングレス
ハイパーテキスト転送プロトコル (HTTP) とセキュリティで保護された (HTTPS) トラフィックを、Azure Kubernetes Service (AKS) クラスターで実行されているアプリケーションにルーティングする 1 つの方法は、Kubernetes イングレス オブジェクトを使うことです。 アプリケーション ルーティング アドオンの NGINX イングレス クラスを使用するイングレス オブジェクトを作成すると、アドオンによって AKS クラスター内の 1 つ以上のイングレス コントローラーが作成、構成、管理されます。
この記事では、AKS クラスターに基本的なイングレス コントローラーをデプロイして構成する方法について説明します。
NGINX を使用するアプリケーション ルーティング アドオンの機能
NGINX を使用するアプリケーション ルーティング アドオンでは、次の機能が提供されます。
- Kubernetes NGINX イングレス コントローラーに基づくマネージド NGINX イングレス コントローラーの簡単な構成。
- パブリック ゾーンとプライベート ゾーンの管理のための Azure DNS との統合
- Azure Key Vault に格納されている証明書での SSL 終端。
その他の構成については、次を参照してください。
Cloud Native Computing Foundation (CNCF) による Open Service Mesh (OSM) の廃止に伴い、OSM を使用したアプリケーション ルーティング アドオンの使用は非推奨となっています。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料のアカウントを作成できます。
- Azure CLI バージョン 2.54.0 以降がインストールされ構成されていること。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
制限事項
- アプリケーション ルーティング アドオンでは、最大で 5 つの Azure DNS ゾーンがサポートされます。
- アプリケーション ルーティング アドオンを有効にできるのは、マネージド ID を持つ AKS クラスターにおいてだけです。
- アドオンと統合されるすべてのグローバル Azure DNS ゾーンは、同じリソース グループ内にある必要があります。
- アドオンと統合されるすべてのプライベート Azure DNS ゾーンは、同じリソース グループ内にある必要があります。
app-routing-system
名前空間での ingress-nginxConfigMap
の編集はサポートされていません。- 次のスニペットの注釈はブロックされているため、イングレスを構成できません。
load_module
、lua_package
、_by_lua
、location
、root
、proxy_pass
、serviceaccount
、{
、}
、'
。
Azure CLI を使用してアプリケーション ルーティングを有効にする
新しいクラスターで有効にする
新しいクラスターでアプリケーション ルーティングを有効にするには、--enable-app-routing
フラグを指定して az aks create
コマンドを使用します。
az aks create \
--resource-group <ResourceGroupName> \
--name <ClusterName> \
--location <Location> \
--enable-app-routing \
--generate-ssh-keys
既存のクラスターで有効にする
既存のクラスターでアプリケーション ルーティングを有効にするには、az aks approuting enable
コマンドを使用します。
az aks approuting enable --resource-group <ResourceGroupName> --name <ClusterName>
ご利用の AKS クラスターに接続する
お使いのローカル コンピューターから Kubernetes クラスターに接続するには、kubectl (Kubernetes コマンドライン クライアント) を使用します。 az aks install-cli
コマンドを使用してローカルにインストールすることができます。 Azure Cloud Shell を使用している場合、kubectl
は既にインストールされています。
az aks get-credentials コマンドを使用して、Kubernetes クラスターに接続するように kubectl
を構成します。
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
アプリケーションをデプロイする
アプリケーション ルーティング アドオンは、Kubernetes イングレス オブジェクトの注釈を使って適切なリソースを作成します。
kubectl create namespace
コマンドを使って、ポッドの例を実行するためのaks-store
という名前のアプリケーション名前空間を作成します。kubectl create namespace aks-store
次の YAML マニフェスト ファイルを使用して、AKS ストア アプリケーションをデプロイします。
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
このマニフェストにより、AKS ストア アプリケーションに必要なデプロイとサービスが作成されます。
イングレス オブジェクトを作成する
アプリケーション ルーティング アドオンにより、webapprouting.kubernetes.azure.com という名前のクラスターにイングレス クラスが作成されます。 このクラスを使ってイングレス オブジェクトを作成すると、アドオンがアクティブになります。
次の YAML マニフェストを ingress.yaml という名前の新しいファイルにコピーし、ファイルをローカル コンピューターに保存します。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: store-front namespace: aks-store spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - http: paths: - backend: service: name: store-front port: number: 80 path: / pathType: Prefix
kubectl apply
コマンドを使用してイングレス リソースを作成します。kubectl apply -f ingress.yaml -n aks-store
次の出力例では、作成されたリソースが示されています。
ingress.networking.k8s.io/store-front created
マネージド イングレスが作成されたことを確認する
マネージド イングレスが作成されたことは、kubectl get ingress
コマンドを使って確認できます。
kubectl get ingress -n aks-store
次の出力例では、作成されたマネージド イングレスが示されています。
NAME CLASS HOSTS ADDRESS PORTS AGE
store-front webapprouting.kubernetes.azure.com * 51.8.10.109 80 110s
AKS ストアが動作し、ブラウザーがイングレス コントローラーのパブリック IP アドレスを指していることを確認できます。 kubectl を使用して IP アドレスを検索します。
kubectl get service -n app-routing-system nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
アプリケーション ルーティング アドオンを削除する
関連付けられている名前空間を削除するには、kubectl delete namespace
コマンドを使います。
kubectl delete namespace aks-store
クラスターからアプリケーション ルーティング アドオンを削除するには、az aks approuting disable
コマンドを使います。
az aks approuting disable --name <ClusterName> --resource-group <ResourceGroupName>
Note
アプリケーション ルーティング アドオンが無効になっているときにクラスターへのトラフィックが中断される可能性を回避するために、configMaps、"シークレット"、コントローラーを実行する "デプロイ" など、一部の Kubernetes リソースはクラスター上に残ります。 これらのリソースは、app-routing-system 名前空間にあります。 これらのリソースが不要になった場合は、kubectl delete ns app-routing-system
を使用してこの名前空間を削除すると削除できます。
次のステップ
カスタム イングレス構成の設定に関する記事には、Azure DNS を使って高度なイングレス構成を作成してカスタム ドメインを構成し、DNS ゾーンの管理と、セキュリティで保護されたイングレスの設定を行う方法が説明されています。
Azure 内部ロード バランサーと統合し、プライベート エンドポイントの DNS 解決を有効にして、特定のドメインを解決するようにプライベート Azure DNS ゾーンを構成することについては、「Azure プライベート DNS ゾーンの内部 NGINX イングレス コントローラーの構成」を参照してください。
アプリケーションのパフォーマンスと使用状況の分析の一環として、Grafana で Prometheus を使用して、アプリケーション ルーティング アドオンに含まれる ingress-nginx コントローラー メトリックを監視する (プレビュー) 方法について理解します。
Azure Kubernetes Service