如何启用Envoy运行时特性envoy.reloadable_features.use_http_client_to_fetch_aws_credentials?
正确启用Envoy运行时特性
envoy.reloadable_features.use_http_client_to_fetch_aws_credentials的方法 问题场景
我尝试将配置项envoy.reloadable_features.use_http_client_to_fetch_aws_credentials: true直接添加到Envoy的config.yaml文件根节点,但该配置未被识别,导致EKS中运行Envoy的Pod崩溃。
错误配置片段(config.yaml)
envoy.reloadable_features.use_http_client_to_fetch_aws_credentials: true static_resources: listeners: - address: socket_address: address: 0.0.0.0 port_value: 8080 filter_chains: - transport_socket: name: envoy.transport_sockets.tls typed_config: "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext ....
Envoy启动命令
/usr/local/bin/envoy -c /config/config.yaml
错误日志
[2024-03-07 20:53:34.022][1][debug][init] [source/common/init/watcher_impl.cc:31] init manager Server destroyed Protobuf message (type envoy.config.bootstrap.v3.Bootstrap reason INVALID_ARGUMENT: invalid JSON in envoy.config.bootstrap.v3.Bootstrap, near 1:4724 (offset 4723): no such field: 'envoy.reloadable_features.use_http_client_to_fetch_aws_credentials') has unknown fields
错误原因
envoy.reloadable_features.use_http_client_to_fetch_aws_credentials是Envoy的运行时特性开关,不属于Bootstrap配置的顶层字段,直接放在config.yaml根节点会被视为非法字段,导致启动失败。
正确启用方式
方式1:通过启动命令参数直接启用
在Envoy启动命令中添加--enable-features参数指定要启用的特性,修改后的启动命令如下:
/usr/local/bin/envoy -c /config/config.yaml --enable-features envoy.reloadable_features.use_http_client_to_fetch_aws_credentials
若需启用多个特性,用逗号分隔即可:--enable-features feature1,feature2
方式2:通过运行时配置动态管理(支持重载)
如果需要动态开关特性或批量管理,可通过Envoy的运行时配置系统实现:
- 创建运行时配置文件(例如
reloadable_features.yaml):envoy.reloadable_features.use_http_client_to_fetch_aws_credentials: true - 将该文件放置到运行时目录(比如
/srv/envoy/runtime/current) - 在Bootstrap配置中添加运行时配置节点:
static_resources: # 原有静态资源配置... runtime: symlink_root: /srv/envoy/runtime subdirectory: current override_subdirectory: override
配置完成后,Envoy会读取运行时目录中的特性开关配置,且支持通过更新文件动态重载。
注意事项
确保使用的Envoy版本支持该特性,可执行envoy --version查看版本号,确认版本兼容性。
内容的提问来源于stack exchange,提问作者Raunak Kapoor
相关产品推荐
相关产品推荐

