Dockerfile to replace Istio proxy configuration.
Add a Dockerfile to build a version of the proxy that has different
check_cache behavior.
diff --git a/proxy/Dockerfile b/proxy/Dockerfile
new file mode 100644
index 0000000..452e2ed
--- /dev/null
+++ b/proxy/Dockerfile
@@ -0,0 +1,4 @@
+FROM istio/proxy:0.1.3
+
+COPY envoy.conf.template /etc/opt/proxy/envoy.conf.template
+
diff --git a/proxy/README.md b/proxy/README.md
new file mode 100644
index 0000000..2a64a4a
--- /dev/null
+++ b/proxy/README.md
@@ -0,0 +1,11 @@
+# Proxy Docker image
+
+This directory contains a Dockerfile that will replace the Envoy
+configuration in the standard Istio proxy image with the configuration
+template in this directory.
+
+The main reason to change the configuration template here is to change
+the "check_cache_keys" parameter. With this change, the default
+Istio proxy will cache "check" results with the same URL. This change
+adds HTTP headers "apikey" and "Authorization" so that the caching
+will take authentication into account.
diff --git a/proxy/envoy.conf.template b/proxy/envoy.conf.template
new file mode 100644
index 0000000..e5984cc
--- /dev/null
+++ b/proxy/envoy.conf.template
@@ -0,0 +1,152 @@
+{
+ "listeners": [
+ {
+ "address": "tcp://0.0.0.0:${PORT}",
+ "bind_to_port": true,
+ "filters": [
+ {
+ "type": "read",
+ "name": "http_connection_manager",
+ "config": {
+ "codec_type": "auto",
+ "stat_prefix": "ingress_http",
+ "route_config": {
+ "virtual_hosts": [
+ {
+ "name": "backend",
+ "domains": ["*"],
+ "routes": [
+ {
+ "timeout_ms": 0,
+ "prefix": "/",
+ "cluster": "service1",
+ "opaque_config": {
+ "mixer_control": "on",
+ "mixer_forward": "off"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "access_log": [
+ {
+ "path": "/dev/stdout"
+ }
+ ],
+ "filters": [
+ {
+ "type": "decoder",
+ "name": "mixer",
+ "config": {
+ "mixer_server": "${MIXER_SERVER}",
+ "mixer_attributes": {
+ "target.uid": "POD222",
+ "target.service": "foo.svc.cluster.local"
+ },
+ "quota_name": "RequestCount",
+ "quota_amount": "1",
+ "check_cache_expiration_seconds": 1,
+ "check_cache_keys": [
+ "request.host",
+ "request.path",
+ "origin.user",
+ "request.headers/apikey",
+ "request.headers/authorization"
+ ]
+ }
+ },
+ {
+ "type": "decoder",
+ "name": "router",
+ "config": {}
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "address": "tcp://0.0.0.0:7070",
+ "bind_to_port": true,
+ "filters": [
+ {
+ "type": "read",
+ "name": "http_connection_manager",
+ "config": {
+ "codec_type": "auto",
+ "stat_prefix": "ingress_http",
+ "route_config": {
+ "virtual_hosts": [
+ {
+ "name": "backend",
+ "domains": ["*"],
+ "routes": [
+ {
+ "timeout_ms": 0,
+ "prefix": "/",
+ "cluster": "service2"
+ }
+ ]
+ }
+ ]
+ },
+ "access_log": [
+ {
+ "path": "/dev/stdout"
+ }
+ ],
+ "filters": [
+ {
+ "type": "decoder",
+ "name": "mixer",
+ "config": {
+ "mixer_server": "${MIXER_SERVER}",
+ "forward_attributes": {
+ "source.uid": "POD11",
+ "source.namespace": "XYZ11"
+ }
+ }
+ },
+ {
+ "type": "decoder",
+ "name": "router",
+ "config": {}
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "admin": {
+ "access_log_path": "/dev/stdout",
+ "address": "tcp://0.0.0.0:9001"
+ },
+ "cluster_manager": {
+ "clusters": [
+ {
+ "name": "service1",
+ "connect_timeout_ms": 5000,
+ "type": "strict_dns",
+ "lb_type": "round_robin",
+ "hosts": [
+ {
+ "url": "tcp://${BACKEND}"
+ }
+ ]
+ },
+ {
+ "name": "service2",
+ "connect_timeout_ms": 5000,
+ "type": "strict_dns",
+ "lb_type": "round_robin",
+ "hosts": [
+ {
+ "url": "tcp://localhost:9090"
+ }
+ ]
+ }
+ ]
+ }
+}