この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

これは未公開の文書です Admission Controller 1.34-dev.

トレーシング クイックスタート

このセクションでは、ポリシーサーバーのトレーシングサポートを有効にする方法を示します。

続行する前に、このドキュメントの前のOpenTelemetryセクションを完了したことを確認してください。このセクションが正しく機能するために必要です。

トレーシングを使用すると、ポリシー評価に関する詳細な情報を収集できます。これは、SUSE Security Admission Controllerのデプロイメントおよびポリシーの問題をデバッグするための便利なツールとなる可能性があります。

Jaeger --を使用して、トレースイベントを受信、保存、視覚化します。

Jaegerをインストールします。

Jaeger Operatorを使用して、さまざまなJaegerコンポーネントを管理します。Helmチャートを使用してJaeger Operatorをインストールできます。

執筆時点(2022-06-21)では、特定のバージョンのJaegerのみがCert Managerと互換性があります。https://github.com/jaegertracing/helm-charts/blob/main/charts/jaeger-operator/COMPATIBILITY.md[互換性チャートを参照してください]。

Helmチャートをインストールするには:

helm repo add jaegertracing https://jaegertracing.github.io/helm-charts

helm upgrade -i --wait \
  --namespace jaeger \
  --create-namespace \
  --version 2.49.0 \
  jaeger-operator jaegertracing/jaeger-operator \
  --set rbac.clusterRole=true

これは*本番環境のデプロイメントには適していません*。Jaegerのhttps://www.jaegertracing.io/docs/latest/kubernetes/[公式ドキュメント]を参照してください。

Jaegerリソースを作成するには:

kubectl apply -f - <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: my-open-telemetry
  namespace: jaeger
spec: {}
EOF

Jaeger Operatorリソースを作成した後、`my-open-telemetry-collector.jaeger.svc.cluster.local`の下にサービスがあります。Jaeger Query UIは、`jaeger`ネームスペースの`my-open-telemetry-query`サービスによって公開されます。

Admission Controllerをインストールします。

これで、通常の方法でAdmission Controllerのデプロイメントを進めることができます。

`cert-manager`はOpenTelemetryの要件ですが、すでにこのドキュメントの前のセクションでインストールしています。

最初のステップとして、Admission Controllerを含むHelmリポジトリを追加します:

helm repo add kubewarden https://charts.kubewarden.io

次に、Admission Controllerによって定義されたカスタムリソース定義をインストールします:

helm install --wait \
  --namespace kubewarden \
  --create-namespace \
  kubewarden-crds kubewarden/kubewarden-crds

これで、Admission Controllerスタックの残りをデプロイすることができます。公式の`kubewarden-defaults` Helmチャートは、`default`という名前のPolicyServerを作成します。このPolicyServerインスタンスにはトレーシングを有効にしたいです。

そのためには、`kubewarden-controller`チャートにいくつかの追加の値を指定する必要があります。次の内容が含まれる`values.yaml`ファイルを作成する必要があります:

telemetry:
  mode: sidecar
  tracing: True
  sidecar:
    tracing:
      jaeger:
        endpoint: "my-open-telemetry-collector.jaeger.svc.cluster.local:4317"
        tls:
          insecure: true

簡単のために、OpenTelemetryコレクターとJaegerエンドポイント間の通信は暗号化されていません。

再度、これは*本番環境でのデプロイには不適切です*。Jaegerのhttps://www.jaegertracing.io/docs/latest/kubernetes/[公式ドキュメント]を参照してください。

次に、Helmチャートのインストールを進めることができます:

helm install --wait --namespace kubewarden --create-namespace \
  --values values.yaml \
  kubewarden-controller kubewarden/kubewarden-controller

helm install --wait --namespace kubewarden --create-namespace \
  kubewarden-defaults kubewarden/kubewarden-defaults

これにより、`PolicyServer`の`default`インスタンスが作成されます:

kubectl get policyservers.policies.kubewarden.io
NAME      AGE
default   3m7s

PolicyServerインスタンスを実行しているPodを詳しく見ると、2つのコンテナがあることがわかります。`policy-server`と、OpenTelemetryコレクターのサイドカーである`otc-container`です。

ポリシーの強制

safe-labelsポリシーをデプロイすることから始めます。

ラベル`environment`の値が`production`であるネームスペースのみにポリシーを強制したいです。

そのようなラベルを持つネームスペースに:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: team-alpha-prod
  labels:
    environment: production
EOF

次に、ClusterAdmissionPolicyを定義できます:

kubectl apply -f - <<EOF
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: safe-labels
spec:
  module: registry://ghcr.io/kubewarden/policies/safe-labels:v0.1.6
  settings:
    mandatory_labels:
    - owner
  rules:
    - apiGroups:
        - apps
      apiVersions:
        - v1
      resources:
        - deployments
      operations:
        - CREATE
        - UPDATE
  namespaceSelector:
    matchExpressions:
    - key: environment
      operator: In
      values: ["production"]
  mutating: false
EOF

ポリシーがアクティブになるまで待つ必要があります:

kubectl wait --for=condition=PolicyActive clusteradmissionpolicy/safe-labels

ポリシーがアクティブになったら、試すことができます:

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: team-alpha-prod
  labels:
    owner: octocat
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 0
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
EOF

ポリシーは、このDeploymentオブジェクトの作成を許可します。ポリシーに違反しないためです。

ポリシーは、このDeploymentオブジェクトをブロックします:

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-without-labels
  namespace: team-alpha-prod
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 0
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
EOF

ポリシーは別のネームスペースでは適用されません。

このコマンドは、`team-alpha-staging`という新しいネームスペースを作成します:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: team-alpha-staging
  labels:
    environment: staging
EOF

ポリシーは、`team-alpha-staging`ネームスペース内でラベルなしのDeploymentリソースの作成を許可します:

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-without-labels
  namespace: team-alpha-staging
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 0
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
EOF

予想通り、このリソースは正常に作成されます。

Jaeger UIの探索

Jaegerに送信されたPolicyServerインスタンスのトレースイベントを見ることができます。UIに新しいサービス`kubewarden-policy-server`が表示されています:

Jaegerダッシュボード

Jaegerコレクターは、あなたのPolicyServerによって生成されたトレースを受信しています。

前のガイドでTraefikをインストールした場合は、この`Ingress`でJaeger Query UIを公開します:

kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-open-telemetry-query
  namespace: jaeger
spec:
  ingressClassName: traefik
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-open-telemetry-query
                port:
                  number: 16686
EOF

Traefikを使用してJaeger UIにアクセスするには、次のコマンドを実行します:

kubectl -n traefik port-forward service/traefik 8080:80

次に、`\http://localhost:8080`に移動します。

Traefikをバイパスしたい場合は、Jaegerに直接アクセスします:

kubectl -n jaeger port-forward service/my-open-telemetry-query 16686

次に、`\http://localhost:16686`に移動します。