动态配置(文件系统)
本示例介绍了如何使用基于文件系统的动态配置来配置 Envoy。
它演示了如何动态提供给 Envoy 的配置可以在不重新启动服务器的情况下进行更新。
步骤 1:启动代理容器
将目录更改为 Envoy 存储库中的 examples/dynamic-config-fs
。
构建并启动容器。
这还应该启动两个上游 HTTP
回声服务器,service1
和 service2
。
$ pwd
envoy/examples/dynamic-config-fs
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------
dynamic-config-fs_proxy_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10000->10000/tcp, 0.0.0.0:19000->19000/tcp
dynamic-config-fs_service1_1 /bin/echo-server Up 8080/tcp
dynamic-config-fs_service2_1 /bin/echo-server Up 8080/tcp
步骤 2:检查网页响应
您应该能够向端口 10000
发出请求,该请求将由 service1
提供服务。
$ curl -s https://127.0.0.1:10000
Request served by service1
HTTP/2.0 GET /
Host: localhost:10000
User-Agent: curl/7.72.0
Accept: */*
X-Forwarded-Proto: http
X-Request-Id: 6672902d-56ca-456c-be6a-992a603cab9a
X-Envoy-Expected-Rq-Timeout-Ms: 15000
步骤 3:转储 Envoy 的 dynamic_active_clusters
配置
如果您现在转储代理的 dynamic_active_clusters 配置,您应该看到它已配置为 example_proxy_cluster
指向 service1
。
$ curl -s https://127.0.0.1:19000/config_dump | jq -r '.configs[1].dynamic_active_clusters'
[
{
"cluster": {
"@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster",
"name": "example_proxy_cluster",
"type": "LOGICAL_DNS",
"connect_timeout": "5s",
"dns_lookup_family": "V4_ONLY",
"load_assignment": {
"cluster_name": "example_proxy_cluster",
"endpoints": [
{
"lb_endpoints": [
{
"endpoint": {
"address": {
"socket_address": {
"address": "service1",
"port_value": 8080
}
}
}
}
]
}
]
}
},
"last_updated": "2020-10-25T20:37:05.838Z"
}
]
步骤 4:替换容器内的 cds.yaml
以更新上游集群
示例设置为 Envoy 提供了两个动态配置文件
configs/cds.yaml
用于提供 集群发现服务 (CDS)。
编辑容器内的 cds.yaml
并将集群地址从 service1
更改为 service2
6 cluster_name: example_proxy_cluster
7 endpoints:
8 - lb_endpoints:
9 - endpoint:
10 address:
11 socket_address:
12 address: service1
13 port_value: 8080
您可以使用容器内的 sed
完成此操作
docker compose exec -T proxy sed -i s/service1/service2/ /var/lib/envoy/cds.yaml
注意
上面的示例使用 sed -i
,它充当就地编辑,因为 sed
会复制、编辑和移动以执行此操作。
步骤 5:检查 Envoy 是否使用更新后的配置
再次检查网页响应,请求现在应该由 service2
处理
$ curl https://127.0.0.1:10000 | grep "served by"
Request served by service2
转储 dynamic_active_clusters,example_proxy_cluster
现在应该配置为代理到 service2
$ curl -s https://127.0.0.1:19000/config_dump | jq -r '.configs[1].dynamic_active_clusters'
[
{
"cluster": {
"@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster",
"name": "example_proxy_cluster",
"type": "LOGICAL_DNS",
"connect_timeout": "5s",
"dns_lookup_family": "V4_ONLY",
"load_assignment": {
"cluster_name": "example_proxy_cluster",
"endpoints": [
{
"lb_endpoints": [
{
"endpoint": {
"address": {
"socket_address": {
"address": "service2",
"port_value": 8080
}
}
}
}
]
}
]
}
},
"last_updated": "2020-10-25T20:37:05.838Z"
}
]
另请参阅
- 动态配置(文件系统)快速入门指南
Envoy 基于文件系统的动态配置的快速入门指南。
- Envoy 管理快速入门指南
Envoy 管理界面的快速入门指南。
- 动态配置(控制平面)沙箱
使用 Go 控制平面动态配置 Envoy。