Envoy xDS
来源:原创
时间:2019-11-18
作者:脚本小站
分类:云原生
xDS的订阅方式:
1、基于文件系统,监控在本地文件系统上的文件的变动,使用linux 的 inotify 机制。
2、基于REST API 的订阅,需要MS server,轮询的方式。
2、基于gRPC的订阅,需要MS server,基于HTTP2协议,打开双向的流通道,双方实现多次的交互操作。

基于文件inotify机制的方式:
node:
id: envoy_001
cluster: testcluster
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address: { address: 0.0.0.0, port_value: 9901 }
static_resources:
listeners:
- name: listener_http
address:
socket_address: { address: 0.0.0.0, port_value: 80 }
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
stat_prefix: egress_http
codec_type: AUTO
route_config:
name: test_route
virtual_hosts:
- name: web_service_1
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: webcluster1 }
http_filters:
- name: envoy.router
clusters:
- name: webcluster1
connect_timeout: 0.25s
type: EDS
lb_policy: ROUND_ROBIN
eds_cluster_config:
service_name: webcluster1
eds_config:
path: '/etc/envoy/eds.conf'基于REST方式:需要一个eds服务
node:
id: envoy_001
cluster: mycluster
admin:
access_log_path: "/tmp/admin_access.log"
address:
socket_address: { address: 0.0.0.0, port_value: 9901 }
static_resources:
listeners:
- name: listener_http
address:
socket_address: { address: 0.0.0.0, port_value: 80 }
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
stat_prefix: egress_http
codec_type: AUTO
route_config:
name: test_route
virtual_hosts:
- name: web_service_1
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: webcluster1 }
http_filters:
- name: envoy.router
clusters:
- name: webcluster1
type: EDS
connect_timeout: 0.25s
eds_cluster_config:
service_name: myservice
eds_config:
api_config_source:
api_type: REST # 支持的类型有REST、GRPC、DELTA、DELTA_GRPC
cluster_names: [edscluster] # eds集群的名称,只能和REST一起使用,故障时轮询访问,冗余目的
refresh_delay: 5s # 轮询时间间隔
request_timeout: 1s # 请求超时时长
- name: edscluster
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: edscluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: edsserver, port_value: 8080 }基于GRPC的方式:需要一个xds服务
node:
id: sidecar-001
cluster: mycluster
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address: { address: 0.0.0.0, port_value: 9901 }
static_resources:
listeners:
- name: listener_http
address:
socket_address: { address: 0.0.0.0, port_value: 80 }
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
stat_prefix: egress_http
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: web-service-1
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: web-cluster-1 }
http_filters:
- name: envoy.router
clusters:
- name: web-cluster-1
connect_timeout: 0.25s
type: EDS
lb_policy: ROUND_ROBIN
eds_cluster_config:
service_name: web-cluster-1
eds_config:
api_config_source:
api_type: GRPC
grpc_services:
envoy_grpc:
cluster_name: xds_cluster
- name: xds_cluster
type: STRICT_DNS
connect_timeout: 0.25s
http2_protocol_options: {}
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: xds_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: xds-service, port_value: 8081 }基于GRPC的全局动态配置:
node:
id: sidecar-002
cluster: mycluster2
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address:
address: 0.0.0.0
port_value: 9901
dynamic_resources:
lds_config:
api_config_source:
api_type: GRPC
grpc_services:
envoy_grpc:
cluster_name: xds_cluster
cds_config:
api_config_source:
api_type: GRPC
grpc_services:
envoy_grpc:
cluster_name: xds_cluster
static_resources:
clusters:
- name: xds_cluster
connect_timeout: 10s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
cluster_name: xds_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: xds-service, port_value: 8081 }ADS配置:
node:
id: <node identifier>
dynamic_resources:
cds_config: {ads: {}}
lds_config: {ads: {}}
ads_config:
api_type: GRPC
grpc_services:
envoy_grpc:
cluster_name: ads_cluster
static_resources:
clusters:
- name: ads_cluster
connect_timeout: { seconds: 5 }
type: STATIC
hosts:
- socket_address:
address: <ADS management server IP address>
port_value: <ADS management server port>
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
upstream_connection_options:
# configure a TCP keep-alive to detect and reconnect to the admin
# server in the event of a TCP socket disconnection
tcp_keepalive:
...
admin:
...