anchor.diff:  === Create Kubernetes cluster
   
   Review the steps to create a Kubernetes cluster on AWS using Kops in the
  -link:../cluster-install/README.adoc#create-kubernetes-cluster[cluster install] documentation. Validate the cluster before installing linkerd.
  -
  -  kops validate cluster
  +link:../cluster-install#default-gossip-based-cluster[cluster install] documentation.
   
   === Install Istio
   
  
positive.code:   LINKERD_ELB=$(kubectl get svc l5d -o jsonpath="{.status.loadBalancer.ingress[0].*}")
    open http://$LINKERD_ELB:9990
  
  === Install sample microservices apps
  
  The https://github.com/linkerd/linkerd-examples/tree/master/k8s-daemonset/k8s[Github repo for
  linkerd examples] has two microservices apps called "hello" and "world". They both communicate
  with each other to complete the request. Run this command to install these apps in the default
  namespace.
  
    kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/\
    k8s/hello-world.yml
  
  Generate some traffic by running this command and linkerd will show the number of requests being
  served, connections and bunch of rich data
  
    http_proxy=$LINKERD_ELB:4140 curl -s http://hello
  
  image::linkerd.png[]
  
  === Install linkerd-viz
  
  linkerd-viz is a monitoring application based on https://prometheus.io/[Prometheus] and
  http://grafana.org/[Grafana]. It can automatically find linkerd instances and services
  that are installed in your k8s cluster.
  
    kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-viz/master/k8s/linkerd-viz.yml
  
  You can open linkerd-viz ELB to view the dashboard. As with the previous example, it may take a minute or two before the
  ELB DNS is available.
  
    LINKERD_VIZ_ELB=$(kubectl get svc linkerd-viz -o jsonpath="{.status.loadBalancer.ingress[0].*}")
    open http://$LINKERD_VIZ_ELB
  
  image::linkerd-viz.png[]
  
  === Per request routing
  
  We'll use the same 'hello-world' application used in the example above, but this time we'll deploy version 2 of the
  'world' microservice, and we'll specify on a per request level whether the request should use v1 or v2 of the 'world'
  microservice.
  
  If you haven't already deployed the 'hello-world' application, deploy it now.
  
      kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/\
      k8s/hello-world.yml
  
  Deploy the linkerd ingress so we can access the application externally.
  
      kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/\
      k8s/linkerd-ingress.yml
  
  Now deploy version2 of the `world` microservice.
  
      kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/\
      k8s/world-v2.yml
  
  Send a request to v1 of the service. It should reply with 'Hello world'.
  
      INGRESS_LB=$(kubectl get svc l5d -o jsonpath="{.status.loadBalancer.ingress[0].*}")
      curl -H 'Host: www.hello.world' $INGRESS_LB
  
  After a minute or two, it should reply with 'Hello world'.
  ```
  $  INGRESS_LB=$(kubectl get svc l5d -o jsonpath="{.status.loadBalancer.ingress[0].*}")
  $  curl -H 'Host: www.hello.world' $INGRESS_LB
  Hello (100.96.1.12) world (100.96.1.14)
  ```
  
  Now send a request to v2 of the service by modifying the header in the request.
  
      curl -H "Host: www.hello.world" -H "l5d-dtab: /host/world => /srv/world-v2;" $INGRESS_LB
  
  It should reply with 'Hello earth'.
  ```
  $ curl -H "Host: www.hello.world" -H "l5d-dtab: /host/world => /srv/world-v2;" $INGRESS_LB
  Hello (100.96.1.11) earth (100.96.2.14)
  ```
  This demonstrates that v1 and v2 of the `world` service are running in the cluster, and you can specify in the
  request header which version of the service to route individual requests to.
  
  That's it! You can look into linkerd configuration files in https://github.com/linkerd/linkerd-examples/tree/master/k8s-daemonset/k8s[linkerd examples]
  to learn more.
  
  === Cleanup
  
  Remove the installed components
  
  ```
  kubectl delete -f https://raw.githubusercontent.com/linkerd/linkerd-viz/master/k8s/linkerd-viz.yml
  kubectl delete -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/\
  k8s/world-v2.yml
  kubectl delete -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/\
  k8s/hello-world.yml
  kubectl delete -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/\
  k8s/linkerd-ingress.yml
  kubectl delete -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/\
  k8s/linkerd.yml
  ```
  
  == Using Istio with Kubernetes
  
  https://istio.io[Istio] is a layer 4/7 proxy that routes and load balances traffic over HTTP, WebSocket, HTTP/2, gRPC and
  supports application protocols such as MongoDB and Redis. Istio uses the Envoy proxy to manage all inbound/outbound traffic
  in the service mesh. Envoy was built by https://www.lyft.com/[Lyft], and in Sept 2017 Envoy became a member of the link:https://www.cncf.io/[CNCF], alongside Kubernetes.
  Istio is a joint collaboration between Google, IBM and Lyft.
  
  https://istio.io[Istio] has a wide variety of traffic management features that live outside the application code, such
  as A/B testing, phased/canary rollouts, failure recovery, circuit breaker, layer 7 routing and policy enforcement
  (all provided by the Envoy proxy). Istio also supports ACLs, rate limits, quotas, authentication, request tracing and
  telemetry collection using its Mixer component. The goal of the Istio project is to support traffic management and
  
negative.code: 
  == Using Linkerd with Kubernetes
  
  https://linkerd.io/[Linkerd] is a layer 5/7 proxy that routes and load balances traffic over HTTP, Thrift, Mux, HTTP/2 and gRPC. Its based on Finagle (built by Twitter), and in January 2017 linkerd became a member of the link:https://www.cncf.io/[CNCF], alongside Kubernetes.
  
  https://linkerd.io/[Linkerd] adds visibility, control, and reliability to your application with
  a wide array of powerful techniques: circuit-breaking, latency-aware load balancing, eventually
  