阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容于社区Istio开源服务网格,用于简化服务的治理,包括服务调用之间的流量路由与拆分管理、服务间通信的认证安全以及网格可观测性能力,从而极大地减轻开发与运维的工作负担。
详细说明
本文提供了Nginx中常用配置的解释以及在Istiogateway中如何实现对应的功能。
Ingress nginx 文档:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#forwarded-for-header
参数 |
描述 |
istio方案 |
allow-backend-server-header |
允许从后端返回标头 Server 而不是通用的 nginx 字符串。 |
envoy应该本来就是这样的 |
allow-snippet-annotations |
允许在ingress的annotation中添加自定义脚本修改nginx配置 |
ASM网关需要编辑IstioGateway YAML来修改网关配置。 |
compute-full-forwarded-for |
将远程地址附加到 X-Forwarded-For 标头而不是替换它。 |
这取决于envoy的use_remote_address配置,istio中网关默认此配置就是true |
enable-underscores-inheaders |
允许header中的下划线 |
这应该对应envoy的headers_with_underscores_action,默认就是允许的 |
forwarded-for-header |
设置用于标识客户端的原始 IP 地址的标头字段。 |
尚无方法去自定义forwarded-for header,默认就是X-Forwarded-For |
generate-request-id |
如果请求中不存在 X-Request-ID,则确保 X-Request-ID 默认为随机值 |
这应该对应envoy的generate_request_id,可以通过ASM插件调整,默认就是true |
ignore-invalid-headers true |
是否忽略带有非法名称的header。合法的header名称应该是由英文字母、数字、连字符,可能包含下划线(由underscores_in_headers控制)。 |
envoy提供了一个Header validator,https://www.envoyproxy.io/docs/envoy/v1.27.0/api-v3/extensions/http/header_validators/envoy_default/v3/header_validator.proto istio并没有配置header validator,会使用默认值,如果有非法header,会提示badrequest。 |
keep-alive-requests |
设置同一个keep-alive connection最大可以处理多少个请求。达到最大请求数后,该连接将被关闭。 |
参考DestinationRule中connectionPool.maxRequestsPerConnection |
log-format-upstream |
自定义日志格式 |
ASM支持,需要使用可观测配置来完成。 |
max-worker-connections |
设置同一个worker进程可以打开的最大连接数 |
istio并未提供完全相同的配置。但是提供了DestinationRule提供了一个connectionPool.tcp.maxConnections,这个指到同一个host的最大连接数。 |
proxy-body-size |
设置客户端请求的最大body size,如果超过了,就会报413。 |
不支持直接配置。需要单独配置envoy filter。 建议分块传输,不要使用太大的body。 |
proxy-connect-timeout |
定义与代理服务器建立连接的超时时间,不应该超过75秒。 |
参考DestinationRule中connectionPool.http.connectTimeout |
reuse-port |
设置nginx为每个工作进程创建一个单独的监听socket(是用SO_REUSEPORT),允许内核在工作进程之间分配传入的连接。默认是true |
envoy默认是true |
server-tokens |
在响应中发送NGINX服务器标头,并在错误页面中显示NGINX的版本,默认 disabled |
envoy默认会填充envoy的标头。但是错误页面不会显示envoy版本。 |
ssl-redirect |
如果服务器由TLS证书,则将重定向的全局值设置为HTTPS。 |
参考网关规则的tls.httpsRedirect |
upstream-keepalive-connections |
设置保留在每个工作进程的缓存中与上游服务器的最大的空闲keepalive connection数目 |
istio并未提供完全相同的配置。但是DestinationRule提供了一个connectionPool.tcp.maxConnections,和该选项语义类似,不同的地方在于istio中的这个是所有连接,nginx中是空闲连接。 |
upstream-keepalive-timeout |
设置一个超时,超时之后将关闭与上游服务器之间的空闲连接。 |
参考DestinationRule中connectionPool.http.idleTimeout |
use-forwarded-headers |
如果是true,nginx将会转发传进来的 如果是false,nginx会忽略传进来的值,自己重新填一个。 |
istio关于XFF头的处理,参考这篇文档https://istio.io/latest/zh/docs/ops/configuration/traffic-management/network-topologies/ |
worker-cpu-affinity |
将worker进程绑定到指定的CPU集合上。 |
容器环境中,通常不建议配置该选项。自动分配即可。 |
欢迎讨论&补充
如有其它疑惑的字段,欢迎在评论中提问,后续会持续解答。