この記事では、AKS クラスターで Advanced Container Networking Services を使用して L7 ポリシーを設定する方法について説明します。 [レイヤー 7 ポリシーの概要] ページに一覧表示されている制限事項と考慮事項を確認した後にのみ続行します。
[前提条件]
- アクティブなサブスクリプションを持つ Azure アカウント。 アカウントをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。
CLI 参照コマンドをローカルで実行する場合は、Azure CLI を インストール します。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。
メッセージが表示されたら、最初に使用するときに Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
この記事の手順に必要な Azure CLI の最小バージョンは 2.71.0 です。 バージョンを確認するには、az --version
を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。
aks-preview
Azure CLI 拡張機能をインストールする
az extension add
または az extension update
コマンドを使用して、Azure CLI プレビュー拡張機能をインストールまたは更新します。
aks-preview Azure CLI 拡張機能の最小バージョンは次のとおりです。 14.0.0b6
# Install the aks-preview extension
az extension add --name aks-preview
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview
AdvancedNetworkingL7PolicyPreview
フィーチャーフラグを登録する
AdvancedNetworkingL7PolicyPreview
コマンドを使用して、az feature register
機能フラグを登録します。
az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingL7PolicyPreview"
az feature show
コマンドを使用して、登録が成功したことを確認します。 登録が完了するまでに数分かかります。
az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingL7PolicyPreview"
機能にRegistered
が表示されたら、Microsoft.ContainerService
コマンドを使用して、az provider register
リソース プロバイダーの登録を更新します。
アドバンスト コンテナー ネットワークサービスを有効にする
これ以降の作業では、アドバンスト コンテナー ネットワークサービスが有効になっている AKS クラスターが必要となります。
az aks create
コマンドにアドバンスト コンテナー ネットワークサービスのフラグ --enable-acns
を指定すると、アドバンスト コンテナー ネットワークサービスのすべての機能を備えた新しい AKS クラスターが作成されます。 これらの機能には以下が含まれます。
コンテナー ネットワークの監視: トラフィックに関する分析情報を提供します。 詳細については、コンテナー ネットワークの監視に関するページを参照してください。
Container Network Security: 完全修飾ドメイン名 (FQDN) フィルター処理などのセキュリティ機能を提供します。 詳細については、コンテナー ネットワークのセキュリティに関するページを参照してください。
注
Cilium データ プレーンを備えたクラスターでは、Kubernetes バージョン 1.29 から、コンテナー ネットワークの監視とコンテナー ネットワークのセキュリティがサポートされます。
このデモでは、L7 ポリシーを有効にするには、 --acns-advanced-networkpolicies
パラメーターを "L7" に設定する必要があります。 このパラメーターを "L7" に設定すると、FQDN フィルター処理も有効になります。 FQDN フィルタリングのみを有効にする場合は、パラメーターを "FQDN" に設定します。 両方の機能を無効にするには、「 コンテナー ネットワーク セキュリティの無効化」に記載されている手順に従います。
export CLUSTER_NAME="<aks-cluster-name>"
# Create an AKS cluster
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--generate-ssh-keys \
--network-plugin azure \
--network-dataplane cilium \
--enable-acns \
--acns-advanced-networkpolicies L7
アドバンスト コンテナー ネットワークサービスを既存のクラスターに対して有効にする
az aks update
コマンドにアドバンスト コンテナー ネットワークサービスのフラグ --enable-acns
を指定すると、コンテナー ネットワークの監視とコンテナー ネットワークのセキュリティの機能を含むすべてのアドバンスト コンテナー ネットワークサービス機能で既存の AKS クラスターが更新されます。
注
アドバンスト コンテナー ネットワークサービスのコンテナー ネットワークのセキュリティ機能をサポートしているのは、Cilium データ プレーンを備えたクラスターだけです。
このデモでは、L7 ポリシーを有効にするには、 --acns-advanced-networkpolicies
パラメーターを "L7" に設定する必要があります。 このパラメーターを "L7" に設定すると、FQDN フィルター処理も有効になります。 FQDN フィルタリングのみを有効にする場合は、パラメーターを "FQDN" に設定します。 両方の機能を無効にするには、「 コンテナー ネットワーク セキュリティの無効化」に記載されている手順に従います。
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns \
--acns-advanced-networkpolicies L7
クラスターの資格情報を取得する
az aks get-credentials
コマンドを使用してクラスターの資格情報を取得します。
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
AKS クラスターで http-server アプリケーションを設定する
次の YAML を AKS クラスターに適用して、 http-server
アプリケーションを設定します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-server
labels:
app: http-server
spec:
replicas: 1
selector:
matchLabels:
app: http-server
template:
metadata:
labels:
app: http-server
spec:
containers:
- name: http-server
image: nginx:latest
ports:
- containerPort: 8080
volumeMounts:
- name: config-volume
mountPath: /etc/nginx/conf.d
volumes:
- name: config-volume
configMap:
name: nginx-config
---
apiVersion: v1
kind: Service
metadata:
name: http-server
spec:
selector:
app: http-server
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
default.conf: |
server {
listen 8080;
___location / {
return 200 "Hello from the server root!\n";
}
___location /products {
return 200 "Listing products...\n";
}
}
AKS クラスターで http-client アプリケーションを設定する
次の YAML を AKS クラスターに適用して、 http-client
アプリケーションを設定します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-client
labels:
app: http-client
spec:
replicas: 1
selector:
matchLabels:
app: http-client
template:
metadata:
labels:
app: http-client
spec:
containers:
- name: http-client
image: curlimages/curl:latest
command: ["sleep", "infinity"]
ポリシーを使用して接続をテストする
次に、次のレイヤー 7 ポリシーを適用して、GET
アプリケーションからhttp-client
の/products
エンドポイントへのhttp-server
要求のみを許可します。
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-get-products
spec:
description: "Allow only GET requests to /products from http-client to http-server"
endpointSelector:
matchLabels:
app: http-server
ingress:
- fromEndpoints:
- matchLabels:
app: http-client
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: "GET"
path: "/products"
ポリシーを検証する
ポリシーの適用を確認するには、 http-client
ポッドから次のコマンドを実行します。
kubectl exec -it <your-http-client-pod-name> -n default -- curl -v http://http-server:80/products
上記のコマンドを実行すると、 Listing products...
のような出力が期待されます
kubectl exec -it <your-http-client-pod-name> -n default -- curl -v -XPOST http://http-server:80/products -d "test=data"
上記のコマンドを実行すると、 Access Denied
のような出力が期待されます
L7 メトリックの監視
Advanced Container Network Service のコンテナー ネットワーク監視機能が有効になっている場合は、Grafana でトラフィックを視覚化できます。
これらの L7 メトリックの分析を簡略化するために、構成済みの Azure Managed Grafana ダッシュボードが用意されています。 "> などのファイル名を含む、Azure Managed Prometheus フォルダーダッシュボードの下にあります。
次のようなメトリックが表示されます。
リソースをクリーンアップする
このアプリケーションの使用を計画していない場合は、az group delete
コマンドを使用して、この記事で作成したその他のリソースを削除します。
az group delete --name $RESOURCE_GROUP
次のステップ
このハウツー記事では、AKS クラスターに対して Advanced Container Networking Services で L7 ポリシーを有効にして適用する方法について説明しました。
- Azure Kubernetes Service (AKS) 用のアドバンスト コンテナー ネットワークサービスの詳細については、Azure Kubernetes Service (AKS) 用のアドバンスト コンテナー ネットワークサービスとは何かに関するページを参照してください。
Azure Kubernetes Service