Datadog Admission Controller
概要
Datadog Admission Controller は Datadog Cluster Agent のコンポーネントで、アプリケーションポッドのコンフィギュレーションを簡略化できる便利なツールです。Admission Controller には以下の 2 つの機能が備わっています。
- 環境変数 (DD_AGENT_HOST、DD_TRACE_AGENT_URL、DD_ENTITY_ID) をユーザーのアプリケーションコンテナに挿入し、DogStatsD および APM トレーサーライブラリを構成する。
- アプリケーションラベルから取得した Datadog の標準タグ (env、service、version) をコンテナ環境変数に挿入する。
Datadog Admission Controller は MutatingAdmissionWebhook 型に属します。Admission Controller について詳しくは、Admission Controller に関する Kubernetes ガイドを参照してください。
要件
- Datadog Cluster Agent v7.40+
構成
Datadog Operator の Admission Controller を有効にするには、DatadogAgent の構成でパラメーター features.admissionController.enabled を true に設定します。
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  #(...)
  features:
    admissionController:
      enabled: true
      mutateUnlabelled: false
Helm chart v2.35.0 から、Datadog Admission Controller がデフォルトで有効化されました。Admission Controller を有効にするために、特別な構成は必要ありません。
Admission Controller で v2.34.6 以前の Helm チャートを有効にするには、パラメーター clusterAgent.admissionController.enabled を true に設定してください。
#(...)
clusterAgent:
  #(...)
  ## @param admissionController - オブジェクト - 必須
  ## admissionController での自動 APM 挿入を有効化
  ## DogStatsD config および標準タグ (env、service、version) を
  ## ポッドに挿入
  #
  admissionController:
    enabled: true
    ## @param mutateUnlabelled - boolean - optional
    ## ポッドラベルなしで config の挿入を有効化:
    ## admission.datadoghq.com/enabled="true"
    #
    mutateUnlabelled: false
Helm または Datadog Operator を使用せずに Admission Controller を有効にするには、コンフィギュレーションに以下を追加します。
まず、Cluster Agent RBAC アクセス許可のマニフェストをダウンロードし、rules の下に以下を追加します。
- apiGroups:
  - admissionregistration.k8s.io
  resources:
  - mutatingwebhookconfigurations
  verbs: ["get", "list", "watch", "update", "create"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "watch", "update", "create"]
- apiGroups: ["batch"]
  resources: ["jobs", "cronjobs"]
  verbs: ["get"]
- apiGroups: ["apps"]
  resources: ["statefulsets", "replicasets", "deployments"]
  verbs: ["get"]
agent-services.yaml の下に以下を追加します。
apiVersion: v1
kind: Service
metadata:
  name: datadog-cluster-agent-admission-controller
  labels:
    app: "datadog"
    app.kubernetes.io/name: "datadog"
spec:
  selector:
    app: datadog-cluster-agent
  ports:
  - port: 443
    targetPort: 8000
Cluster Agent のデプロイに環境変数を追加し、Admission Controller を有効にします。
cluster-agent-deployment.yaml
- name: DD_ADMISSION_CONTROLLER_ENABLED
  value: "true"
- name: DD_ADMISSION_CONTROLLER_SERVICE_NAME
  value: "datadog-cluster-agent-admission-controller"
# このコメントを解除して自動的に APM トレーサーを構成します (以下を参照)
# - name: DD_ADMISSION_CONTROLLER_MUTATE_UNLABELLED
#   value: "true"
最期に、次のコマンドを実行します。
- kubectl apply -f cluster-agent-rbac.yaml
- kubectl apply -f agent-services.yaml
- kubectl apply -f cluster-agent-deployment.yaml
インスツルメンテーションライブラリの挿入
Cluster Agent (バージョン 7.39 以降) を構成して、インスツルメンテーションライブラリを挿入することができます。詳しくは、Admission Controller によるインスツルメンテーションライブラリの挿入を参照してください。
APM および DogStatsD
DogStatsD クライアントやライブラリの挿入をサポートしていない他の APM ライブラリを構成するには、以下のいずれかの方法で環境変数 DD_AGENT_HOST と DD_ENTITY_ID を挿入します。
- ラベル admission.datadoghq.com/enabled: "true"をポッドに追加します。
- mutateUnlabelled(コンフィギュレーションメソッドによっては- DD_ADMISSION_CONTROLLER_MUTATE_UNLABELLED) を- trueに設定して Cluster Agent の Admission Controller を構成します。
Helm チャートに mutateUnlabelled: true という Agent 構成を追加すると、Cluster Agent はラベルのないすべてのポッドをインターセプトしようとします。
ポッドで環境変数を受信しないようにするには、ラベル admission.datadoghq.com/enabled: "false" を追加します。これは mutateUnlabelled: true を設定している場合でも機能します。
mutateUnlabelled が false に設定されている場合、ポッドラベルは admission.datadoghq.com/enabled: "true" とします。
利用可能なオプション:
| mutateUnlabelled | ポッドラベル | 挿入可否 | 
|---|
| true | ラベルなし | はい | 
| true | admission.datadoghq.com/enabled=true | はい | 
| true | admission.datadoghq.com/enabled=false | いいえ | 
| false | ラベルなし | いいえ | 
| false | admission.datadoghq.com/enabled=true | はい | 
| false | admission.datadoghq.com/enabled=false | いいえ | 
優先順位
Datadog Admission Controller は環境変数 DD_VERSION、DD_ENV または DD_SERVICE が既に存在する場合は挿入を行いません。
これらの環境変数が設定されていない場合、Admission Controller は以下の順序で標準タグの値を使用します (高い方から順に)。
- ポッド上のラベル
- ownerReferenceのラベル (ReplicaSets、DaemonSets、Deployments など)
APM と DogstatsD の通信モードの構成
Datadog Cluster Agent v1.20.0 以降、Datadog Admission Controller は、アプリケーションと Datadog Agent の間で異なる通信モードを注入するように構成することができるようになりました。
この機能は admission_controller.inject_config.mode を設定するか、ポッドラベル admission.datadoghq.com/config.mode を使用してポッド固有のモードを定義することによって構成することができます。
可能なオプション:
| モード | 説明 | 
|---|
| hostip(デフォルト) | 環境変数 DD_AGENT_HOSTにホスト IP を注入する | 
| service | Datadog のローカルサービスの DNS 名を環境変数 DD_AGENT_HOSTに注入する (Kubernetes v1.22+で使用可能) | 
| socket | 環境変数 DD_TRACE_AGENT_URLに Unix ドメインソケットのパスを注入し、対応するパスにアクセスするようにボリュームを定義する。DD_DOGSTATSD_URLに、DogStatsD メトリクスの Datadog Agent への接続に使用する URL を挿入する。 | 
注: ポッド固有のモードは、Admission Controller レベルで定義されたグローバルモードより優先されます。
トラブルシューティング
Admission Controller のトラブルシューティングを参照してください。
その他の参考資料