APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【AKS】hubble-ui を利用してCiliumNetworkPolicyで制御されたコンテナ間の通信内容を覗いてみた

はじめに

こんにちは。ACS事業部 木戸と申します。

前回、Ciliumの通信制御を行う検証を行った際にアプリの動作としては想定通りの結果になりましたが、内部でどのように制御されていたのかは確認ができていませんでした。
Ciliumには通信内容を可視化する hubble-ui というツールがあるということで、今回は先日構築したAKS環境に導入してコンテナ間の通信内容がどのように制御されているのか可視化してみたいと思います。

techblog.ap-com.co.jp

目次

1. Hubbleとは

Hubbleは Ciliumに内蔵されたネットワーク監視用のツールです。
AKSではAdvanced Container Networking Services機能を有効にする事で利用できるようになります。
検証に使用するAKSは Azure CNI Powered by Cilium をサポートするように構築されています。

2. Advanced Container Networking Services (ACNS)の有効化

以下のコマンドでAKSのAdvanced Container Networking Services機能を使用できるようにします。

az aks update \
    --resource-group {リソースグループ名} \
    --name {AKSクラスター名} \
    --enable-acns

以下のコマンドで hubble-peer, hubble-relay のサービスが表示されているか確認します。

// サービス確認
kubectl get svc -n kube-system

<結果>
NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
...
hubble-peer             ClusterIP   xx.xx.xx.xx   <none>        443/TCP             7d23h
hubble-relay            ClusterIP   xx.xx.xx.xx   <none>        443/TCP             7d23h
...

3.AKSにhubble-uiをデプロイする

Cilium上で動作し、クラスター内の通信フローをリアルタイムで可視化できるツールとして hubble-ui があります。
こちらをAKSに導入しコンテナ間の通信を可視化してみたいと思います。

Microsoftの公式で案内されているhubble-uiのYAMLを利用してデプロイします。

learn.microsoft.com

デプロイ後、以下のコマンドで hubble-ui のサービスが表示されているか確認します。

// 公式から提供されているYAMLをデプロイする
kubectl apply -f hubble-ui.yaml

// サービス確認
kubectl get svc -n kube-system

<結果>
NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
...
hubble-ui               ClusterIP   xx.xx.xx.xx    <none>        80/TCP              4d5h
...

4. hubble-uiにアクセスし、AKSクラスター内の通信を可視化して見てみる

hubble-ui にアクセスするため、以下のコマンドでポートフォワードを実施します。

kubectl -n kube-system port-forward svc/hubble-ui 12000:80

<結果>
Forwarding from 127.0.0.1:12000 -> 8081
Forwarding from [::1]:12000 -> 8081

コマンドの実行後、ブラウザでhttp://localhost:12000を指定することで hubble-ui にアクセスできました。

サンプルアプリがデプロイされている名前空間を選択します。
その後、別のブラウザからサンプルアプリで Echo サーバーにアクセスし、CiliumNetworkPolicy による通信制御が機能していることを確認しました。

サンプルアプリの挙動

すると以下の画像のように、Hubble UI にはコンテナ間の通信フロー図が表示され、画面下部の一覧には通信の詳細が表示されました。

hubble-uiによる通信の可視化

バックエンドからEchoサーバへの3001ポートの通信がポリシーによって制限されたことが可視化することができました。

5. まとめ

今回は Hubble ならびに hubble-ui を使ってコンテナ間通信を可視化する方法を検証してみました。
コンテナ間の通信内容が下部の一覧でリアルタイムに出力され、上部のUIでイメージ図として通信の流れが可視化される事で UIに表示されたイメージによりコンテナの通信における関連性がとても分かりやすくなりました。
またブロックされた通信が赤線で表現されるなど、CiliumNetworkPolicyによる制御がどのコンテナについて行われているのかが把握しやすくなり、障害発生時の切り分けがしやすくなると感じました。  

ACS事業部のご紹介

私達ACS事業部はクラウドネイティブ技術、Azure AI サービス、Platform Engineering、AI駆動開発支援などを通して、攻めのDX成功に向けた開発者体験・開発生産性の向上・内製化のご支援をしております。

www.ap-com.co.jp また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。 www.ap-com.co.jp