アプリケーション ルーティング アドオンでのマネージド 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
コマンドを使って、ポッドの例を実行するためのhello-web-app-routing
という名前のアプリケーション名前空間を作成します。kubectl create namespace hello-web-app-routing
deployment.yaml という名前の新しいファイルに次の YAML マニフェストをコピーしてデプロイを作成し、ローカル コンピューターにファイルを保存します。
apiVersion: apps/v1 kind: Deployment metadata: name: aks-helloworld namespace: hello-web-app-routing spec: replicas: 1 selector: matchLabels: app: aks-helloworld template: metadata: labels: app: aks-helloworld spec: containers: - name: aks-helloworld image: mcr.microsoft.com/azuredocs/aks-helloworld:v1 ports: - containerPort: 80 env: - name: TITLE value: "Welcome to Azure Kubernetes Service (AKS)"
service.yaml という名前の新しいファイルに次の YAML マニフェストをコピーしてサービスを作成し、ローカル コンピューターにファイルを保存します。
apiVersion: v1 kind: Service metadata: name: aks-helloworld namespace: hello-web-app-routing spec: type: ClusterIP ports: - port: 80 selector: app: aks-helloworld
イングレス オブジェクトを作成する
アプリケーション ルーティング アドオンにより、webapprouting.kubernetes.azure.com という名前のクラスターにイングレス クラスが作成されます。 このクラスを使ってイングレス オブジェクトを作成すると、アドオンがアクティブになります。
次の YAML マニフェストを ingress.yaml という名前の新しいファイルにコピーし、ファイルをローカル コンピューターに保存します。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix
kubectl apply
コマンドを使ってクラスター リソースを作成します。kubectl apply -f deployment.yaml -n hello-web-app-routing
次の出力例では、作成されたリソースが示されています。
deployment.apps/aks-helloworld created
kubectl apply -f service.yaml -n hello-web-app-routing
次の出力例では、作成されたリソースが示されています。
service/aks-helloworld created
kubectl apply -f ingress.yaml -n hello-web-app-routing
次の出力例では、作成されたリソースが示されています。
ingress.networking.k8s.io/aks-helloworld created
マネージド イングレスが作成されたことを確認する
マネージド イングレスが作成されたことは、kubectl get ingress
コマンドを使って確認できます。
kubectl get ingress -n hello-web-app-routing
次の出力例では、作成されたマネージド イングレスが示されています。
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
アプリケーション ルーティング アドオンを削除する
関連付けられている名前空間を削除するには、kubectl delete namespace
コマンドを使います。
kubectl delete namespace hello-web-app-routing
クラスターからアプリケーション ルーティング アドオンを削除するには、az aks approuting disable
コマンドを使います。
az aks approuting disable --name myAKSCluster --resource-group myResourceGroup
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