当前位置: 首页 > news >正文

在 Ubuntu22.04 进行envoy沙盒实验

背景

最近在学习envoy,跟着官方文档做实验,遇到了一些问题,在此记录

1. docker 版本问题

envoy实验使用 Dockerfile 构建镜像时需要使用docker buildx,启动服务时需要使用 docker compose,而系统安装的docker没有这两个组件。最好卸载现有docker重新安装,步骤如下:

sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \https://download.docker.com/linux/ubuntu jammy stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

然后安装docker和需要的插件

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装后

root@k8s-master:~/examples# docker --version
Docker version 28.5.0, build 887030f
docker buildx version
root@k8s-master:~/examples# docker buildx version
docker compose version
github.com/docker/buildx v0.29.1 a32761aeb3debd39be1eca514af3693af0db334b
root@k8s-master:~/examples# docker compose version
Docker Compose version v2.40.0

2. 镜像拉取问题

本次实验docker-compose文件如下:

cat docker-compose.yaml 
services:proxy:build:context: .dockerfile: ../shared/envoy/Dockerfiledepends_on:- service1- service2ports:- "${PORT_PROXY:-10000}:10000"- "${PORT_ADMIN:-19000}:19000"service1:image: ${COMPOSE_PROJECT_NAME}-echobuild:context: ../shared/echoenvironment:ECHO_HOSTNAME: service1service2:image: ${COMPOSE_PROJECT_NAME}-echobuild:context: ../shared/echoenvironment:ECHO_HOSTNAME: service2go-control-plane:build:context: .dockerfile: ../shared/golang/Dockerfiletarget: golang-control-planecommand: /usr/local/bin/examplehealthcheck:test: nc -zv localhost 18000

需要编译三个镜像,那就需要从docker国外仓库拉取镜像,但由于国外镜像站无法访问,拉取会报错。

解决办法1:使用镜像代理

vi /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io"]
}

但是有些镜像比如本次实验使用的golang:1.24.5-bookworm这个镜像在使用镜像代理拉取时还是会报404,这时候只能科学上网了。

解决办法2:设置代理

export http_proxy=192.168.10.1:7890
export https_proxy=192.168.10.1:7890

3. 镜像编译问题

构建镜像时遇到两个问题:

  1. 执行 apt-get install 时卡住,执行rustup install nightly时卡住等等
  2. 执行 RUN --mount=type=cache,target=/var/cache/apt,sharing=locked 卡住等等

这时候就要修改Dockerfile,在合适的地方设置代理,去掉RUN命令中的 --mount 参数,修改后如下

diff --git a/shared/echo/Dockerfile b/shared/echo/Dockerfile
index b88fce8..d4cccab 100644
--- a/shared/echo/Dockerfile
+++ b/shared/echo/Dockerfile
@@ -1,13 +1,15 @@FROM rust:1.88.0 AS builderWORKDIR /usr/src/echoCOPY . .
+ENV HTTP_PROXY=192.168.10.1:7890
+ENV HTTPS_PROXY=192.168.10.1:7890RUN rustup install nightly && rustup default nightly && cargo build --releaseFROM debian:bookworm-slim
-RUN --mount=type=tmpfs,target=/var/cache/apt \
-    --mount=type=tmpfs,target=/var/lib/apt/lists \
-    apt-get -qq update \
+RUN echo 'Acquire::http::Proxy "http://192.168.10.1:7890/";' > /etc/apt/apt.conf.d/01proxy \
+ && echo 'Acquire::https::Proxy "https://192.168.10.1:7890/";' >> /etc/apt/apt.conf.d/01proxy
+RUN    apt-get -qq update \&& apt-get -qq install -y libssl-dev ca-certificatesCOPY --from=builder \/usr/src/echo/target/release/example-echo \
diff --git a/shared/envoy/Dockerfile b/shared/envoy/Dockerfile
index 459841c..f2f95fb 100644
--- a/shared/envoy/Dockerfile
+++ b/shared/envoy/Dockerfile
@@ -7,9 +7,7 @@ ARG ENVOY_CONFIG=envoy.yamlENV ENVOY_CONFIG="$ENVOY_CONFIG"ENV DEBIAN_FRONTEND=noninteractiveRUN echo 'Acquire::Retries "5";' > /etc/apt/apt.conf.d/80-retries
-RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
-    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
-    rm -f /etc/apt/apt.conf.d/docker-clean \
+RUN    rm -f /etc/apt/apt.conf.d/docker-clean \&& echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' | tee /etc/apt/apt.conf.d/keep-cache \&& apt-get -qq update -y \&& apt-get -qq install --no-install-recommends -y curl
@@ -28,9 +26,7 @@ HEALTHCHECK \&& curl -s "localhost:${ENVOY_ADMIN_PORT}/stats?filter=listener_manager.workers_started" | grep 1FROM envoy-base AS envoy-fault-injection
-RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
-    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
-    apt-get -qq update -y \
+RUN    apt-get -qq update -y \&& apt-get -qq install --no-install-recommends -y treeCOPY enable_delay_fault_injection.sh disable_delay_fault_injection.sh enable_abort_fault_injection.sh disable_abort_fault_injection.sh send_request.sh /@@ -49,9 +45,7 @@ RUN echo "4a7d17d4724ee890490bcd6cfdedb12a02316a3d33214348d30979abd201f1ca /usr/FROM envoy-base AS envoy-load-balancing
-RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
-    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
-    apt-get -qq update -y \
+RUN    apt-get -qq update -y \&& apt-get -qq install --no-install-recommends -y python3COPY ./client.py /client.pyEXPOSE 8001
diff --git a/shared/golang/Dockerfile b/shared/golang/Dockerfile
index b7af9c7..1ffed60 100644
--- a/shared/golang/Dockerfile
+++ b/shared/golang/Dockerfile
@@ -8,6 +8,8 @@ FROM golang:1.24.5-bookworm@sha256:69adc37c19ac6ef724b561b0dc675b27d8c719dfe848dFROM golang-base AS golang-control-plane-builderARG GO_RESOURCE=resource.go
+ENV HTTP_PROXY=192.168.10.1:7890
+ENV HTTPS_PROXY=192.168.10.1:7890RUN git clone https://github.com/envoyproxy/go-control-plane && cd go-control-plane && git checkout b4adc3bb5fe5288bff01cd452dad418ef98c676eADD "$GO_RESOURCE" /go/go-control-plane/internal/example/resource.goRUN cd go-control-plane && make bin/example
@@ -17,9 +19,9 @@ WORKDIR /go/go-control-planeFROM os-base AS golang-control-planeENV DEBIAN_FRONTEND=noninteractiveRUN echo 'Acquire::Retries "5";' > /etc/apt/apt.conf.d/80-retries
-RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
-    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
-    apt-get -qq update \
+RUN echo 'Acquire::http::Proxy "http://192.168.10.1:7890/";' > /etc/apt/apt.conf.d/01proxy \
+ && echo 'Acquire::https::Proxy "https://192.168.10.1:7890/";' >> /etc/apt/apt.conf.d/01proxy
+RUN    apt-get -qq update \&& apt-get -qq install --no-install-recommends -y netcat-traditionalCOPY --from=golang-control-plane-builder /go/go-control-plane/bin/example /usr/local/bin/example

这样服务就可以启动成功了

NAME                      IMAGE                   COMMAND                  SERVICE            CREATED          STATUS                            PORTS
test-go-control-plane-1   test-go-control-plane   "/usr/local/bin/exam…"   go-control-plane   4 seconds ago    Up 4 seconds (health: starting)   
test-proxy-1              test-proxy              "/docker-entrypoint.…"   proxy              34 seconds ago   Up 33 seconds                     0.0.0.0:10000->10000/tcp, [::]:10000->10000/tcp, 0.0.0.0:19000->19000/tcp, [::]:19000->19000/tcp
test-service1-1           test-echo               "example-echo -c /et…"   service1           34 seconds ago   Up 34 seconds                     8080/tcp
test-service2-1           test-echo               "example-echo -c /et…"   service2           34 seconds ago   Up 34 seconds                     8080/tcp
http://www.dtcms.com/a/454416.html

相关文章:

  • 速卖通 item_get 接口对接全攻略:从入门到精通
  • diy建站系统windows 做网站服务器吗
  • 2025年--Lc171--H175 .组合两个表(SQL)
  • 贪心算法 | 每周8题(二)
  • 杭州知名的企业网站建设策划连云港吧
  • 建设工程网站有哪些黄骅贴吧最近发生的事
  • 广西网站建设招标公司如何用网站做招聘
  • 网络引流怎么做啊?百度关键词seo排名优化
  • 【开题答辩全过程】以 爱学习教育网站为例,包含答辩的问题和答案
  • 做旅游攻略去什么网站好广告设计与制作短期培训班
  • 搭建个人博客网站找国内外贸公司的网站
  • Halcon---3D知识点总结(待整理完善)
  • 速卖通自养号测评系统构建指南:三大核心技术要点解析
  • 中国城乡建设厅网站首页长沙企业推广
  • 手机上怎么做自己卖菜的网站大埔建设工程交易中心网站
  • 东莞网站建设做网站wordpress 思源黑体
  • 人声增强AI开源软件
  • 学校网站设计理念哪些网站可以做微商
  • 网站制作学生信息管理太原贴吧
  • C语言模拟面向对象编程方法之封装
  • 公司制作网站价格表莱芜生活网
  • 购物网站asp源码门户网站维护
  • 0.5 数据增强、keras模型保存以及读取、绘制loss过程
  • wordpress网站维护页面模板做网站材料
  • 8.复合查询与内外连接
  • load_dotenv() 加载环境变量
  • 【C语言基础】数据类型、运算符与控制语句详解
  • 无限容量网站灵山建设局网站
  • 站长工具网站怎么做外围网站代理
  • 安泽网站建设网站seo在线检测