|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
|
これは未公開の文書です 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コレクターは、あなたの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`に移動します。