diff --git a/apis/ingress/v1/pomerium_types.go b/apis/ingress/v1/pomerium_types.go index 7b9d4538..c8354c63 100644 --- a/apis/ingress/v1/pomerium_types.go +++ b/apis/ingress/v1/pomerium_types.go @@ -280,6 +280,36 @@ type PomeriumSpec struct { // PassIdentityHeaders sets the pass identity headers option. PassIdentityHeaders *bool `json:"passIdentityHeaders,omitempty"` + + // TracingProvider sets the name of the tracing provider (e.g. Jaeger, Zipkin) (see tracing) + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type=string + TracingProvider *string `json:"tracingProvider,omitempty"` + + // TracingSampleRate sets Percentage of requests to sample in decimal notation. Default is 0.0001, or .01% (see tracing) + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type=string + TracingSampleRate *string `json:"tracingSampleRate,omitempty"` + + // Datadog tracing address (see tracing) + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type=string + TracingDatadogAddress *string `json:"tracingDatadogAddress,omitempty"` + + // Jaeger CollectorEndpoint is the url to the Jaeger HTTP Thrift collector (see tracing) + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type=string + TracingJaegerCollectorEndpoint *string `json:"tracingJaegerCollectorEndpoint,omitempty"` + + // Jaeger AgentEndpoint instructs exporter to send spans to jaeger-agent at this address (see tracing) + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type=string + TracingJaegerAgentEndpoint *string `json:"tracingJaegerAgentEndpoint,omitempty"` + + // ZipkinEndpoint configures the zipkin collector URI (see tracing) + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Type=string + TracingZipkinEndpoint *string `json:"tracingZipkinEndpoint,omitempty"` } // Timeouts allows to configure global timeouts for all routes. diff --git a/apis/ingress/v1/zz_generated.deepcopy.go b/apis/ingress/v1/zz_generated.deepcopy.go index 0222ba7b..b6196dc1 100644 --- a/apis/ingress/v1/zz_generated.deepcopy.go +++ b/apis/ingress/v1/zz_generated.deepcopy.go @@ -260,6 +260,36 @@ func (in *PomeriumSpec) DeepCopyInto(out *PomeriumSpec) { *out = new(bool) **out = **in } + if in.TracingProvider != nil { + in, out := &in.TracingProvider, &out.TracingProvider + *out = new(string) + **out = **in + } + if in.TracingSampleRate != nil { + in, out := &in.TracingSampleRate, &out.TracingSampleRate + *out = new(string) + **out = **in + } + if in.TracingDatadogAddress != nil { + in, out := &in.TracingDatadogAddress, &out.TracingDatadogAddress + *out = new(string) + **out = **in + } + if in.TracingJaegerCollectorEndpoint != nil { + in, out := &in.TracingJaegerCollectorEndpoint, &out.TracingJaegerCollectorEndpoint + *out = new(string) + **out = **in + } + if in.TracingJaegerAgentEndpoint != nil { + in, out := &in.TracingJaegerAgentEndpoint, &out.TracingJaegerAgentEndpoint + *out = new(string) + **out = **in + } + if in.TracingZipkinEndpoint != nil { + in, out := &in.TracingZipkinEndpoint, &out.TracingZipkinEndpoint + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PomeriumSpec. diff --git a/config/crd/bases/ingress.pomerium.io_pomerium.yaml b/config/crd/bases/ingress.pomerium.io_pomerium.yaml index 1fbc6ede..c890bf66 100644 --- a/config/crd/bases/ingress.pomerium.io_pomerium.yaml +++ b/config/crd/bases/ingress.pomerium.io_pomerium.yaml @@ -322,6 +322,34 @@ spec: format: duration type: string type: object + tracingDatadogAddress: + description: Datadog tracing address (see + tracing) + type: string + tracingJaegerAgentEndpoint: + description: Jaeger AgentEndpoint instructs exporter to send spans + to jaeger-agent at this address (see + tracing) + type: string + tracingJaegerCollectorEndpoint: + description: Jaeger CollectorEndpoint is the url to the Jaeger HTTP + Thrift collector (see + tracing) + type: string + tracingProvider: + description: TracingProvider sets the name of the tracing provider + (e.g. Jaeger, Zipkin) (see + tracing) + type: string + tracingSampleRate: + description: TracingSampleRate sets Percentage of requests to sample + in decimal notation. Default is 0.0001, or .01% (see + tracing) + type: string + tracingZipkinEndpoint: + description: ZipkinEndpoint configures the zipkin collector URI (see tracing) + type: string useProxyProtocol: description: UseProxyProtocol enables Proxy Protocol support. diff --git a/pomerium/config.go b/pomerium/config.go index 9e13f9ee..730c7153 100644 --- a/pomerium/config.go +++ b/pomerium/config.go @@ -6,6 +6,7 @@ import ( "encoding/base64" "fmt" "net/url" + "strconv" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/durationpb" @@ -118,6 +119,22 @@ func applySetOtherOptions(_ context.Context, p *pb.Config, c *model.Config) erro } else { p.Settings.PassIdentityHeaders = nil } + p.Settings.TracingProvider = c.Spec.TracingProvider + + if c.Spec.TracingSampleRate != nil { + tracingSampleRate, err := strconv.ParseFloat(*c.Spec.TracingSampleRate, 64) + if err != nil { + return fmt.Errorf("parsing %s: %w", *c.Spec.TracingSampleRate, err) + } + p.Settings.TracingSampleRate = &tracingSampleRate + } else { + p.Settings.TracingSampleRate = nil + } + + p.Settings.TracingDatadogAddress = c.Spec.TracingDatadogAddress + p.Settings.TracingJaegerCollectorEndpoint = c.Spec.TracingJaegerCollectorEndpoint + p.Settings.TracingJaegerAgentEndpoint = c.Spec.TracingJaegerAgentEndpoint + p.Settings.TracingZipkinEndpoint = c.Spec.TracingZipkinEndpoint return nil } diff --git a/reference.md b/reference.md index 44e93065..3a7502bd 100644 --- a/reference.md +++ b/reference.md @@ -257,7 +257,103 @@ PomeriumSpec defines Pomerium-specific configuration parameters. - + +
+ tracingDatadogAddress
+
+ string
+
+
+ + Datadog tracing address (see tracing) +
+ +
+ tracingJaegerAgentEndpoint
+
+ string
+
+
+ + Jaeger AgentEndpoint instructs exporter to send spans to jaeger-agent at this address (see tracing) +
+ +
+ tracingJaegerCollectorEndpoint
+
+ string
+
+
+ + Jaeger CollectorEndpoint is the url to the Jaeger HTTP Thrift collector (see tracing) +
+ +
+ tracingProvider
+
+ string
+
+
+ + TracingProvider sets the name of the tracing provider (e.g. Jaeger, Zipkin) (see tracing) +
+ +
+ tracingSampleRate
+
+ string
+
+
+ + TracingSampleRate sets Percentage of requests to sample in decimal notation. Default is 0.0001, or .01% (see tracing) +
+ +
+ tracingZipkinEndpoint
+
+ string
+
+
+ + ZipkinEndpoint configures the zipkin collector URI (see tracing) +
+ +