MOSN 与 Istio 的 proxyv2 镜像 build 方法

本文主要讲述 MOSN 与 Istio 的 proxyv2 镜像 build 方法,并且如何仅更新 MOSN

本文的完整构建镜像方法均是基于 MacOS 和 Istio 1.10.6 版本进行的构建,在其他操作系统 Istio 版本上可能存在部分细节差异,需要进行调整。 除了完整构建方式外,如果仅有 MOSN 代码发生变化,还可以使用 单独更新 MOSN 版本 的方式构建镜像。

通常情况下,您不需要额外构建镜像,可直接用我们提供的镜像 mosnio/proxyv2:${MOSN-VERSION}-${ISTIO_VERSION},如docker pull mosnio/proxyv2:v1.0.0-1.10.6

完整的镜像构建(基于 MacOS 和 Istio 1.10.6)

1、下载完整的 istio 源代码,并且切换到对应的版本

  1. git clone git@github.com:istio/istio.git
  2. cd istio
  3. git checkout 1.10.6

2、由于目前 Istio 默认会加载 wasm,我们需要将相关逻辑注释掉,再重新编译镜像,避免一些不必要的错误。详细的改动可见 istio-diff

3、编译 MOSN 二进制,MOSN 提供了镜像编译的方式可直接编译 linux 的二进制;同时由于在 MacOS 上构建的过程中,Istio 还会下载一个 MacOS 版本,因此还需要编译一个 MacOS 的二进制

4、将编译好的二进制,使用 tar 方式进行打包,并且打包路径需要是 usr/local/bin

  1. cd ${MOSN Project Path}
  2. mkdir -p usr/local/bin
  3. make build # build mosn binary on linux
  4. cp build/bundles/${MOSN VERSION}/binary/mosn usr/local/bin
  5. tar -zcvf mosn.tar.gz usr/local/bin/mosn
  6. cp mosn.tar.gz mosn-centos.tar.gz # copy a renamed tar.gz file
  7. make build-local # build mosn binary on macos
  8. cp build/bundles/${MOSN VERSION}/binary/mosn usr/local/bin
  9. tar -zcvf mosn-macos.tar.gz usr/local/bin/mosn

5、将生成的mosn-macos.tar.gz mosn-centos.tar.gz mosn.tar.gz 上传到一个编译环境可访问的存储服务中,可用 Go 语言简单快速在本地环境搭建一个

  1. func main() {
  2. address := "" // an address can be reached when proxyv2 image build. for example, 0.0.0.0:8080
  3. filespath := "" // where the .tar.gz files stored.
  4. http.ListenAndServe(address, http.FileServer(http.Dir(filespath)))
  5. }

6、指定参数,开始编译 proxyv2 镜像

  1. address=$1 # your download service address
  2. export ISTIO_ENVOY_VERSION=$2 # MOSN Version, can be any value.
  3. export ISTIO_ENVOY_RELEASE_URL=http://$address/mosn.tar.gz
  4. export ISTIO_ENVOY_CENTOS_RELEASE_URL=http://$address/mosn-centos.tar.gz
  5. export ISTIO_ENVOY_MACOS_RELEASE_URL=http://$address/mosn-macos.tar.gz
  6. export ISTIO_ENVOY_MACOS_RELEASE_NAME=mosn-$2 # can be any value
  7. export SIDECAR=mosn
  8. make clean # clean the cache
  9. make docker.proxyv2 \
  10. SIDECAR=$SIDECAR \
  11. ISTIO_ENVOY_VERSION=$ISTIO_ENVOY_VERSION \
  12. ISTIO_ENVOY_RELEASE_URL=$ISTIO_ENVOY_RELEASE_URL \
  13. ISTIO_ENVOY_CENTOS_RELEASE_URL=$ISTIO_ENVOY_CENTOS_RELEASE_URL \
  14. ISTIO_ENVOY_MACOS_RELEASE_URL=$ISTIO_ENVOY_MACOS_RELEASE_URL \
  15. ISTIO_ENVOY_MACOS_RELEASE_NAME=$ISTIO_ENVOY_MACOS_RELEASE_NAME

7、编译完成以后,可以将镜像打上新的 Tag 并且上传(如个人测试 dockerhub 的地址),确保 istio 使用时可访问即可

单独更新 MOSN 版本

1、重新编译 MOSN 二进制

  1. cd ${MOSN Project Path}
  2. make build # build mosn binary on linux

2、直接基于现有 MOSN 的 proxyv2 镜像更新二进制

  1. FROM mosnio/proxyv2:v1.0.0-1.10.6
  2. COPY build/bundles/${MOSN VERSION}/binary/mosn /usr/local/bin/mosn
  1. docker build --no-cache --rm -t ${your image tag}

3、将新镜像上传,确保 istio 使用时可访问即可

  1. istioctl manifest apply --set .values.global.proxy.image=${MOSN IMAGE} --set meshConfig.defaultConfig.binaryPath="/usr/local/bin/mosn"

修改于 2022年10月28日: docs: Changes to the v1.2.0 configuration (#217) (d237414)