|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
|
这是尚未发布的文档。 Admission Controller 1.34-dev. |
自定义 OpenTelemetry Collector
本指南解释了如何配置 Admission Controller 将遥测数据发送到已经在集群上部署的 OpenTelemetry Collector。
您应该在集群中仅部署一个 OpenTelemetry Collector 实例。
安装依赖项
首先,开始安装 OpenTelemetry Collector 的依赖项。
您需要在 SUSE Security Admission Controller 组件与 Collector 之间进行加密通信。您可以使用 cert-manager 来管理所有需要的证书,以确保安全通信。
OpenTelemetry Collector 的追踪信息会发送到 Jaeger 实例。
Admission Controller 堆栈将指标发送到 OpenTelemetry Collector。 这个实例将指标暴露为 Prometheus 端点。然后,这些指标会被 Prometheus 实例收集并存储在其数据库中。同一个 Prometheus 实例还提供一个 UI 来查看和使用这些指标。
您创建的资源在 kubewarden 名称空间中定义,或者期望其存在。因此,您应该首先创建名称空间:
kubectl create namespace kubewarden
安装 cert-manager 和 OpenTelemetry
您可以通过以下方式安装 cert-manager 和 OpenTelemetry operator:
helm repo add jetstack https://charts.jetstack.io
helm install --wait \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true \
--version 1.18.2 \
cert-manager jetstack/cert-manager
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install --wait \
--namespace open-telemetry \
--create-namespace \
--version 0.97.1 \
--set "manager.collectorImage.repository=otel/opentelemetry-collector-contrib" \
my-opentelemetry-operator open-telemetry/opentelemetry-operator
您通过 mTLS 在 Admission Controller 组件和 OpenTelemetry Collector 之间建立通信。
为此,您需要创建整个公共密钥基础结构 (PKI):
# pki.yaml file
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-client-certificate
namespace: kubewarden
spec:
dnsNames:
- kubewarden.kubewarden.svc
- kubewarden.kubewarden.svc.cluster.local
issuerRef:
kind: Issuer
name: my-selfsigned-issuer
secretName: my-client-cert
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-certificate
namespace: kubewarden
spec:
dnsNames:
- my-collector-collector.kubewarden.svc
- my-collector-collector.kubewarden.svc.cluster.local
issuerRef:
kind: Issuer
name: my-selfsigned-issuer
secretName: my-server-cert
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: my-selfsigned-issuer
namespace: kubewarden
spec:
selfSigned: {}
应用清单:
kubectl apply -f pki.yaml
安装 Jaeger 和 Prometheus
之后,您安装 Jaeger 来存储和可视化追踪事件。
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm upgrade -i --wait \
--namespace jaeger \
--create-namespace \
--version 2.57.0 \
jaeger-operator jaegertracing/jaeger-operator \
--set rbac.clusterRole=true
kubectl apply -f - <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-open-telemetry
namespace: jaeger
spec: {}
EOF
如果您在 OpenTelemetry 快速入门中安装了 Traefik,请使用以下 Ingress 来公开 Jaeger 查询 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
现在您安装 Prometheus 来存储和可视化指标。
cat <<EOF > kube-prometheus-stack-values.yaml
prometheus:
additionalServiceMonitors:
- name: kubewarden
selector:
matchLabels:
app.kubernetes.io/instance: kubewarden.my-collector
namespaceSelector:
matchNames:
- kubewarden
endpoints:
- port: prometheus
interval: 10s
EOF
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install --wait --create-namespace \
--namespace prometheus \
--version 77.13.0 \
--values kube-prometheus-stack-values.yaml \
prometheus prometheus-community/kube-prometheus-stack
|
Prometheus 服务监视器通过抓取在 |
安装 OpenTelemetry Collector
现在您可以在 kubewarden 名称空间中部署自定义 OpenTelemetry Collector。
# otel-collector.yaml file
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: my-collector
namespace: kubewarden
spec:
mode: deployment # This configuration is omittable.
volumes:
- name: server-certificate
secret:
secretName: my-server-cert
- name: client-certificate
secret:
secretName: my-client-cert
volumeMounts:
- name: server-certificate
mountPath: /tmp/etc/ssl/certs/my-server-cert
readOnly: true
- name: client-certificate
mountPath: /tmp/etc/ssl/certs/my-client-cert
readOnly: true
config:
receivers:
otlp:
protocols:
grpc:
tls:
cert_file: /tmp/etc/ssl/certs/my-server-cert/tls.crt
key_file: /tmp/etc/ssl/certs/my-server-cert/tls.key
client_ca_file: /tmp/etc/ssl/certs/my-client-cert/ca.crt
processors: {}
exporters:
debug:
verbosity: normal
prometheus:
endpoint: ":8080"
otlp/jaeger:
endpoint: "my-open-telemetry-collector.jaeger.svc.cluster.local:4317"
tls:
insecure: true
service:
pipelines:
metrics:
receivers: [otlp]
processors: []
exporters: [debug, prometheus]
traces:
receivers: [otlp]
processors: []
exporters: [debug, otlp/jaeger]
应用清单:
kubectl apply -f otel-collector.yaml
该配置使用简单的处理管道来接收追踪事件并将其转发到 Jaeger。它还接收指标并将其公开以供 Prometheus 收集。
您通过 mTLS 保护 Admission Controller 堆栈与 OpenTelemetry Collector 之间的通信。然而,OpenTelemetry Collector 与 Jaeger 之间的通信并未加密,以减少示例的复杂性。
安装 Admission Controller 堆栈
当 OpenTelemetry Collector 正在运行时,您可以以通常的方式部署 Admission Controller。
您需要配置 Admission Controller 组件,以便它们将事件和指标发送到 OpenTelemetry Collector。
# values.yaml
telemetry:
mode: custom
metrics: True
tracing: True
custom:
endpoint: "https://my-collector-collector.kubewarden.svc:4317"
insecure: false
otelCollectorCertificateSecret: "my-server-cert"
otelCollectorClientCertificateSecret: "my-client-cert"
由 otelCollectorCertificateSecret 键引用的 Secret 必须有一个名为 ca.crt 的条目。它包含颁发用于 OpenTelemetry Collector 的证书的 CA 的证书。
由 otelCollectorClientCertificateSecret 键引用的 Secret 必须有以下条目:tls.crt 和 tls.key 键。这些是 Admission Controller 堆栈用于对 OpenTelemetry Collector 进行身份验证的客户端证书及其密钥。
如果您不使用加密或 mTLS,请将这些值留空。
安装 Admission Controller 堆栈:
helm install --wait \
--namespace kubewarden --create-namespace \
kubewarden-crds kubewarden/kubewarden-crds
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 \
--set recommendedPolicies.enabled=True \
--set recommendedPolicies.defaultPolicyMode=monitor
现在一切都已就绪。
探索 Jaeger UI
您可以通过使用 Jaeger UI 查看由 Admission Controller 生成的追踪事件。它们被归类在 kubewarden-policy-server 服务下:
要通过 Traefik 访问 Jaeger UI,请对 Traefik 服务进行端口转发:
kubectl -n traefik port-forward service/traefik 8080:80
网络 UI 可在 http://localhost:8080 上访问。
如果您希望绕过 Traefik,请直接对 Jaeger 查询服务进行端口转发:
kubectl -n jaeger port-forward service/my-open-telemetry-query 16686
网络 UI 可在 http://localhost:16686 上访问。