Skip to content

Instantly share code, notes, and snippets.

@chanwit
Last active August 10, 2018 06:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chanwit/93924557c8efbadb6db16fad0057bcf8 to your computer and use it in GitHub Desktop.
Save chanwit/93924557c8efbadb6db16fad0057bcf8 to your computer and use it in GitHub Desktop.
from flask import Flask
from flask import request
import socket
import os
import sys
import requests
app = Flask(__name__)
TRACE_HEADERS_TO_PROPAGATE = [
'X-Ot-Span-Context',
'X-Request-Id',
# Zipkin headers
'X-B3-TraceId',
'X-B3-SpanId',
'X-B3-ParentSpanId',
'X-B3-Sampled',
'X-B3-Flags',
# Jaeger header (for native client)
"uber-trace-id"
]
@app.route('/service/<service_number>')
def hello(service_number):
return ('Hello from behind Envoy (service {})! hostname: {} resolved'
'hostname: {}\n'.format(os.environ['SERVICE_NUMBER'],
socket.gethostname(),
socket.gethostbyname(socket.gethostname())))
# this is first, second
@app.route('/trace/<service_number>')
def trace(service_number):
headers = {}
ret_body = ''
# call service 2 from service 1
if int(os.environ['SERVICE_NUMBER']) == 1 :
for header in TRACE_HEADERS_TO_PROPAGATE:
if header in request.headers:
headers[header] = request.headers[header]
ret = requests.get("http://second:9080/trace/2", headers=headers)
ret_body = ret.content
return ('Hello from behind Envoy (service {})! hostname: {} resolved'
'hostname: {}\n'
'ret: {}\n'.format(os.environ['SERVICE_NUMBER'],
socket.gethostname(),
socket.gethostbyname(socket.gethostname()),
ret_body))
if __name__ == "__main__":
app.run(host='0.0.0.0', port=9080, debug=True)
apiVersion: v1
kind: Service
metadata:
name: first
labels:
app: first
spec:
ports:
- port: 9080
name: http
selector:
app: first
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: first-v1
spec:
replicas: 1
template:
metadata:
labels:
app: first
version: v1
spec:
containers:
- name: first
image: docker.io/chanwit/service
ports:
- containerPort: 9080
env:
- name: SERVICE_NUMBER
value: "1"
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: first-v2
spec:
replicas: 1
template:
metadata:
labels:
app: first
version: v2
spec:
containers:
- name: first
image: docker.io/chanwit/service
ports:
- containerPort: 9080
env:
- name: SERVICE_NUMBER
value: "1"
---
apiVersion: v1
kind: Service
metadata:
name: second
labels:
app: second
spec:
ports:
- port: 9080
name: http
selector:
app: second
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: second-v1
spec:
replicas: 1
template:
metadata:
labels:
app: second
version: v1
spec:
containers:
- name: second
image: docker.io/chanwit/service
ports:
- containerPort: 9080
env:
- name: SERVICE_NUMBER
value: "21"
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: second-v2
spec:
replicas: 1
template:
metadata:
labels:
app: second
version: v2
spec:
containers:
- name: second
image: docker.io/chanwit/service
ports:
- containerPort: 9080
env:
- name: SERVICE_NUMBER
value: "22"
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: first-gateway
spec:
selector:
istio: ingressgateway # use Istio default gateway implementation
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: first
spec:
hosts:
- "*"
gateways:
- first-gateway
http:
- match:
- uri:
prefix: /service
- uri:
prefix: /trace
route:
- destination:
host: first
port:
number: 9080
subset: v2
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: first-default
spec:
host: first
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: second-default
spec:
host: second
subsets:
- name: v1
labels:
version: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: second
spec:
hosts:
- second
gateways:
- mesh
http:
- route:
- destination:
host: second
port:
number: 9080
subset: v1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment