このドキュメントは、Advanced Container Networking Services を使用してコンテナー ネットワーク ログ機能を構成および利用するための明確な手順を提供するように設計されています。 これらのログは、コンテナー化された環境内の可視性を高めるために調整された永続的なネットワーク フロー監視を提供します。 コンテナー ネットワーク ログをキャプチャすることで、ネットワーク トラフィックを効果的に追跡し、異常を検出し、パフォーマンスを最適化し、確立されたポリシーに確実に準拠できます。 提供されている詳細な手順に従って、システムのコンテナー ネットワーク ログを設定して統合します。 コンテナー ネットワーク ログ機能の詳細については、「コンテナー ネットワーク ログの概要」を参照してください。
[前提条件]
- アクティブなサブスクリプションを持つ 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.73.0 です。 バージョンを見つけるには、
az --version
を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。格納されたログ モードのコンテナー ネットワーク ログは、Cilium データ プレーンに対してのみ機能します。
オンデマンド モードの Container Network ログは、Cilium データ プレーンと非 Cilium データ プレーンの両方で機能します。
既存のクラスターが <= 1.32 の場合は、クラスターを使用可能な最新の Kubernetes バージョンにアップグレードします。
aks-preview
Azure CLI 拡張機能をインストールする
az extension add
または az extension update
コマンドを使用して、Azure CLI プレビュー拡張機能をインストールまたは更新します。
aks-preview Azure CLI 拡張機能の最小バージョンは 18.0.0b2
。
# 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
コンテナー ネットワーク ログに対する格納ログ モードの構成
"AdvancedNetworkingFlowLogsPreview" 機能フラグを登録する
AdvancedNetworkingFlowLogsPreview
コマンドを使用して、az feature register
機能フラグを登録します。
az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingFlowLogsPreview"
az feature show
コマンドを使用して、登録が成功したことを確認します。 登録が完了するまでに数分かかります。
az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingFlowLogsPreview"
機能にRegistered
が表示されたら、Microsoft.ContainerService
コマンドを使用して、az provider register
リソース プロバイダーの登録を更新します。
新しいクラスターで高度なコンテナー ネットワーク サービスを有効にする
az aks create
コマンドにアドバンスト コンテナー ネットワークサービスのフラグ --enable-acns
を指定すると、アドバンスト コンテナー ネットワークサービスのすべての機能を備えた新しい AKS クラスターが作成されます。 これらの機能には以下が含まれます。
コンテナー ネットワークの監視: トラフィックに関する分析情報を提供します。 詳細については、コンテナー ネットワークの監視に関するページを参照してください。
Container Network Security: 完全修飾ドメイン フィルタリング (FQDN) などのセキュリティ機能を提供します。 詳細については、コンテナー ネットワークのセキュリティに関するページを参照してください。
# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"
export RESOURCE_GROUP="<aks-resource-group>"
# Create an AKS cluster
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--generate-ssh-keys \
--location uksouth \
--max-pods 250 \
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--node-count 2 \
--pod-cidr 192.168.0.0/16 \
--kubernetes-version 1.32 \
--enable-acns
ログ フィルター処理用のカスタム リソースの構成
格納されたログ モードでコンテナー ネットワーク ログを構成するには、ログ収集のフィルターを設定する特定のカスタム リソースを定義する必要があります。 少なくとも 1 つのカスタム リソースが定義されると、ログが収集され、ホスト ノードの "/var/log/acns/hubble/events.log" に格納されます。 ログ記録を構成するには、名前空間、ポッド、サービス、ポート、プロトコル、または判定などのフィルターを指定して、"RetinaNetworkFlowLog" 型のカスタム リソースを定義して適用する必要があります。 クラスター内に複数のカスタム リソースを同時に存在させることができます。 空でないフィルターでカスタム リソースが定義されていない場合、指定された場所にログは保存されません。 カスタム リソースのこのサンプル定義では、Retina ネットワーク フロー ログを構成する方法を示します。
RetinaNetworkFlowLog テンプレート
apiVersion: acn.azure.com/v1alpha1
kind: RetinaNetworkFlowLog
metadata:
name: sample-retinanetworkflowlog # Cluster scoped
spec:
includefilters: # List of filters
- name: sample-filter # Filter name
from:
namespacedPod: # List of source namespace/pods. Prepend namespace with /
- sample-namespace/sample-pod
labelSelector: # Standard k8s label selector
matchLabels:
app: frontend
k8s.io/namespace: sample-namespace
matchExpressions:
- key: environment
operator: In
values:
- production
- staging
ip: # List of source IPs; can be CIDR
- "192.168.1.10"
- "10.0.0.1"
to:
namespacedPod:
- sample-namespace2/sample-pod2
labelSelector:
matchLabels:
app: backend
k8s.io/namespace: sample-namespace2
matchExpressions:
- key: tier
operator: NotIn
values:
- dev
ip:
- "192.168.1.20"
- "10.0.1.1"
protocol: # List of protocols; can be tcp, udp, dns
- tcp
- udp
- dns
verdict: # List of verdicts; can be forwarded, dropped
- forwarded
- dropped
このカスタム リソース定義のフィールドの説明を次に示します。
フィールド | タイプ | 説明 | 必須 |
---|---|---|---|
includefilters |
[]フィルター | 含めるネットワーク フローを定義するフィルターの一覧。 各フィルターは、ソース、宛先、プロトコル、およびその他の一致条件を指定します。 include フィルターは空にすることはできないため、少なくとも 1 つのフィルターを含める必要があります。 | 必須 |
filters.name |
糸 | フィルターの名前。 | オプション |
filters.protocol |
[]string | このフィルターに一致するプロトコル。 有効な値は、tcp 、udp 、および dns です。 これは省略可能なパラメーターであるため、指定されていない場合は、すべてのプロトコルを含むログが含まれます。 |
オプション |
filters.verdict |
[]string | 一致するフローの判定。 有効値は forwarded または dropped です。 これは省略可能なパラメーターであるため、指定されていない場合は、すべての判定を含むログが含まれます。 |
オプション |
filters.from |
エンドポイント | ネットワーク フローのソースを指定します。 IP アドレス、ラベル セレクター、または名前空間とポッドのペアを含めることができます。 | オプション |
Endpoint.ip |
[]string | 単一の IP または CIDR を指定できます。 | オプション |
Endpoint.labelSelector |
オブジェクト | ラベル セレクターは、ラベルに基づいてリソースをフィルター処理してクエリを実行するメカニズムであり、ユーザーはリソースの特定のサブセットを識別できます。ラベル セレクターには、matchLabels と matchExpressions という 2 つのコンポーネントを含めることができます。 キーと値のペア (例: {"app": "frontend"}) を指定して簡単に一致するには、matchLabels を使用します。 より高度な条件の場合は、matchExpressions を使用します。ここで、ラベル キー、演算子 (In、NotIn、Exists、DoesNotExist など)、およびオプションの値のリストを定義します。 論理的に ANDed であるため、matchLabels と matchExpressions の両方の条件が満たされていることを確認します。 条件が指定されていない場合、セレクターはすべてのリソースと一致します。 一致しない場合は、セレクターを null のままにします。 適切なリソース セットをターゲットにするようにラベル セレクターを慎重に定義します。 | オプション |
Endpoint.namespacedPod |
[]string | ソースを照合するための名前空間とポッドのペア ( namespace/pod として書式設定) の一覧。 name は正規表現パターン ^.+$ と一致する必要があります |
オプション |
filters.to |
エンドポイント | ネットワーク フローの宛先を指定します。 IP アドレス、ラベル セレクター、または名前空間とポッドのペアを含めることができます。 | オプション |
Endpoint.ip |
[]string | 単一の IP または CIDR を指定できます。 | オプション |
Endpoint.labelSelector |
オブジェクト | ラベルに基づいてリソースを照合するラベル セレクター。 | オプション |
Endpoint.namespacedPod |
[]string | 宛先と一致するための名前空間とポッドのペア ( namespace/pod 形式) の一覧。 |
オプション |
- 次のコマンドを使用して、RetinaNetworkFlowLog CR を適用してクラスターでのログ収集を有効にします。
kubectl apply -f <crd.yaml>
ホスト ノード自体は永続的なストレージ ソリューションではないので、ホスト ノードにローカルに格納されたログは一時的なものです。 さらに、ホスト ノードのログは、サイズが 50 MB に達するとローテーションされます。 長期的なストレージと分析を行う場合は、ログを収集して Log Analytics ワークスペースに保持するようにクラスター上の Azure Monitor エージェントを構成することをお勧めします。 または、OpenTelemetry コレクターをサードパーティのログ サービスに統合して、追加のログ管理オプションを使用することもできます。
新しいクラスター (マネージド ストレージ) の Azure Log Analytics ワークスペースのログをスクレイピングするように Azure Monitor エージェントを構成する
# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"
export RESOURCE_GROUP="<aks-resource-group>"
# Enable azure monitor with high log scale mode
### Use default Log Analytics workspace
az aks enable-addons -a monitoring --enable-high-log-scale-mode -g $RESOURCE_GROUP -n $CLUSTER_NAME
### Use existing Log Analytics workspace
az aks enable-addons -a monitoring --enable-high-log-scale-mode -g $RESOURCE_GROUP -n $CLUSTER_NAME --workspace-resource-id <workspace-resource-id>
# Update the aks cluster with enable retina flow log flag.
az aks update --enable-acns \
--enable-retina-flow-logs \
-g $RESOURCE_GROUP \
-n $CLUSTER_NAME
注
有効にすると、カスタム リソースの RetinaNetworkFlowLog が適用されると、コンテナー ネットワーク フロー ログが "/var/log/acns/hubble/events.log" に書き込まれます。 Log Analytics 統合が後で有効になっている場合、Azure Monitor エージェント (AMA) はその時点からログの収集を開始します。 2 分より前のログは取り込まれません。ログ分析ワークスペースでは、監視の開始後に追加された新しいエントリのみが収集されます。
Azure Log Analytics ワークスペースにログを格納するための既存のクラスターの構成
既存のクラスターでコンテナー ネットワーク ログを有効にするには、次の手順に従います。
次のコマンドを使用して、そのクラスターでアドオンの監視が既に有効になっているかどうかを確認します。
az aks addon list -g $RESOURCE_GROUP -n $CLUSTER_NAME
監視アドオンが既に有効になっている場合は、次のコマンドを使用してアドオンの監視を無効にします。
az aks disable-addons -a monitoring -g $RESOURCE_GROUP -n $CLUSTER_NAME
無効にする理由は、監視が既に有効になっている可能性がありますが、高スケールではありません。 詳細については、「 ハイ スケール モード」を参照してください。
高ログ スケール モードで Azure Monitor を有効にします。
### Use default Log Analytics workspace az aks enable-addons -a monitoring --enable-high-log-scale-mode -g $RESOURCE_GROUP -n $CLUSTER_NAME ### Use existing Log Analytics workspace az aks enable-addons -a monitoring --enable-high-log-scale-mode -g $RESOURCE_GROUP -n $CLUSTER_NAME --workspace-resource-id <workspace-resource-id>
網膜フロー ログ フラグを有効にして aks クラスターを更新する
az aks update --enable-acns \ --enable-retina-flow-logs \ -g $RESOURCE_GROUP \ -n $CLUSTER_NAME
クラスターの資格情報を取得する
az aks get-credentials
コマンドを使用してクラスターの資格情報を取得します。
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
セットアップを検証する
次のコマンドを使用して、Retina ネットワーク フロー ログ機能が有効になっているかどうかを検証します。
az aks show -g $RESOURCE_GROUP -n $CLUSTER_NAME
上記のコマンドからの出力は次のとおりです。
"netowrkProfile":{
"advancedNwtworking": {
"enabled": true,
"observability":{
"enabled": true
}
}
}
----------------------------
"osmagent":{
"config":{
"enableRetinaNetworkFlags": "True"
}
}
RetinaNetworkFlowLog 型の CRD が適用されているかどうかを検証する
kubectl describe retinanetworkflowlogs <cr-name>
Spec ノードに [フィルターを含める] ノードと [状態] ノードが含まれていることを確認してください。 状態。 状態は 'FAILED' ではなく 'CONFIGURED' にする必要があります
Spec:
Includefilters:
From:
Namespaced Pod:
namespace/pod-
Name: sample-filter
Protocol:
tcp
To:
Namespaced Pod:
namespace/pod-
Verdict:
dropped
Status:
State: CONFIGURED
Timestamp: 2025-05-01T11:24:48Z
Azure Managed Grafana
Azure Managed Grafana インスタンスを作成する
az grafana create を使用して、Grafana インスタンスを作成します。 Grafana インスタンスの名前は一意である必要があります。
# Set an environment variable for the Grafana name. Make sure to replace the placeholder with your own value.
export GRAFANA_NAME="<grafana-name>"
# Create Grafana instance
az grafana create \
--name $GRAFANA_NAME \
--resource-group $RESOURCE_GROUP
grafana インスタンスのデータ ソースを確認する - ユーザーは grafana ダッシュボードのデータ ソースのサブスクリプションを確認できます。次に示すように、grafana インスタンスのデータ ソース タブを確認します。
注
既定では、Azure Managed Grafana (AMG) のマネージド ID には、作成されたサブスクリプションへの読み取りアクセス権があります。 つまり、AMG と Log Analytics ワークスペースの両方が同じサブスクリプション内にある場合、追加の構成は必要ありません。 ただし、サブスクリプションが異なる場合、ユーザーは Log Analytics ワークスペースの Grafana マネージド ID に "監視閲覧者" ロールを手動で割り当てる必要があります。 詳細については、次のリンクを参照してください (アクセス許可を変更する方法)
Grafana ダッシュボードでの視覚化
ユーザーは、2 つの事前構築済みの Grafana ダッシュボードを使用して、分析のために Container Network Flow ログを視覚化できます。 お客様には、これらのダッシュボードにアクセスするためのいくつかのオプションがあります
Azure Managed Grafana を使用した視覚化
kubectl get pods
コマンドを使用して、Azure ログ ポッドが実行されていることを確認します。kubectl get pods -o wide -n kube-system | grep ama-logs
出力は次の出力例のようになります。
ama-logs-9bxc6 3/3 Running 1 (39m ago) 44m ama-logs-fd568 3/3 Running 1 (40m ago) 44m ama-logs-rs-65bdd98f75-hqnd2 2/2 Running 1 (43m ago) 22h
ログの分析を簡略化するために、構成済みの 2 つの Azure Managed Grafana ダッシュボードが用意されています。 次のように見つけることができます。
Azure /Insights/コンテナー/ネットワーク/フロー ログ - このダッシュボードでは、ネットワーク要求、応答、ドロップ、エラーなど、Kubernetes ワークロードが相互に通信している視覚化が提供されます。 現在、ユーザーは ID を持つダッシュボードをインポートする必要があります。 (ID: 23155)
Azure / Insights / Containers / Networking / Flow Logs (外部トラフィック) - このダッシュボードは、Kubernetes ワークロードが Kubernetes クラスターの外部から通信を送受信している視覚化を提供します。これには、ネットワーク要求、応答、ドロップ、エラーが含まれます。 (ID: 23156)
このダッシュボードの使用方法の詳細については、「コンテナー ネットワーク ログの概要」を参照してください。
Azure portal でのコンテナー ネットワーク ログの視覚化。
ユーザーは、クラスターの Azure Log Analytics ワークスペースで Azure portal のフロー ログを視覚化、クエリ、分析できます。
オンデマンド モードの構成
ネットワーク フローのオンデマンド モードは、Cilium データ プレーンと非 Cilium データ プレーンの両方で動作します。 これ以降の作業では、アドバンスト コンテナー ネットワークサービスが有効になっている AKS クラスターが必要となります。
az aks create
コマンドにアドバンスト コンテナー ネットワークサービスのフラグ --enable-acns
を指定すると、アドバンスト コンテナー ネットワークサービスのすべての機能を備えた新しい AKS クラスターが作成されます。 これらの機能には以下が含まれます。
コンテナー ネットワークの監視: トラフィックに関する分析情報を提供します。 詳細については、コンテナー ネットワークの監視に関するページを参照してください。
コンテナー ネットワークのセキュリティ: FQDN フィルタリングなどのセキュリティ機能を提供します。 詳細については、コンテナー ネットワークのセキュリティに関するページを参照してください。
注
Cilium データ プレーンを備えたクラスターでは、Kubernetes バージョン 1.29 から、コンテナー ネットワークの監視とコンテナー ネットワークのセキュリティがサポートされます。
# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"
# Create an AKS cluster
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--generate-ssh-keys \
--location eastus \
--max-pods 250 \
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--node-count 2 \
--pod-cidr 192.168.0.0/16 \
--kubernetes-version 1.29 \
--enable-acns
アドバンスト コンテナー ネットワークサービスを既存のクラスターに対して有効にする
az aks update
コマンドにアドバンスト コンテナー ネットワークサービスのフラグ --enable-acns
を指定すると、コンテナー ネットワークの監視とコンテナー ネットワークのセキュリティの機能を含むすべてのアドバンスト コンテナー ネットワークサービス機能で既存の AKS クラスターが更新されます。
注
アドバンスト コンテナー ネットワークサービスのコンテナー ネットワークのセキュリティ機能をサポートしているのは、Cilium データ プレーンを備えたクラスターだけです。
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns
クラスターの資格情報を取得する
az aks get-credentials
コマンドを使用してクラスターの資格情報を取得します。
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Hubble CLI のインストール
次のコマンドを使用して収集したデータにアクセスするには、Hubble CLI をインストールします。
# Set environment variables
export HUBBLE_VERSION=v1.16.3
export HUBBLE_ARCH=amd64
#Install Hubble CLI
if [ "$(uname -m)" = "aarch64" ]; then HUBBLE_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/hubble/releases/download/$HUBBLE_VERSION/hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
sha256sum --check hubble-linux-${HUBBLE_ARCH}.tar.gz.sha256sum
sudo tar xzvfC hubble-linux-${HUBBLE_ARCH}.tar.gz /usr/local/bin
rm hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
Hubble フローを視覚化する
kubectl get pods
コマンドを使用して、Hubble ポッドが実行されていることを確認します。kubectl get pods -o wide -n kube-system -l k8s-app=hubble-relay
出力は次の出力例のようになります。
hubble-relay-7ddd887cdb-h6khj 1/1 Running 0 23h
kubectl port-forward
コマンドを使用して、Hubble リレーをポート フォワードします。kubectl port-forward -n kube-system svc/hubble-relay --address 127.0.0.1 4245:443
相互 TLS (mTLS) により、Hubble リレー サーバーのセキュリティが確保されます。 Hubble クライアントがフローを取得できるようにするには、適切な証明書を取得し、それらを使用してクライアントを構成する必要があります。 次のコマンドを使用して証明書を適用します。
#!/usr/bin/env bash set -euo pipefail set -x # Directory where certificates will be stored CERT_DIR="$(pwd)/.certs" mkdir -p "$CERT_DIR" declare -A CERT_FILES=( ["tls.crt"]="tls-client-cert-file" ["tls.key"]="tls-client-key-file" ["ca.crt"]="tls-ca-cert-files" ) for FILE in "${!CERT_FILES[@]}"; do KEY="${CERT_FILES[$FILE]}" JSONPATH="{.data['${FILE//./\\.}']}" # Retrieve the secret and decode it kubectl get secret hubble-relay-client-certs -n kube-system \ -o jsonpath="${JSONPATH}" | \ base64 -d > "$CERT_DIR/$FILE" # Set the appropriate hubble CLI config hubble config set "$KEY" "$CERT_DIR/$FILE" done hubble config set tls true hubble config set tls-server-name instance.hubble-relay.cilium.io
次の
kubectl get secrets
コマンドを使用してシークレットが生成されたことを確認します。kubectl get secrets -n kube-system | grep hubble-
出力は次の出力例のようになります。
kube-system hubble-relay-client-certs kubernetes.io/tls 3 9d kube-system hubble-relay-server-certs kubernetes.io/tls 3 9d kube-system hubble-server-certs kubernetes.io/tls 3 9d
hubble observe
コマンドを使用して、Hubble リレー ポッドが実行されていることを確認します。hubble observe --pod hubble-relay-7ddd887cdb-h6khj
Hubble UI を使用して視覚化する
Hubble UI を使用するには、次を hubble-ui.yaml に保存します
apiVersion: v1 kind: ServiceAccount metadata: name: hubble-ui namespace: kube-system --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: hubble-ui labels: app.kubernetes.io/part-of: retina rules: - apiGroups: - networking.k8s.io resources: - networkpolicies verbs: - get - list - watch - apiGroups: - "" resources: - componentstatuses - endpoints - namespaces - nodes - pods - services verbs: - get - list - watch - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - get - list - watch - apiGroups: - cilium.io resources: - "*" verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: hubble-ui labels: app.kubernetes.io/part-of: retina roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: hubble-ui subjects: - kind: ServiceAccount name: hubble-ui namespace: kube-system --- apiVersion: v1 kind: ConfigMap metadata: name: hubble-ui-nginx namespace: kube-system data: nginx.conf: | server { listen 8081; server_name localhost; root /app; index index.html; client_max_body_size 1G; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # CORS add_header Access-Control-Allow-Methods "GET, POST, PUT, HEAD, DELETE, OPTIONS"; add_header Access-Control-Allow-Origin *; add_header Access-Control-Max-Age 1728000; add_header Access-Control-Expose-Headers content-length,grpc-status,grpc-message; add_header Access-Control-Allow-Headers range,keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout; if ($request_method = OPTIONS) { return 204; } # /CORS location /api { proxy_http_version 1.1; proxy_pass_request_headers on; proxy_hide_header Access-Control-Allow-Origin; proxy_pass http://127.0.0.1:8090; } location / { try_files $uri $uri/ /index.html /index.html; } # Liveness probe location /healthz { access_log off; add_header Content-Type text/plain; return 200 'ok'; } } } --- kind: Deployment apiVersion: apps/v1 metadata: name: hubble-ui namespace: kube-system labels: k8s-app: hubble-ui app.kubernetes.io/name: hubble-ui app.kubernetes.io/part-of: retina spec: replicas: 1 selector: matchLabels: k8s-app: hubble-ui template: metadata: labels: k8s-app: hubble-ui app.kubernetes.io/name: hubble-ui app.kubernetes.io/part-of: retina spec: serviceAccountName: hubble-ui automountServiceAccountToken: true containers: - name: frontend image: mcr.microsoft.com/oss/cilium/hubble-ui:v0.12.2 imagePullPolicy: Always ports: - name: http containerPort: 8081 livenessProbe: httpGet: path: /healthz port: 8081 readinessProbe: httpGet: path: / port: 8081 resources: {} volumeMounts: - name: hubble-ui-nginx-conf mountPath: /etc/nginx/conf.d/default.conf subPath: nginx.conf - name: tmp-dir mountPath: /tmp terminationMessagePolicy: FallbackToLogsOnError securityContext: {} - name: backend image: mcr.microsoft.com/oss/cilium/hubble-ui-backend:v0.12.2 imagePullPolicy: Always env: - name: EVENTS_SERVER_PORT value: "8090" - name: FLOWS_API_ADDR value: "hubble-relay:443" - name: TLS_TO_RELAY_ENABLED value: "true" - name: TLS_RELAY_SERVER_NAME value: ui.hubble-relay.cilium.io - name: TLS_RELAY_CA_CERT_FILES value: /var/lib/hubble-ui/certs/hubble-relay-ca.crt - name: TLS_RELAY_CLIENT_CERT_FILE value: /var/lib/hubble-ui/certs/client.crt - name: TLS_RELAY_CLIENT_KEY_FILE value: /var/lib/hubble-ui/certs/client.key livenessProbe: httpGet: path: /healthz port: 8090 readinessProbe: httpGet: path: /healthz port: 8090 ports: - name: grpc containerPort: 8090 resources: {} volumeMounts: - name: hubble-ui-client-certs mountPath: /var/lib/hubble-ui/certs readOnly: true terminationMessagePolicy: FallbackToLogsOnError securityContext: {} nodeSelector: kubernetes.io/os: linux volumes: - configMap: defaultMode: 420 name: hubble-ui-nginx name: hubble-ui-nginx-conf - emptyDir: {} name: tmp-dir - name: hubble-ui-client-certs projected: defaultMode: 0400 sources: - secret: name: hubble-relay-client-certs items: - key: tls.crt path: client.crt - key: tls.key path: client.key - key: ca.crt path: hubble-relay-ca.crt --- kind: Service apiVersion: v1 metadata: name: hubble-ui namespace: kube-system labels: k8s-app: hubble-ui app.kubernetes.io/name: hubble-ui app.kubernetes.io/part-of: retina spec: type: ClusterIP selector: k8s-app: hubble-ui ports: - name: http port: 80 targetPort: 8081
次のコマンドを使用して、hubble-ui.yaml マニフェストをクラスターに適用します。
kubectl apply -f hubble-ui.yaml
kubectl port-forward
コマンドを使用して、Hubble UI のポート フォワーディングを設定します。kubectl -n kube-system port-forward svc/hubble-ui 12000:80
Web ブラウザーに
http://localhost:12000/
を入力して、Hubble UI にアクセスします。
基本的なトラブルシューティング
Advanced Container Networking Services は、AMA ログ収集機能を有効にするための前提条件です。Advanced Container Networking Services を有効にせずに、クラスターでコンテナー ネットワーク フロー ログ機能を有効にしようとしています。
az aks update -g test-rg -n test-cluster --enable-retina-flow-logs
次のエラー メッセージが表示されます。
Flow logs requires '--enable-acns', advanced networking to be enabled, and the monitoring addon to be enabled.
クラスター Kubernetes のバージョンが 1.32.0 より前の場合は、'--enable-retina-flow-logs' を有効にしようとしています。
The specified orchestrator version %s is not valid. Advanced Networking Flow Logs is only supported on Kubernetes version 1.32.0 or later.
%s がお客様の K8s バージョンに置き換えられる場所
顧客が AFEC フラグが有効になっていないサブスクリプションで "--enable-retina-flow-logs" を有効にしようとした場合:
Feature Microsoft.ContainerService/AdvancedNetworkingFlowLogsPreview is not enabled. Please see https://aka.ms/aks/previews for how to enable features.
お客様が、Advanced Container Networking Services が有効になっていないクラスターに RetinaNetworkFlowLog CR を適用しようとした場合:
error: resource mapping not found for <....>": no matches for kind "RetinaNetworkFlowLog" in version "acn.azure.com/v1alpha1"
ensure CRDs are installed first
コンテナー ネットワーク ログを無効にする: 既存のクラスターに格納されているログ モード
すべての CRD が削除されると、フロー ログの収集は停止します。収集用にフィルターが定義されていないためです。 Azure Monitor エージェントによる網膜フロー ログ収集を無効にするには、次のコマンドを使用します。
az aks update -n $CLUSTER_NAME -g $RESOURCE_GROUP --disable-retina-flow-logs
リソースをクリーンアップする
このアプリケーションの使用を計画していない場合は、az group delete
コマンドを使用して、この記事で作成した他のリソースを削除します。
az group delete --name $RESOURCE_GROUP
次のステップ
このハウツー記事では、AKS クラスターの Advanced Container Networking Services で Container Network ログを有効にする方法について説明しました。
- Azure Kubernetes Service (AKS) 用のアドバンスト コンテナー ネットワークサービスの詳細については、Azure Kubernetes Service (AKS) 用のアドバンスト コンテナー ネットワークサービスとは何かに関するページを参照してください。
- Advanced Container Networking Services のContainer Network Observability機能について調べるために、Container Network Observability とは何かをご確認ください。
Azure Kubernetes Service