From ae26612fd097f8e835332a7d004a3be205eb68f9 Mon Sep 17 00:00:00 2001 From: Wayne Zhang Date: Wed, 8 Feb 2017 17:30:54 -0800 Subject: [PATCH 1/2] Add script to build docker image. --- WORKSPACE | 16 ++++++++++++++++ script/release-docker | 30 ++++++++++++++++++++++++++++++ src/envoy/mixer/BUILD | 26 ++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100755 script/release-docker diff --git a/WORKSPACE b/WORKSPACE index e152300d73d..3b255e3fa7a 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -69,3 +69,19 @@ load( ) envoy_repositories() + +new_http_archive( + name = "docker_ubuntu", + build_file_content = """ +load("@bazel_tools//tools/build_defs/docker:docker.bzl", "docker_build") +docker_build( + name = "xenial", + tars = ["xenial/ubuntu-xenial-core-cloudimg-amd64-root.tar.gz"], + visibility = ["//visibility:public"], +) +""", + sha256 = "de31e6fcb843068965de5945c11a6f86399be5e4208c7299fb7311634fb41943", + strip_prefix = "docker-brew-ubuntu-core-e406914e5f648003dfe8329b512c30c9ad0d2f9c", + type = "zip", + url = "https://codeload.github.com/tianon/docker-brew-ubuntu-core/zip/e406914e5f648003dfe8329b512c30c9ad0d2f9c", +) diff --git a/script/release-docker b/script/release-docker new file mode 100755 index 00000000000..a2125219a75 --- /dev/null +++ b/script/release-docker @@ -0,0 +1,30 @@ +#!/bin/bash +# +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ +# +set -ex + +PROJECT=istio-testing +IMAGE_NAME="gcr.io/${PROJECT}/proxy:experiment" + +gcloud docker --authorize-only + +bazel run --config=release //src/envoy/mixer:proxy "${IMAGE_NAME}" + +gcloud docker -- push "${IMAGE_NAME}" + + diff --git a/src/envoy/mixer/BUILD b/src/envoy/mixer/BUILD index 45c96e25f96..b41451ca68c 100644 --- a/src/envoy/mixer/BUILD +++ b/src/envoy/mixer/BUILD @@ -16,6 +16,7 @@ # load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") +load("@bazel_tools//tools/build_defs/docker:docker.bzl", "docker_build") cc_library( name = "filter_lib", @@ -47,3 +48,28 @@ pkg_tar( mode = "0755", package_dir = "/usr/local/bin/", ) + +pkg_tar( + name = "config_tar", + extension = "tar.gz", + files = ["envoy-mixer.conf"], + mode = "0755", + package_dir = "/etc/opt/proxy", + tags = ["manual"], +) + +docker_build( + name = "proxy", + base = "@docker_ubuntu//:xenial", + entrypoint = [ + "/usr/local/bin/envoy", + "-c /etc/opt/proxy/envoy-mixer.conf", + ], + ports = ["9090"], + repository = "istio", + tags = ["manual"], + tars = [ + ":config_tar", + ":envoy_tar", + ], +) From a91e93238dba1528c25be878a37cedaa17f49268 Mon Sep 17 00:00:00 2001 From: Wayne Zhang Date: Thu, 9 Feb 2017 11:47:17 -0800 Subject: [PATCH 2/2] Add start_envoy for docker image. --- script/release-docker | 18 ++++- src/envoy/mixer/BUILD | 20 +++++- src/envoy/mixer/README.md | 2 +- .../{envoy-mixer.conf => envoy.conf.template} | 6 +- src/envoy/mixer/start_envoy | 67 +++++++++++++++++++ 5 files changed, 105 insertions(+), 8 deletions(-) rename src/envoy/mixer/{envoy-mixer.conf => envoy.conf.template} (92%) create mode 100755 src/envoy/mixer/start_envoy diff --git a/script/release-docker b/script/release-docker index a2125219a75..d21caffee55 100755 --- a/script/release-docker +++ b/script/release-docker @@ -18,8 +18,19 @@ # set -ex +# This docker image can be used as: +# +# docker run IMAGE -a backend_address -p PORT -m MIXER_SERVER +# + PROJECT=istio-testing -IMAGE_NAME="gcr.io/${PROJECT}/proxy:experiment" +IMAGE_PREFIX="gcr.io/${PROJECT}/proxy" + +DATE_PART=$(date +"%Y%m%d") +SHA_PART=$(git show -q HEAD --pretty=format:%h) +DOCKER_TAG="${DATE_PART}${SHA_PART}" + +IMAGE_NAME="${IMAGE_PREFIX}:${DOCKER_TAG}" gcloud docker --authorize-only @@ -27,4 +38,9 @@ bazel run --config=release //src/envoy/mixer:proxy "${IMAGE_NAME}" gcloud docker -- push "${IMAGE_NAME}" +IMAGE_LATEST="${IMAGE_PREFIX}:latest" + +docker tag -f "${IMAGE_NAME}" "${IMAGE_LATEST}" + +gcloud docker -- push "${IMAGE_LATEST}" diff --git a/src/envoy/mixer/BUILD b/src/envoy/mixer/BUILD index b41451ca68c..917e627e073 100644 --- a/src/envoy/mixer/BUILD +++ b/src/envoy/mixer/BUILD @@ -50,10 +50,18 @@ pkg_tar( ) pkg_tar( - name = "config_tar", + name = "start_envoy_tar", extension = "tar.gz", - files = ["envoy-mixer.conf"], + files = ["start_envoy"], mode = "0755", + package_dir = "/usr/local/bin/", +) + +pkg_tar( + name = "config_tar", + extension = "tar.gz", + files = ["envoy.conf.template"], + mode = "0666", package_dir = "/etc/opt/proxy", tags = ["manual"], ) @@ -62,8 +70,13 @@ docker_build( name = "proxy", base = "@docker_ubuntu//:xenial", entrypoint = [ + "/usr/local/bin/start_envoy", + "-e", "/usr/local/bin/envoy", - "-c /etc/opt/proxy/envoy-mixer.conf", + "-c", + "/etc/opt/proxy/envoy.conf", + "-t", + "/etc/opt/proxy/envoy.conf.template", ], ports = ["9090"], repository = "istio", @@ -71,5 +84,6 @@ docker_build( tars = [ ":config_tar", ":envoy_tar", + ":start_envoy_tar", ], ) diff --git a/src/envoy/mixer/README.md b/src/envoy/mixer/README.md index 43304785198..21f7403f77c 100644 --- a/src/envoy/mixer/README.md +++ b/src/envoy/mixer/README.md @@ -38,7 +38,7 @@ This Proxy will use Envoy and talk to Mixer server. * Start Envoy proxy, run ``` - bazel-bin/src/envoy/mixer/envoy -c src/envoy/mixer/envoy-mixer.conf + bazel-bin/src/envoy/mixer/start_envoy ``` * Then issue HTTP request to proxy. diff --git a/src/envoy/mixer/envoy-mixer.conf b/src/envoy/mixer/envoy.conf.template similarity index 92% rename from src/envoy/mixer/envoy-mixer.conf rename to src/envoy/mixer/envoy.conf.template index 3b494c96b59..f1a00d1fb3e 100644 --- a/src/envoy/mixer/envoy-mixer.conf +++ b/src/envoy/mixer/envoy.conf.template @@ -1,7 +1,7 @@ { "listeners": [ { - "port": 9090, + "port": ${PORT}, "bind_to_port": true, "filters": [ { @@ -35,7 +35,7 @@ "type": "both", "name": "mixer", "config": { - "mixer_server": "localhost:9091" + "mixer_server": "${MIXER_SERVER}" } }, { @@ -62,7 +62,7 @@ "lb_type": "round_robin", "hosts": [ { - "url": "tcp://localhost:8080" + "url": "tcp://${BACKEND}" } ] } diff --git a/src/envoy/mixer/start_envoy b/src/envoy/mixer/start_envoy new file mode 100755 index 00000000000..0a24b959ae2 --- /dev/null +++ b/src/envoy/mixer/start_envoy @@ -0,0 +1,67 @@ +#!/bin/bash +# +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ +# + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" + +function usage() { + [[ -n "${1}" ]] && echo "${1}" + + cat < "${CONFIG}" + +"${ENVOY}" -c "${CONFIG}" "${DEBUG}" +