アプリケーションの Kubernetes ポッドを取得する

Instana REST API を使用する特定のアプリケーションに関連付けられている Kubernetes ポッドを取得できます。

コンテキスト

Kubernetes 環境では、アプリケーションの健全性とパフォーマンスを粒度レベルで監視および管理することが重要です。 アプリケーションを構成するポッドの状態、特にそれらのポッド内で実行されるコンテナイメージについて理解しておく必要があります。 特定のアプリケーションの Kubernetes ポッドのリストを取得することで、基盤となるコンテナイメージに関する情報を把握し、そのセキュリティ状態を評価することができます。

主なビジネス上のメリット

  1. セキュリティ監査と脆弱性管理

    • CVE トラッキング:コンテナイメージは、CVE (Common Vulnerabilities and Exposures: 共通の脆弱性と暴露) として知られるセキュリティ脆弱性の対象となることがよくあります。 各ポッドに関連する画像を特定することで、既知のCVEと画像をすばやく相互参照し、これらの脆弱性がもたらすリスクを評価することができます。
    • プロアクティブなセキュリティ対策: イメージに重大な脆弱性が発見された場合、影響を受けるイメージにパッチを適用するか交換するためのアクションを即座に実行できます。
  2. コンプライアンスと規制要件

    • コンプライアンスの遵守:多くの業界では、コンテナ イメージの脆弱性スキャンなど、定期的なセキュリティ評価を義務付ける厳しいコンプライアンス要件があります。 ポッド画像を検索して分析することで、組織はこれらの要件を確実に満たし、潜在的な罰則を回避することができる。
    • 監査証跡 :ポッド内で使用されているイメージとそのCVEを記録した監査証跡を維持することで、監査や規制当局による審査の際にコンプライアンスを証明するのに役立ちます。
  3. 運営効率

    • トラブルシューティングと根本原因の分析: アプリケーションに問題が発生している場合、そのポッド内で実行されている特定のイメージを知ることは、問題をより効果的に診断するのに役立ちます。 例えば、問題が特定のイメージバージョンや設定に関連しているかどうかを判断することができます。
    • パッチングの合理化: 使用中のイメージを明確に把握することで、IT チームと DevOps チームはパッチング プロセスに優先順位を付けて合理化することができ、すべてのポッドで最もセキュアで最新のバージョンのイメージを実行できるようになります。
  4. 事業継続

    • リスクの軽減:脆弱性に迅速に対処することで、アプリケーションの安全性と運用性を確保し、セキュリティ インシデントによるダウンタイムのリスクを最小限に抑えます。
    • 顧客の信頼:CVE を管理し、コンテナ イメージを保護するための積極的なアプローチを示すことは、顧客の信頼を高め、顧客のデータを保護するという組織のコミットメントを強化します。

以下の詳細情報は、特定のアプリケーションの Kubernetes ポッドを取得する手順について解説します。 したがって、これらのポッドに関連付けられた画像にアクセスし、特にセキュリティやコンプライアンスの観点から、必要な措置を講じることができます。

前提条件

Kubernetes のポッドを取得するには、適切な権限を持つ Instana の API トークンが必要です。

以下の定義を確認する:

  • Application ID: Kubernetesポッドを取得したいアプリケーションの一意の識別子。
  • ホスト : Instana インスタンスのベース URL。その構造は次の通りです {tenant}-{unit}.instana.io

API エンドポイント

以下の API のエンドポイントをご覧ください:

ゲット /api/application-monitoring/applications/{applicationId}/kubernetes-pods

チュートリアル

次の例では、あるアプリケーション(applicationIdで識別される)に関連するすべてのKubernetesポッドが検索されます。

ステップ 1: API リクエストの作成

特定のアプリケーションのKubernetesポッドを取得するには、以下のエンドポイントにGETリクエストを送る必要があります:https://{tenant}-{unit}.instana.io/api/application-monitoring/applications/{applicationId}/kubernetes-pods

ステップ2:アプリケーションIDの取得

まずすべてのアプリケーションをリストアップすれば、applicationIdが得られます:

curl -X GET "https://{tenant}-{unit}.instana.io/api/application-monitoring/applications" \
-H "Authorization: apiToken {api_token}" \
-H "Accept: application/json"

対象アプリケーションに対応するapplicationIdをレスポンスから特定する。

ステップ3: Kubernetes のポッドを取得するリクエストを送信する

applicationIdを取得したら、それを使ってKubernetesポッドを取得できます:

curl -X GET "https://{tenant}-{unit}.instana.io/api/application-monitoring/applications/{applicationId}/kubernetes-pods" \
-H "Authorization: apiToken {api_token}" \
-H "Accept: application/json"

{tenant}、 {unit}、 {api_token}、および {applicationId} を、それぞれ実際の Instana のテナント、ユニット、 API トークン、およびアプリケーションの ID に置き換えてください。

ステップ4:レスポンスの解析

応答は、指定されたアプリケーションに関連付けられている Kubernetes ポッドの詳細を含む JSON オブジェクトです。 以下の JSON の例は、レスポンスがどのようなものになるかを示しています:

{
  "kubernetesPods": [
    {
      "podName": "example-pod-1",
      "namespace": "example-namespace",
      "status": "Running",
      "nodeName": "example-node"
    },
    {
      "podName": "example-pod-2",
      "namespace": "example-namespace",
      "status": "Running",
      "nodeName": "example-node"
    }
  ]
}

その後、お好みのプログラミング言語で JSON のレスポンスを処理することができます。 たとえば、 Python を使用している場合、次のコードブロックの例のように、Pod 名を抽出して出力することができます

import requests

def get_kubernetes_pods(tenant, unit, api_token, application_id):
    url = f"https://{tenant}-{unit}.instana.io/api/application-monitoring/applications/{application_id}/kubernetes-pods"
    headers = {
        "Authorization": f"apiToken {api_token}",
        "Accept": "application/json"
    }

    response = requests.get(url, headers=headers)
    pods = response.json().get('kubernetesPods', [])

    for pod in pods:
        print(f"Pod Name: {pod['podName']}, Status: {pod['status']}")


# Example usage
tenant = "your-tenant"
unit = "your-unit"
api_token = "your-api-token"
application_id = "your-application-id"

get_kubernetes_pods(tenant, unit, api_token, application_id)

この Python スクリプトは、 Instana ( API )にリクエストを送信し、レスポンスを解析して、 Kubernetes のポッドの名前とステータスを出力します。

このマークダウン形式は、マークダウンビューアやエディタで表示した際に、 JSON のレスポンスや Python のコード例を正しく表示します。

ステップ5:応答の処理

レスポンスが解析された後、Kubernetesポッドのデータをさらに処理できます。 以下のリストは、レスポンスをどのように処理したいかを示している:

  1. ポッドの詳細をログに記録する:ポッド名、ステータス、その他の詳細をモニタリング・システムにログに記録できます。
  2. Alert on Pod Status: ポッドのステータスが「Running」でない場合にアラートする条件を設定します。
  3. ポッド情報を保存:ポッド情報をデータベースに保存して、さらなる分析やレポート作成に使用します。
  4. ポッド データの可視化:データを使用して、Kubernetes ポッドの健全性とパフォーマンスを監視するのに役立つ可視化を作成します。

たとえば、ステップ4のPythonスクリプトを変更して、各ポッドのステータスをチェックし、実行されていないポッドがあれば警告を出すことができます:

import requests

def check_kubernetes_pods(tenant, unit, api_token, application_id):
    url = f"https://{tenant}-{unit}.instana.io/api/application-monitoring/applications/{application_id}/kubernetes-pods"
    headers = {
        "Authorization": f"apiToken {api_token}",
        "Accept": "application/json"
    }

    response = requests.get(url, headers=headers)
    pods = response.json().get('kubernetesPods', [])

    for pod in pods:
        pod_name = pod['podName']
        status = pod['status']
        if status != "Running":
            print(f"Alert: Pod {pod_name} is in {status} state!")

# Example usage
tenant = "your-tenant"
unit = "your-unit"
api_token = "your-api-token"
application_id = "your-application-id"

check_kubernetes_pods(tenant, unit, api_token, application_id)

このスクリプトは各ポッドの状態を確認し、ポッドが実行されていない場合はアラートを出力します。 このロジックをお客様のアラートシステムや監視システムと統合することができます。