Merge pull request #3751 from tammert/opentracing-env-variables

Parse environment variables in OpenTracing configuration
This commit is contained in:
Kubernetes Prow Robot 2019-02-10 10:49:54 -08:00 committed by GitHub
commit 566444d6b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 11 deletions

View file

@ -1,13 +1,13 @@
# OpenTracing # OpenTracing
Enables requests served by nginx for distributed tracing via The OpenTracing Project. Enables requests served by NGINX for distributed tracing via The OpenTracing Project.
Using the third party module [opentracing-contrib/nginx-opentracing](https://github.com/opentracing-contrib/nginx-opentracing) the NGINX ingress controller can configure NGINX to enable [OpenTracing](http://opentracing.io) instrumentation. Using the third party module [opentracing-contrib/nginx-opentracing](https://github.com/opentracing-contrib/nginx-opentracing) the NGINX ingress controller can configure NGINX to enable [OpenTracing](http://opentracing.io) instrumentation.
By default this feature is disabled. By default this feature is disabled.
## Usage ## Usage
To enable the instrumentation we must enable opentracing in the configuration configmap: To enable the instrumentation we must enable OpenTracing in the configuration ConfigMap:
``` ```
data: data:
enable-opentracing: "true" enable-opentracing: "true"
@ -19,6 +19,7 @@ We must also set the host to use when uploading traces:
zipkin-collector-host: zipkin.default.svc.cluster.local zipkin-collector-host: zipkin.default.svc.cluster.local
jaeger-collector-host: jaeger-collector.default.svc.cluster.local jaeger-collector-host: jaeger-collector.default.svc.cluster.local
``` ```
NOTE: While the option is called `jaeger-collector-host`, you will need to point this to a `jaeger-agent`, and not the `jaeger-collector` component.
Next you will need to deploy a distributed tracing system which uses OpenTracing. Both [Zipkin](https://github.com/openzipkin/zipkin) and Next you will need to deploy a distributed tracing system which uses OpenTracing. Both [Zipkin](https://github.com/openzipkin/zipkin) and
[Jaeger](https://github.com/jaegertracing/jaeger) have been tested. [Jaeger](https://github.com/jaegertracing/jaeger) have been tested.
@ -48,6 +49,8 @@ jaeger-sampler-type
jaeger-sampler-param jaeger-sampler-param
``` ```
All these options (including host) allow environment variables, such as `$HOSTNAME` or `$HOST_IP`. In the case of Jaeger, if you have a Jaeger agent running on each machine in your cluster, you can use something like `$HOST_IP` (which can be 'mounted' with the `status.hostIP` fieldpath, as described [here](https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/#capabilities-of-the-downward-api)) to make sure traces will be sent to the local agent.
## Examples ## Examples
The following examples show how to deploy and test different distributed tracing systems. These example can be performed The following examples show how to deploy and test different distributed tracing systems. These example can be performed
@ -56,14 +59,14 @@ using Minikube.
### Zipkin ### Zipkin
In the [rnburn/zipkin-date-server](https://github.com/rnburn/zipkin-date-server) In the [rnburn/zipkin-date-server](https://github.com/rnburn/zipkin-date-server)
github repository is an example of a dockerized date service. To install the example and zipkin collector run: GitHub repository is an example of a dockerized date service. To install the example and Zipkin collector run:
``` ```
kubectl create -f https://raw.githubusercontent.com/rnburn/zipkin-date-server/master/kubernetes/zipkin.yaml kubectl create -f https://raw.githubusercontent.com/rnburn/zipkin-date-server/master/kubernetes/zipkin.yaml
kubectl create -f https://raw.githubusercontent.com/rnburn/zipkin-date-server/master/kubernetes/deployment.yaml kubectl create -f https://raw.githubusercontent.com/rnburn/zipkin-date-server/master/kubernetes/deployment.yaml
``` ```
Also we need to configure the NGINX controller configmap with the required values: Also we need to configure the NGINX controller ConfigMap with the required values:
``` ```
$ echo ' $ echo '
@ -78,22 +81,22 @@ metadata:
' | kubectl replace -f - ' | kubectl replace -f -
``` ```
In the zipkin interface we can see the details: In the Zipkin interface we can see the details:
![zipkin screenshot](../../images/zipkin-demo.png "zipkin collector screenshot") ![zipkin screenshot](../../images/zipkin-demo.png "zipkin collector screenshot")
### Jaeger ### Jaeger
1. Enable Ingress addon in minikube: 1. Enable Ingress addon in Minikube:
``` ```
$ minikube addons enable ingress $ minikube addons enable ingress
``` ```
2. Add minikube IP to /etc/hosts: 2. Add Minikube IP to /etc/hosts:
``` ```
$ echo "$(minikube ip) example.com" | sudo tee -a /etc/hosts $ echo "$(minikube ip) example.com" | sudo tee -a /etc/hosts
``` ```
3. Apply a Basic Service and Ingress Resource: 3. Apply a basic Service and Ingress Resource:
``` ```
# Create Echoheaders Deployment # Create Echoheaders Deployment
$ kubectl run echoheaders --image=k8s.gcr.io/echoserver:1.4 --replicas=1 --port=8080 $ kubectl run echoheaders --image=k8s.gcr.io/echoserver:1.4 --replicas=1 --port=8080
@ -178,5 +181,5 @@ In the zipkin interface we can see the details:
http://192.168.99.100:30183 http://192.168.99.100:30183
``` ```
In the jaeger interface we can see the details: In the Jaeger interface we can see the details:
![jaeger screenshot](../../images/jaeger-demo.png "jaeger collector screenshot") ![jaeger screenshot](../../images/jaeger-demo.png "jaeger collector screenshot")

View file

@ -954,7 +954,7 @@ func createOpentracingCfg(cfg ngx_config.Configuration) error {
return err return err
} }
} else if cfg.JaegerCollectorHost != "" { } else if cfg.JaegerCollectorHost != "" {
tmpl, err = template.New("jarger").Parse(jaegerTmpl) tmpl, err = template.New("jaeger").Parse(jaegerTmpl)
if err != nil { if err != nil {
return err return err
} }
@ -968,7 +968,10 @@ func createOpentracingCfg(cfg ngx_config.Configuration) error {
return err return err
} }
return ioutil.WriteFile("/etc/nginx/opentracing.json", tmplBuf.Bytes(), file.ReadWriteByUser) // Expand possible environment variables before writing the configuration to file.
expanded := os.ExpandEnv(string(tmplBuf.Bytes()))
return ioutil.WriteFile("/etc/nginx/opentracing.json", []byte(expanded), file.ReadWriteByUser)
} }
func cleanTempNginxCfg() error { func cleanTempNginxCfg() error {