Merge remote-tracking branch 'upstream/main' into add_golangci_action

This commit is contained in:
z1cheng 2023-07-07 07:48:47 +00:00
commit 8d2b348a68
4 changed files with 59 additions and 43 deletions

View file

@ -1,6 +1,8 @@
# Exposing TCP and UDP services # Exposing TCP and UDP services
Ingress does not support TCP or UDP services. For this reason this Ingress controller uses the flags `--tcp-services-configmap` and `--udp-services-configmap` to point to an existing config map where the key is the external port to use and the value indicates the service to expose using the format: While the Kubernetes Ingress resource only officially supports routing external HTTP(s) traffic to services, ingress-nginx can be configured to receive external TCP/UDP traffic from non-HTTP protocols and route them to internal services using TCP/UDP port mappings that are specified within a ConfigMap.
To support this, the `--tcp-services-configmap` and `--udp-services-configmap` flags can be used to point to an existing config map where the key is the external port to use and the value indicates the service to expose using the format:
`<namespace/service name>:<service port>:[PROXY]:[PROXY]` `<namespace/service name>:<service port>:[PROXY]:[PROXY]`
It is also possible to use a number or the name of the port. The two last fields are optional. It is also possible to use a number or the name of the port. The two last fields are optional.

View file

@ -706,16 +706,9 @@ type Configuration struct {
// Default: nginx.handle // Default: nginx.handle
DatadogOperationNameOverride string `json:"datadog-operation-name-override"` DatadogOperationNameOverride string `json:"datadog-operation-name-override"`
// DatadogPrioritySampling specifies to use client-side sampling
// If true disables client-side sampling (thus ignoring sample_rate) and enables distributed
// priority sampling, where traces are sampled based on a combination of user-assigned
// Default: true
DatadogPrioritySampling bool `json:"datadog-priority-sampling"`
// DatadogSampleRate specifies sample rate for any traces created. // DatadogSampleRate specifies sample rate for any traces created.
// This is effective only when datadog-priority-sampling is false // Default: use a dynamic rate instead
// Default: 1.0 DatadogSampleRate *float32 `json:"datadog-sample-rate",omitempty`
DatadogSampleRate float32 `json:"datadog-sample-rate"`
// MainSnippet adds custom configuration to the main section of the nginx configuration // MainSnippet adds custom configuration to the main section of the nginx configuration
MainSnippet string `json:"main-snippet"` MainSnippet string `json:"main-snippet"`
@ -1001,8 +994,7 @@ func NewDefault() Configuration {
DatadogEnvironment: "prod", DatadogEnvironment: "prod",
DatadogCollectorPort: 8126, DatadogCollectorPort: 8126,
DatadogOperationNameOverride: "nginx.handle", DatadogOperationNameOverride: "nginx.handle",
DatadogSampleRate: 1.0, DatadogSampleRate: nil,
DatadogPrioritySampling: true,
LimitReqStatusCode: 503, LimitReqStatusCode: 503,
LimitConnStatusCode: 503, LimitConnStatusCode: 503,
SyslogPort: 514, SyslogPort: 514,

View file

@ -1011,16 +1011,6 @@ const jaegerTmpl = `{
} }
}` }`
const datadogTmpl = `{
"service": "{{ .DatadogServiceName }}",
"agent_host": "{{ .DatadogCollectorHost }}",
"agent_port": {{ .DatadogCollectorPort }},
"environment": "{{ .DatadogEnvironment }}",
"operation_name_override": "{{ .DatadogOperationNameOverride }}",
"sample_rate": {{ .DatadogSampleRate }},
"dd.priority.sampling": {{ .DatadogPrioritySampling }}
}`
const otelTmpl = ` const otelTmpl = `
exporter = "otlp" exporter = "otlp"
processor = "batch" processor = "batch"
@ -1044,37 +1034,65 @@ ratio = {{ .OtelSamplerRatio }}
parent_based = {{ .OtelSamplerParentBased }} parent_based = {{ .OtelSamplerParentBased }}
` `
func createOpentracingCfg(cfg ngx_config.Configuration) error { func datadogOpentracingCfg(cfg ngx_config.Configuration) (string, error) {
var tmpl *template.Template m := map[string]interface{}{
var err error "service": cfg.DatadogServiceName,
"agent_host": cfg.DatadogCollectorHost,
"agent_port": cfg.DatadogCollectorPort,
"environment": cfg.DatadogEnvironment,
"operation_name_override": cfg.DatadogOperationNameOverride,
}
if cfg.ZipkinCollectorHost != "" { // Omit "sample_rate" if the configuration's sample rate is unset (nil).
tmpl, err = template.New("zipkin").Parse(zipkinTmpl) // Omitting "sample_rate" from the plugin JSON indicates to the tracer that
if err != nil { // it should use dynamic rates instead of a configured rate.
return err if cfg.DatadogSampleRate != nil {
} m["sample_rate"] = *cfg.DatadogSampleRate
} else if cfg.JaegerCollectorHost != "" || cfg.JaegerEndpoint != "" { }
tmpl, err = template.New("jaeger").Parse(jaegerTmpl)
if err != nil { buf, err := json.Marshal(m)
return err if err != nil {
} return "", err
} else if cfg.DatadogCollectorHost != "" { }
tmpl, err = template.New("datadog").Parse(datadogTmpl)
if err != nil { return string(buf), nil
return err }
}
} else { func opentracingCfgFromTemplate(cfg ngx_config.Configuration, tmplName string, tmplText string) (string, error) {
tmpl, _ = template.New("empty").Parse("{}") tmpl, err := template.New(tmplName).Parse(tmplText)
if err != nil {
return "", err
} }
tmplBuf := bytes.NewBuffer(make([]byte, 0)) tmplBuf := bytes.NewBuffer(make([]byte, 0))
err = tmpl.Execute(tmplBuf, cfg) err = tmpl.Execute(tmplBuf, cfg)
if err != nil {
return "", err
}
return tmplBuf.String(), nil
}
func createOpentracingCfg(cfg ngx_config.Configuration) error {
var configData string
var err error
if cfg.ZipkinCollectorHost != "" {
configData, err = opentracingCfgFromTemplate(cfg, "zipkin", zipkinTmpl)
} else if cfg.JaegerCollectorHost != "" || cfg.JaegerEndpoint != "" {
configData, err = opentracingCfgFromTemplate(cfg, "jaeger", jaegerTmpl)
} else if cfg.DatadogCollectorHost != "" {
configData, err = datadogOpentracingCfg(cfg)
} else {
configData = "{}"
}
if err != nil { if err != nil {
return err return err
} }
// Expand possible environment variables before writing the configuration to file. // Expand possible environment variables before writing the configuration to file.
expanded := os.ExpandEnv(tmplBuf.String()) expanded := os.ExpandEnv(configData)
return os.WriteFile("/etc/nginx/opentracing.json", []byte(expanded), file.ReadWriteByUser) return os.WriteFile("/etc/nginx/opentracing.json", []byte(expanded), file.ReadWriteByUser)
} }

View file

@ -224,6 +224,8 @@ http {
$geoip2_subregion_code source=$remote_addr subdivisions 1 iso_code; $geoip2_subregion_code source=$remote_addr subdivisions 1 iso_code;
$geoip2_subregion_name source=$remote_addr subdivisions 1 names en; $geoip2_subregion_name source=$remote_addr subdivisions 1 names en;
$geoip2_subregion_geoname_id source=$remote_addr subdivisions 1 geoname_id; $geoip2_subregion_geoname_id source=$remote_addr subdivisions 1 geoname_id;
$geoip2_city_continent_code source=$remote_addr continent code;
$geoip2_city_continent_name source=$remote_addr continent names en;
} }
{{ end }} {{ end }}
@ -245,6 +247,8 @@ http {
$geoip2_subregion_code source=$remote_addr subdivisions 1 iso_code; $geoip2_subregion_code source=$remote_addr subdivisions 1 iso_code;
$geoip2_subregion_name source=$remote_addr subdivisions 1 names en; $geoip2_subregion_name source=$remote_addr subdivisions 1 names en;
$geoip2_subregion_geoname_id source=$remote_addr subdivisions 1 geoname_id; $geoip2_subregion_geoname_id source=$remote_addr subdivisions 1 geoname_id;
$geoip2_city_continent_code source=$remote_addr continent code;
$geoip2_city_continent_name source=$remote_addr continent names en;
} }
{{ end }} {{ end }}