第四十八章 九析带你轻松完爆 Istio
系列文章:
总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 邀约
3 简介
4 Envoy 下载
5 Envoy 运行
6 Envoy 访问
7 Envoy 窥视
8 Envoy 修改
8.1 修改 envoy.yaml
8.2 创建新 Envoy 镜像
8.3 运行新 Envoy 镜像
8.4 访问新 Envoy 容器
1 前言
如果你对博客有任何疑问,请告诉我。
2 邀约
你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:
3 简介
本小节使你快速上手 Envoy。在使用 Envoy 前,首先需要下载并运行它。有两种方式获取 Envoy:下载编译好的二进制包;直接下载 Envoy 的学习镜像。本文使用后者。
4 Envoy 下载
使用如下语句下载 Envoy 学习镜像:
docker pull envoyproxy/envoy-dev:89d6c6c6fa202aa7a01e85d2d887b56c8a3268ad
下载成功后的截图如下所示:
5 Envoy 运行
使用如下语句运行 Envoy 学习镜像:
docker run --rm -d -p 10000:10000 envoyproxy/envoy-dev:89d6c6c6fa202aa7a01e85d2d887b56c8a3268ad
上述命令会对外开启 Envoy 监听器,监听器端口为 10000。Envoy 容器启动成功后,可以执行如下命令查看 envoy 对外暴露的端口:
6 Envoy 访问
使用如下语句来访问 Envoy 容器提供的 http 路由服务:
curl -v http://localhost:10000
执行结果一般会出错,结果如下图所示:
出错的原因是官方提供的 Envoy 学习镜像是将所有对该 Envoy 的 http 请求路由到美国一个知名的搜索引擎网站去,而这个网站你们都知道,但是一般情况下却都访问不了。
为了操作成功,需要做一定的调整,经过简单调整,你也可以对 Envoy 有比较深入的了解。
7 Envoy 窥视
执行如下语句进入到 Envoy 容器内部:
docker exec -it $(docker ps | grep -i envoy | awk '{print $1}') /bin/bash
进入到容器内部之后,执行 ps -ef 查看当前容器内部运行进程列表:
ps -ef
执行结果如下图所示:
由上图可知 Envoy 启动时的配置文件 envoy.yaml,查看该文件内容如下所示:
从上图中,我们可以看到基本 Envoy 配置包括两部分内容:
admin:管理信息。配置管理服务器
static_resources: 静态配置内容。此配置包含 Envoy 启动时静态配置的所有内容,比如监听器(listener)和集群(clusters)。监听器里又配置了过滤器链(filter_chains)
结论:整个 Envoy 启动都是根据 envoy.yaml 的配置。上图配置中,Envoy 对外服务监听端口是 10000,所有 http 请求都路由到 www.gxxgle.com。
8 Envoy 修改
因为初始的学习配置,导致很多人无法成功访问的。我们可以修改 envoy.yaml 配置文件,改成路由到百度即可。
8.1 修改 envoy.yaml
执行如下语句将容器内的原始 envoy.yaml 配置文件拷贝到 docker 所在宿主机:
# 下面的 75f8e71991f2 代表运行的 envoy 容器
docker cp 75f8e71991f2:/etc/envoy/envoy.yaml ./
编辑 envoy.yaml 文件如下:
route:
host_rewrite: www.baidu.com# 31行
socket_address:
address: www.baidu.com# 49行
sni: www.baidu.com# 55行
修改内容如下图所示:
8.2 创建新 Envoy 镜像
首先编写 Dockerfile 文件,内容如下 :
FROM envoyproxy/envoy-dev:89d6c6c6fa202aa7a01e85d2d887b56c8a3268ad
COPY envoy.yaml /etc/envoy/envoy.yaml
接着执行如下语句创建镜像:
docker build -t envoy:v1 .
然后执行如下语句查看是否镜像创建成功:
docker images | grep -i envoy
8.3 运行新 Envoy 镜像
执行如下语句运行新创建的镜像:
docker run -d --name envoy -p 9901:9901 -p 10000:10000 envoy:v1
8.4 访问新 Envoy 容器
执行如下语句访问新 Envoy 容器:
执行效果如下图所示: