Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kubernetes pod changes misapplied causing 503 #5901

Closed
zaphod42 opened this issue Nov 27, 2019 · 10 comments
Closed

Kubernetes pod changes misapplied causing 503 #5901

zaphod42 opened this issue Nov 27, 2019 · 10 comments
Labels
area/provider/k8s kind/bug/possible a possible bug that needs analysis before it is confirmed or fixed. status/5-frozen-due-to-age
Projects
Milestone

Comments

@zaphod42
Copy link
Contributor

zaphod42 commented Nov 27, 2019

Do you want to request a feature or report a bug?

Bug

What did you do?

Setup is a single Traefik instance acting as Ingress sending requests to a Service that contains a single Pod. Cause the Pod to be unready for just long enough to be removed from the Service. Immediately make the Pod ready again.

In the setup I am using the readiness check is configured as such that it takes 11 seconds of the Pod being unready for it to be marked as unready and be removed from the service.

   Readiness:            http-get http://:8000/info/ready delay=0s timeout=1s period=2s #success=1 #failure=6

The test application we have put together allows us to control how it responds to the readiness check. Running the following commands repeatedly eventually triggers the condition.

kubectl -n experiment exec healthtest-blue-app-5b696d58cd-mtvj5 -- curl -XPOST http://localhost:8000/api/health/ill; sleep 11; kubectl -n experiment exec healthtest-blue-app-5b696d58cd-mtvj5 -- curl -XPOST http://localhost:8000/api/health/healthy;

Note: In our domain ready == healthy and unready == ill.

What did you expect to see?

Traefik will have, at most, a short time when it has no Pods to send requests to, which results in 503 responses. After the Pod returns to ready Traefik sends requests to that Pod and no long responds with 503.

What did you see instead?

Note that this does not happen every time. The steps may need to be repeated a few times to trigger the bug.

When it does trigger, Traefik continues to respond with 503 even after the logs indicate that the Pod being available has been communicated to it by Kubernetes.

I've also seen it successfully serve requests and then remove the Pod from load balancing. For example this result of requesting the health status of the application while triggering the bug:

It starts by the application in the Pod responding that it is healthy. Then it is made ill (by the commands above). At this point it is not considered unready by Kubernetes and continues to serve requests. After about 11 seconds the application is switched back to healthy. Shortly after that traefik responds with Service Unavailable. It will continue with Service Unavailable until I trigger another readiness change or restart Traefik.

Wed Nov 27 11:49:29 GMT 2019
healthy
Wed Nov 27 11:49:30 GMT 2019
healthy
Wed Nov 27 11:49:31 GMT 2019
ill
Wed Nov 27 11:49:32 GMT 2019
ill
Wed Nov 27 11:49:33 GMT 2019
ill
Wed Nov 27 11:49:34 GMT 2019
ill
Wed Nov 27 11:49:35 GMT 2019
ill
Wed Nov 27 11:49:36 GMT 2019
ill
Wed Nov 27 11:49:37 GMT 2019
ill
Wed Nov 27 11:49:38 GMT 2019
ill
Wed Nov 27 11:49:39 GMT 2019
ill
Wed Nov 27 11:49:40 GMT 2019
ill
Wed Nov 27 11:49:41 GMT 2019
ill
Wed Nov 27 11:49:42 GMT 2019
ill
Wed Nov 27 11:49:44 GMT 2019
healthy
Wed Nov 27 11:49:45 GMT 2019
healthy
Wed Nov 27 11:49:46 GMT 2019
Service Unavailable
Wed Nov 27 11:49:47 GMT 2019
Service Unavailable
Wed Nov 27 11:49:48 GMT 2019
Service Unavailable
Wed Nov 27 11:49:49 GMT 2019
Service Unavailable
Wed Nov 27 11:49:50 GMT 2019
Service Unavailable
Wed Nov 27 11:49:51 GMT 2019
Service Unavailable

Output of traefik version: (What version of Traefik are you using?)

$ kubectl -n experiment exec healthtest-blue-ing-7cc9588f87-gwztb -- traefik version
Version:      2.0.4
Codename:     montdor
Go version:   go1.13.3
Built:        2019-10-28T20:23:57Z
OS/Arch:      linux/amd64

What is your environment & configuration (arguments, toml, provider, platform, ...)?

Traefik is running as a Kubernetes Ingress. Kubernetes is version 1.16.2.

$ kubectl -n experiment describe pod healthtest-blue-ing-7cc9588f87-gwztb
Name:         healthtest-blue-ing-7cc9588f87-gwztb
Namespace:    experiment
Priority:     0
Node:         oy-kvm-005/172.16.0.66
Start Time:   Tue, 26 Nov 2019 15:46:06 +0000
Labels:       app.kubernetes.io/component=ingress
              app.kubernetes.io/instance=blue
              app.kubernetes.io/managed-by=stacks
              app.kubernetes.io/name=traefik
              app.kubernetes.io/part-of=healthtest
              app.kubernetes.io/version=2.0
              application=traefik
              group=blue
              machineset=healthtest
              pod-template-hash=7cc9588f87
              stack=health_test
Annotations:  cni.projectcalico.org/podIP: 10.10.97.32/32
              kubectl.kubernetes.io/restartedAt: 2019-11-26T15:46:06Z
Status:       Running
IP:           10.10.97.32
IPs:
  IP:           10.10.97.32
Controlled By:  ReplicaSet/healthtest-blue-ing-7cc9588f87
Containers:
  traefik-ingress-controller:
    Container ID:  docker://96a82145ac25880b6cdfc607cafa9ad2562f4abc3f00d8e688cdce10eb81ba4f
    Image:         traefik:v2.0
    Image ID:      docker-pullable://traefik@sha256:b2006797643b1da5a374d2d7d0ee142ff85b112df9a4ed187bb3abbb2704157d
    Ports:         8000/TCP, 10254/TCP
    Host Ports:    0/TCP, 0/TCP
    Args:
      --accesslog
      --ping
      --api.insecure
      --api.dashboard
      --entrypoints.http.Address=:8000
      --entrypoints.traefik.Address=:10254
      --providers.kubernetesingress
      --providers.kubernetesingress.ingressclass=traefik-healthtest-blue
      --providers.kubernetesingress.ingressendpoint.publishedservice=experiment/healthtest-blue-ing
      --providers.kubernetesingress.namespaces=experiment
      --metrics.prometheus
      --log.level=DEBUG
    State:          Running
      Started:      Tue, 26 Nov 2019 15:46:08 +0000
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     300m
      memory:  64Mi
    Requests:
      cpu:        200m
      memory:     48Mi
    Liveness:     http-get http://:traefik/ping delay=10s timeout=10s period=10s #success=1 #failure=3
    Readiness:    http-get http://:traefik/ping delay=0s timeout=10s period=10s #success=1 #failure=3
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from healthtest-blue-ing-token-ws8wj (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  healthtest-blue-ing-token-ws8wj:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  healthtest-blue-ing-token-ws8wj
    Optional:    false
QoS Class:       Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

If applicable, please paste the log output in DEBUG level (--log.level=DEBUG switch)

Line 1: Responds with 200
Line 3: Configuration update from kubernetes with no servers defined
Line 15: Configuration update 2 seconds later with one server defined
Line 16: Configuration ignored because it is the same as the internal model
Line 17: First configuration now applied and responds with 503 even though there is a ready server

Note that these logs are from a similar reproduction as described above, but at a different time, which is why the timestamps are different.

10.30.0.248 - - [26/Nov/2019:17:00:09 +0000] "HEAD /info/status.metrics HTTP/1.1" 200 0 "-" "-" 675 "@kubernetes" "http://10.10.97.38:8000" 1ms
time="2019-11-26T17:00:27Z" level=debug msg="Skipping status update on ingress experiment/healthtest-blue-app"
time="2019-11-26T17:00:27Z" level=debug msg="Configuration received from provider kubernetes: {\"http\":{\"routers\":{\"\":{\"service\":\"experiment-healthtest-blue-app-8000\",\"rule\":\"PathPrefix(`/`)\"}},\"services\":{\"experiment-healthtest-blue-app-8000\":{\"loadBalancer\":{\"passHostHeader\":true}}}},\"tcp\":{}}" providerName=kubernetes
time="2019-11-26T17:00:27Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [http traefik]" routerName=@kubernetes
time="2019-11-26T17:00:27Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=@kubernetes serviceName=experiment-healthtest-blue-app-8000 middlewareName=pipelining middlewareType=Pipelining
time="2019-11-26T17:00:27Z" level=debug msg="Creating middleware" middlewareType=Metrics serviceName=experiment-healthtest-blue-app-8000 entryPointName=traefik routerName=@kubernetes middlewareName=metrics-service
time="2019-11-26T17:00:27Z" level=debug msg="Creating load-balancer" entryPointName=traefik routerName=@kubernetes serviceName=experiment-healthtest-blue-app-8000
time="2019-11-26T17:00:27Z" level=debug msg="Added outgoing tracing middleware experiment-healthtest-blue-app-8000" routerName=@kubernetes middlewareType=TracingForwarder middlewareName=tracing entryPointName=traefik
time="2019-11-26T17:00:27Z" level=debug msg="Creating middleware" entryPointName=traefik middlewareType=Recovery middlewareName=traefik-internal-recovery
time="2019-11-26T17:00:27Z" level=debug msg="Creating middleware" entryPointName=http middlewareName=traefik-internal-recovery middlewareType=Recovery
time="2019-11-26T17:00:27Z" level=debug msg="Creating middleware" middlewareName=metrics-entrypoint entryPointName=http middlewareType=Metrics
time="2019-11-26T17:00:27Z" level=debug msg="Creating middleware" middlewareName=metrics-entrypoint middlewareType=Metrics entryPointName=traefik
time="2019-11-26T17:00:27Z" level=debug msg="No default certificate, generating one"
time="2019-11-26T17:00:29Z" level=debug msg="Skipping status update on ingress experiment/healthtest-blue-app"
time="2019-11-26T17:00:29Z" level=debug msg="Configuration received from provider kubernetes: {\"http\":{\"routers\":{\"\":{\"service\":\"experiment-healthtest-blue-app-8000\",\"rule\":\"PathPrefix(`/`)\"}},\"services\":{\"experiment-healthtest-blue-app-8000\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.10.97.38:8000\"}],\"passHostHeader\":true}}}},\"tcp\":{}}" providerName=kubernetes
time="2019-11-26T17:00:29Z" level=info msg="Skipping same configuration for provider kubernetes" providerName=kubernetes
10.30.0.248 - - [26/Nov/2019:17:00:33 +0000] "HEAD /info/status.metrics HTTP/1.1" 503 19 "-" "-" 676 "@kubernetes" - 0ms
@mpl mpl added kind/bug/possible a possible bug that needs analysis before it is confirmed or fixed. and removed status/0-needs-triage labels Nov 27, 2019
@ddtmachado
Copy link
Contributor

Hello @zaphod42 , just checking if I got everything right on your configuration and expected behavior.

Readiness: http-get http://:8000/info/ready delay=0s timeout=1s period=2s #success=1 #failure=6

delay=0s tells k8s to start checking just after the container started, you might get some readiness failures here if your process doesn't start instantly.
period=2s + #failure=6 means that it requires at least 12 seconds for a container to be considered 'not ready'

kubectl -n experiment exec healthtest-blue-app-5b696d58cd-mtvj5 -- curl -XPOST http://localhost:8000/api/health/ill; sleep 11; kubectl -n experiment exec healthtest-blue-app-5b696d58cd-mtvj5 -- curl -XPOST http://localhost:8000/api/health/healthy;

In this command you wait 11s before setting it to healthy again and this might not be enough to make the container appear as 'not ready' under k8s according to the previous described readiness probe.

Could you share the logs from your pods during those events? And kubectl get pods as well, so we can see status/restarts. This way we can compare k8s container status with Traefik responses.

@zaphod42
Copy link
Contributor Author

zaphod42 commented Dec 2, 2019

@ddtmachado, the point it will catch the unready pod isn't quite the product of those two numbers. With those settings, it will be caught between 10 and 12 seconds after having gone ill. For example:

  • at t0 k8s probes the pod and gets a ready response
  • at t0+1sec the pod goes unready
  • at t0+2sec, t0+4sec, t0+6sec, t0+8sec, and t0+10sec k8s performs probes and gets unready responses. It has now seen 5 unready responses in a span of 8 seconds.
  • at t0+12sec k8s performs one more probe and gets an unready response. That is now the 6th unready response and it removes it from the service. In total the pod has been unready for 11 seconds.

As you can see from that example, 11 seconds is enough to have k8s catch the unready pod with the described settings.

Could you share the logs from your pods during those events? And kubectl get pods as well, so we can see status/restarts. This way we can compare k8s container status with Traefik responses.

The app doesn't have any logs as it does nothing other than this. I modified our reproduction commands to include get pods and describe service before and after.

$ date; kubectl -n experiment get pods; kubectl -n experiment describe service healthtest-blue-app; kubectl -n experiment exec healthtest-blue-app-666c58b64b-hrxpp -- curl -s -XPOST http://localhost:8000/api/health/ill; sleep 11; kubectl -n experiment exec healthtest-blue-app-666c58b64b-hrxpp -- curl -s -XPOST http://localhost:8000/api/health/healthy; sleep 2; date; kubectl -n experiment get pods; kubectl -n experiment describe service healthtest-blue-app;
Mon  2 Dec 2019 12:50:40 GMT
NAME                                                  READY   STATUS    RESTARTS   AGE
healthtest-blue-app-666c58b64b-hrxpp                  1/1     Running   0          2d20h
healthtest-blue-ing-7b898f6d7d-tmckz                  1/1     Running   0          2d20h
host-sflow-hxrd7                                      1/1     Running   0          19d
host-sflow-scv2g                                      1/1     Running   0          19d
host-sflow-xtmkv                                      1/1     Running   0          19d
refapp-blue-app-6bbdb46b45-mjrj9                      1/1     Running   0          5h46m
refapp-blue-app-6bbdb46b45-ms4bd                      0/1     Evicted   0          6d19h
refapp-blue-app-6bbdb46b45-zx24p                      1/1     Running   0          6d19h
secure-file-senderapp-k8s-blue-app-5c54b6fcfb-29fss   1/1     Running   0          11d
secure-file-senderapp-k8s-blue-app-5c54b6fcfb-drw5l   1/1     Running   0          11d
Name:              healthtest-blue-app
Namespace:         experiment
Labels:            app.kubernetes.io/component=app_service
                   app.kubernetes.io/instance=blue
                   app.kubernetes.io/managed-by=stacks
                   app.kubernetes.io/part-of=healthtest
                   group=blue
                   machineset=healthtest
                   stack=health_test
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"app_service","app.kubernetes.io/...
Selector:          app.kubernetes.io/component=app_service,group=blue,machineset=healthtest,participation=enabled
Type:              ClusterIP
IP:                10.50.240.241
Port:              app  8000/TCP
TargetPort:        8000/TCP
Endpoints:         10.10.196.37:8000
Session Affinity:  None
Events:            <none>
Successfully went illSuccessfully went healthyMon  2 Dec 2019 12:50:55 GMT
NAME                                                  READY   STATUS    RESTARTS   AGE
healthtest-blue-app-666c58b64b-hrxpp                  1/1     Running   0          2d20h
healthtest-blue-ing-7b898f6d7d-tmckz                  1/1     Running   0          2d20h
host-sflow-hxrd7                                      1/1     Running   0          19d
host-sflow-scv2g                                      1/1     Running   0          19d
host-sflow-xtmkv                                      1/1     Running   0          19d
refapp-blue-app-6bbdb46b45-mjrj9                      1/1     Running   0          5h47m
refapp-blue-app-6bbdb46b45-ms4bd                      0/1     Evicted   0          6d19h
refapp-blue-app-6bbdb46b45-zx24p                      1/1     Running   0          6d19h
secure-file-senderapp-k8s-blue-app-5c54b6fcfb-29fss   1/1     Running   0          11d
secure-file-senderapp-k8s-blue-app-5c54b6fcfb-drw5l   1/1     Running   0          11d
Name:              healthtest-blue-app
Namespace:         experiment
Labels:            app.kubernetes.io/component=app_service
                   app.kubernetes.io/instance=blue
                   app.kubernetes.io/managed-by=stacks
                   app.kubernetes.io/part-of=healthtest
                   group=blue
                   machineset=healthtest
                   stack=health_test
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"app_service","app.kubernetes.io/...
Selector:          app.kubernetes.io/component=app_service,group=blue,machineset=healthtest,participation=enabled
Type:              ClusterIP
IP:                10.50.240.241
Port:              app  8000/TCP
TargetPort:        8000/TCP
Endpoints:         10.10.196.37:8000
Session Affinity:  None
Events:            <none>

The output of querying the pod through the ingress

Mon Dec  2 12:50:39 GMT 2019
healthy
Mon Dec  2 12:50:40 GMT 2019
healthy
Mon Dec  2 12:50:41 GMT 2019
healthy
Mon Dec  2 12:50:42 GMT 2019
ill
Mon Dec  2 12:50:43 GMT 2019
ill
Mon Dec  2 12:50:44 GMT 2019
ill
Mon Dec  2 12:50:45 GMT 2019
ill
Mon Dec  2 12:50:46 GMT 2019
ill
Mon Dec  2 12:50:47 GMT 2019
ill
Mon Dec  2 12:50:48 GMT 2019
ill
Mon Dec  2 12:50:49 GMT 2019
ill
Mon Dec  2 12:50:50 GMT 2019
ill
Mon Dec  2 12:50:51 GMT 2019
ill
Mon Dec  2 12:50:52 GMT 2019
ill
Mon Dec  2 12:50:53 GMT 2019
healthy
Mon Dec  2 12:50:54 GMT 2019
healthy
Mon Dec  2 12:50:56 GMT 2019
Service Unavailable
Mon Dec  2 12:50:57 GMT 2019
Service Unavailable
Mon Dec  2 12:50:58 GMT 2019
Service Unavailable
Mon Dec  2 12:50:59 GMT 2019
Service Unavailable
Mon Dec  2 12:51:00 GMT 2019
Service Unavailable
Mon Dec  2 12:51:01 GMT 2019
Service Unavailable
Mon Dec  2 12:51:02 GMT 2019
Service Unavailable
Mon Dec  2 12:51:03 GMT 2019
Service Unavailable
Mon Dec  2 12:51:04 GMT 2019
Service Unavailable
Mon Dec  2 12:51:05 GMT 2019
Service Unavailable
Mon Dec  2 12:51:06 GMT 2019
Service Unavailable

Traefik log from that time period

10.30.0.248 - - [02/Dec/2019:12:50:38 +0000] "GET /info/health HTTP/1.1" 200 7 "-" "-" 720 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:39Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38430\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:39Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38430\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:39Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38430\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:39 +0000] "GET /info/health HTTP/1.1" 200 7 "-" "-" 721 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:40Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38436\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:40Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38436\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:40Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38436\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:40 +0000] "GET /info/health HTTP/1.1" 200 7 "-" "-" 722 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:41Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38440\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:41Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38440\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:41Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38440\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:41 +0000] "GET /info/health HTTP/1.1" 200 7 "-" "-" 723 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:42Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38442\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:42Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38442\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:42Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38442\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:42 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 724 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:43Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38444\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:43Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" ForwardURL="http://10.10.196.37:8000" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38444\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:43Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38444\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:43 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 725 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:44Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38446\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:44Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38446\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:44Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38446\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:44 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 726 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:45Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38448\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:45Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38448\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:45Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38448\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:45 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 727 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:46Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38450\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:46Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38450\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:46Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38450\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:46 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 728 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:47Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38452\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:47Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38452\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:47Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38452\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:47 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 729 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:48Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38454\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:48Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38454\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:48Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38454\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:48 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 730 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:49Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38456\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:49Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38456\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:49Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38456\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:49 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 731 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:50Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38458\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:50Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38458\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:50Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38458\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:50 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 732 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:51Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38460\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:51Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38460\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:51Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38460\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:51 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 733 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:52Z" level=debug msg="Skipping status update on ingress experiment/healthtest-blue-app"
time="2019-12-02T12:50:52Z" level=debug msg="Configuration received from provider kubernetes: {\"http\":{\"routers\":{\"\":{\"service\":\"experiment-healthtest-blue-app-8000\",\"rule\":\"PathPrefix(`/`)\"}},\"services\":{\"experiment-healthtest-blue-app-8000\":{\"loadBalancer\":{\"passHostHeader\":true}}}},\"tcp\":{}}" providerName=kubernetes
time="2019-12-02T12:50:52Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [http traefik]" routerName=@kubernetes
time="2019-12-02T12:50:52Z" level=debug msg="Creating middleware" entryPointName=http routerName=@kubernetes serviceName=experiment-healthtest-blue-app-8000 middlewareName=pipelining middlewareType=Pipelining
time="2019-12-02T12:50:52Z" level=debug msg="Creating middleware" middlewareType=Metrics middlewareName=metrics-service entryPointName=http routerName=@kubernetes serviceName=experiment-healthtest-blue-app-8000
time="2019-12-02T12:50:52Z" level=debug msg="Creating load-balancer" entryPointName=http routerName=@kubernetes serviceName=experiment-healthtest-blue-app-8000
time="2019-12-02T12:50:52Z" level=debug msg="Added outgoing tracing middleware experiment-healthtest-blue-app-8000" routerName=@kubernetes middlewareName=tracing middlewareType=TracingForwarder entryPointName=http
time="2019-12-02T12:50:52Z" level=debug msg="Creating middleware" entryPointName=http middlewareName=traefik-internal-recovery middlewareType=Recovery
time="2019-12-02T12:50:52Z" level=debug msg="Creating middleware" entryPointName=traefik middlewareType=Recovery middlewareName=traefik-internal-recovery
time="2019-12-02T12:50:52Z" level=debug msg="Creating middleware" entryPointName=http middlewareName=metrics-entrypoint middlewareType=Metrics
time="2019-12-02T12:50:52Z" level=debug msg="Creating middleware" entryPointName=traefik middlewareName=metrics-entrypoint middlewareType=Metrics
time="2019-12-02T12:50:52Z" level=debug msg="No default certificate, generating one"
time="2019-12-02T12:50:52Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38462\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:52Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38462\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:52Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38462\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:52 +0000] "GET /info/health HTTP/1.1" 200 3 "-" "-" 734 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:53Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38464\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:53Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38464\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:53Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38464\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:53 +0000] "GET /info/health HTTP/1.1" 200 7 "-" "-" 735 "@kubernetes" "http://10.10.196.37:8000" 1ms
time="2019-12-02T12:50:54Z" level=debug msg="Skipping status update on ingress experiment/healthtest-blue-app"
time="2019-12-02T12:50:54Z" level=debug msg="Configuration received from provider kubernetes: {\"http\":{\"routers\":{\"\":{\"service\":\"experiment-healthtest-blue-app-8000\",\"rule\":\"PathPrefix(`/`)\"}},\"services\":{\"experiment-healthtest-blue-app-8000\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.10.196.37:8000\"}],\"passHostHeader\":true}}}},\"tcp\":{}}" providerName=kubernetes
time="2019-12-02T12:50:54Z" level=info msg="Skipping same configuration for provider kubernetes" providerName=kubernetes
time="2019-12-02T12:50:55Z" level=debug msg="vulcand/oxy/roundrobin/rr: begin ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38466\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
time="2019-12-02T12:50:55Z" level=debug msg="vulcand/oxy/roundrobin/rr: Forwarding this request to URL" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38466\",\"RequestURI\":\"/info/health\",\"TLS\":null}" ForwardURL="http://10.10.196.37:8000"
time="2019-12-02T12:50:55Z" level=debug msg="vulcand/oxy/roundrobin/rr: completed ServeHttp on request" Request="{\"Method\":\"GET\",\"URL\":{\"Scheme\":\"\",\"Opaque\":\"\",\"User\":null,\"Host\":\"\",\"Path\":\"/info/health\",\"RawPath\":\"\",\"ForceQuery\":false,\"RawQuery\":\"\",\"Fragment\":\"\"},\"Proto\":\"HTTP/1.1\",\"ProtoMajor\":1,\"ProtoMinor\":1,\"Header\":{\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/7.35.0\"],\"X-Forwarded-Host\":[\"experiment-healthtest-vip.oy.net.local\"],\"X-Forwarded-Port\":[\"80\"],\"X-Forwarded-Proto\":[\"http\"],\"X-Forwarded-Server\":[\"healthtest-blue-ing-7b898f6d7d-tmckz\"],\"X-Real-Ip\":[\"10.30.0.248\"]},\"ContentLength\":0,\"TransferEncoding\":null,\"Host\":\"experiment-healthtest-vip.oy.net.local\",\"Form\":null,\"PostForm\":null,\"MultipartForm\":null,\"Trailer\":null,\"RemoteAddr\":\"10.30.0.248:38466\",\"RequestURI\":\"/info/health\",\"TLS\":null}"
10.30.0.248 - - [02/Dec/2019:12:50:55 +0000] "GET /info/health HTTP/1.1" 200 7 "-" "-" 736 "@kubernetes" "http://10.10.196.37:8000" 1ms
10.30.0.248 - - [02/Dec/2019:12:50:56 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 737 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:50:57 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 738 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:50:58 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 739 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:50:59 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 740 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:51:00 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 741 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:51:01 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 742 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:51:02 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 743 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:51:03 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 744 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:51:04 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 745 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:51:05 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 746 "@kubernetes" - 0ms
10.30.0.248 - - [02/Dec/2019:12:51:06 +0000] "GET /info/health HTTP/1.1" 503 19 "-" "-" 747 "@kubernetes" - 0ms
time="2019-12-02T12:54:00Z" level=debug msg="Skipping status update on ingress experiment/healthtest-blue-app"
time="2019-12-02T12:54:00Z" level=debug msg="Skipping Kubernetes event kind *v1.Endpoints" providerName=kubernetes
time="2019-12-02T12:54:00Z" level=debug msg="Skipping status update on ingress experiment/healthtest-blue-app"
time="2019-12-02T12:54:00Z" level=debug msg="Skipping Kubernetes event kind *v1.Endpoints" providerName=kubernetes
time="2019-12-02T12:55:32Z" level=debug msg="Skipping status update on ingress experiment/healthtest-blue-app"
time="2019-12-02T12:55:32Z" level=debug msg="Skipping Kubernetes event kind *v1beta1.Ingress" providerName=kubernetes
time="2019-12-02T12:55:32Z" level=debug msg="Skipping status update on ingress experiment/healthtest-blue-app"
time="2019-12-02T12:55:32Z" level=debug msg="Skipping Kubernetes event kind *v1.Service" providerName=kubernetes

@ddtmachado
Copy link
Contributor

@zaphod42 ok but what you described is the best case scenario and that your script, k8s, your backend and Traefik are all instant reacting to changes to validate it. In reality I can only expect an intermittent behavior on this, exactly as you described on the issue:

The steps may need to be repeated a few times ...

Another thing to note is that during the period between a successful probe and a failed one you will always get 503 responses from that pod, and looks like that in the logs as you get 503 for less then 2 seconds, but correct me if I'm wrong as I'm not sure it's the full logs.

Besides that I think this is still a bug possible if it is not returning to normal without a restart or another status update on the pod.

@zaphod42
Copy link
Contributor Author

zaphod42 commented Dec 4, 2019

In reality I can only expect an intermittent behavior on this, exactly as you described on the issue

Yes, the problem doesn't always trigger. However it triggers often enough that I can reproduce it after a small number (fewer than 5) of retries of the script that I provided. I also see it happen in our kubernetes cluster running our actual applications (thankfully the cluster is still in a testing phase) around once a day. Those reproductions of the issue come from normal deployments of the application triggered by our CI systems. We fix it right now with kubectl --context oy -n latest rollout restart of the traefik Deployment.

looks like that in the logs as you get 503 for less then 2 seconds, but correct me if I'm wrong as I'm not sure it's the full logs.

I'm not certain which logs you are referring to. The most recent logs I provided show traefik issuing a 503 response from 12:50:55 until 12:51:06, which is 11 seconds. It cuts off at that point because I stopped making requests. I can provide provide longer logs if you would like. We've seen it remain in this state for around 45 minutes. In that case what appeared to bring it back to normal behaviour was one of the pods changing readiness state again.

Besides that I think this is still a bug possible if it is not returning to normal without a restart or another status update on the pod.

If you look at the bottom of my original report, you'll see that I supplied a log of the actions traefik was taking along with an interpretation of those actions. From those logs it appears that traefik contains a race condition of some sort when it applies changes from kubernetes.

Is my interpretation of those log lines correct? Does it say that traefik is skipping a configuration change from kubernetes?

@zaphod42
Copy link
Contributor Author

zaphod42 commented Dec 5, 2019

Looking through the code it appears that the code to skip some configuration updates is causing the problem. https://github.com/containous/traefik/blob/424e2a9439f8f3b00d7f9f19ed1df3b6d3c8c570/pkg/server/configurationwatcher.go#L172

Here is what I believe is happening:

  1. The server has configuration A
  2. Kubernetes sends an update to configuration B
  3. Traefik places configuration B on providerConfigUpdateCh (for throttling and then the configurationValidatedChan for application). Configuration B has not been applied yet. The current configuration is still A. The application of configuration B is happening asynchronously and so the race with the next two steps has started.
  4. Kubernetes sends another update to the configuration. The new configuration is A.
  5. Traefik discards the update from step 4 because it is the "current configuration"
  6. Traefik finishes processing the configuration B update.

At this point traefik has discarded the correct configuration and will now remain on configuration B until kubernetes sends another update.

zaphod42 pushed a commit to tim-group/stackbuilder that referenced this issue Dec 5, 2019
This uses a traefik that has been patched locally to address
traefik/traefik#5901. We should only run
this until upstream has released a fix.
@ddtmachado
Copy link
Contributor

I don't think this code is the problem, it's comparing traefik CRD config, which would not be the cause of missing updates on service endpoint liveness.

Also while throttling can cause skipping, it's only used if you set it explicitly in the configuration. The default value for it will be zero which makes no throttling at all.

I gave it a go but could not reproduce the issue. My setup was very similar to yours as I had a simple service that only returned the http status code, manipulated by a url parameter so I could switch between 200 and 503.

Kubernetes cluster is v1.14.4
Traefik is v2.0.6

Basic manifest:

apiVersion: v1
kind: Service
metadata:
  name: hc
spec:
  ports:
    - protocol: TCP
      name: hc
      port: 80
      targetPort: 8080
  selector:
    app: hc

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: hc
  labels:
    app: hc
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hc
  template:
    metadata:
      labels:
        app: hc
    spec:
      containers:
        - name: healthcheck
          image: hc-validator
          imagePullPolicy: IfNotPresent
          ports:
            - name: hc
              containerPort: 8080
          livenessProbe:
            httpGet:
              path: /health
              port: 8080

---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: hcrouter
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`hc`)
      kind: Rule
      services:
        - name: hc
          port: 80

Every time I changed the return code to 503 in one of it's instances it kept active (being hit by traffic) only until k8s liveness probe removes it. Once it's out I only get 200 by hitting it's Traefik entrypoint route, and when k8s starts a new pod it gets registered as expected.

I may give a go with Kubernetes 1.16.2 later, to see if anything changes, and update here.

@zaphod42
Copy link
Contributor Author

zaphod42 commented Dec 7, 2019

I don't think this code is the problem, it's comparing traefik CRD config, which would not be the cause of missing updates on service endpoint liveness.

I think we might not be talking about the same thing. The code that I pointed to is on the path of Traefik getting configuration (what the endpoints are that it should be routing to) from the various providers. Do I have that right?

To clarify this a bit more, it isn't that Traefik isn't getting the update, it is that it gets the update (we can see that in the logs I provided) but then throws it away. That means that it continues running with an incorrect configuration.

I believe that liveness could trigger this as well, but I was reporting seeing this with a readiness check and that is what my reproduction instructions are based on. A liveness check is used by kubernetes to determine if it should delete the container and start it again. Whereas a readiness check is used by kubernetes to deteremine if it should send requests to the container or not.

You need to change your Deployment to use a readinessProbe instead of a livenessProbe. You'll then need to flip the hc-validator from ready to unready, wait just long enough (and no more) for kubernetes to remove it from the Service and then immediately put it back to ready.

I also noticed that you are using an IngressRoute. We are not using that in our cluster. Instead we have a Deployment that sets up Traefik. You can see it here (as well as how the rest of the wiring that happens around our application deployment: https://github.com/tim-group/stackbuilder/blob/master/lib/stackbuilder/stacks/services/app_service.rb#L988

In the PR I submitted against master (#5952) I have a test case showing the mistake happening at the unit level. If you take that PR, keep the test, and revert the change to configurationwatcher.go you should see the test fail.

I am now running the backported change (submitted as #5954) in my cluster and the issue has not happened again since. I was also unable to reproduce the error using the reproduction steps given above against that patched version.

I may give a go with Kubernetes 1.16.2 later, to see if anything changes, and update here.

You can try, but I don't think this issue is specific to kubernetes or any particular version of kubernetes.

@zaphod42
Copy link
Contributor Author

zaphod42 commented Dec 9, 2019

I missed one other thing you had in your reproduction case. You set replicas: 3 whereas I specified a single Pod (i.e. replicas: 1). The reason for that is because the bug is most obvious in this case. When the one pod leaves and enters the service any missed/dropped update because very obvious. With > 1 replica you'd have to pay close attention to the traffic directed to each pod and notice that one isn't getting traffic when it should.

To summarise the setup:

  • Run traefik in a deployment (see the link to stackbuilder for the deployment configuration, although from what I've found I don't think this part matters much, if at all)
  • Use a readiness probe on the application pod
  • The application runs with only a single instance
  • Time the unready/ready flip of the app to be just around the minimum time kubernetes takes to remove the pod from the service. This gives the highest chance of triggering the race in traefik.

@ddtmachado
Copy link
Contributor

@zaphod42 Got it, you are right on this as I didn't checked with readinessProbe only and in this situation the issue is valid. I see there is already a PR opened to review, thanks for the contribution!

@traefiker traefiker added this to the 2.1 milestone Feb 10, 2020
@traefiker
Copy link
Contributor

Closed by #5952.

v2 automation moved this from issues to Done Feb 10, 2020
@traefik traefik locked and limited conversation to collaborators Mar 20, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area/provider/k8s kind/bug/possible a possible bug that needs analysis before it is confirmed or fixed. status/5-frozen-due-to-age
Projects
No open projects
v2
Done
Development

No branches or pull requests

6 participants