视频讲解:Envoy手把手入门视频讲解
go-control-plane 下发配置示例—环境准备
这里演示一个用 go-control-plane 下发配置的例子。
演示用的代码和配置文件位于:github.com/introclass/go-code-example/envoydev/xds。xds.go 是用 go-controle-plane 实现的简陋控制平面,envoy-docker-run 目录中是启动 envoy 容器的文件:
├── envoy-docker-run
│ ├── envoy-0-default.yaml
│ ├── envoy-1-ads-with-xds.yaml
│ ├── envoy-1-ads.yaml
│ ├── envoy-1-static.yaml
│ ├── envoy-1-xds.yaml
│ ├── envoy-to-grpc-svc.yaml
│ ├── log
│ │ └── admin_access.log
│ └── run.sh
└── xds.go
启动 envoy
envoy 启动时使用用配置文件 envoy-1-ads-with-xds.yaml,这个配置文件中
./run.sh envoy-1-ads-with-xds.yaml
envoy-1-ads-with-xds.yaml 中配置了两个 cluster,一个是 ads_cluster 一个是 xds_cluster,后面的演示代码既会下发使用 xds ,也会使用 ads ,所以在配置了这两个 cluster。
│ ├── envoy-0-default.yaml # envoy 容器中的默认配置
│ ├── envoy-0-example.yaml # 初次体验使用的配置
│ ├── envoy-1-ads-with-xds.yaml # 演示配置下发时用的配置,同时配置了 ads、xds
│ ├── envoy-1-ads.yaml # 只使用 ads 发现配置的配置
│ ├── envoy-1-static.yaml # 完全静态的配置
│ ├── envoy-1-xds.yaml # 只使用 ads 发现配置的配置
│ ├── envoy-to-grpc-svc.yaml # grpc 代理配置
演示用的配置文件说明
envoy-1-ads-with-xds.yaml 的内容比较长,分成几段说明。
第一段是 envoy 的常规配置,配置 envoy 的 id、管理接口等:
node:
id: "envoy-64.58"
cluster: "test"
#runtime:
# symlink_root: /srv/runtime/current
# subdirectory: envoy
# override_subdirectory: envoy_override
watchdog:
miss_timeout: 0.2s
megamiss_timeout: 1s
kill_timeout: 0s
multikill_timeout: 0s
flags_path: /etc/envoy/flags/
stats_flush_interval: 5s
stats_config:
use_all_default_tags: true
stats_sinks:
name: envoy.stat_sinks.hystrix
config:
num_buckets: 10
admin:
access_log_path: /var/log/envoy/admin_access.log
profile_path: /var/log/envoy/envoy.prof
address:
socket_address:
protocol: TCP
address: 0.0.0.0
port_value: 9901
第二段是发现配置,这里采用的是 ads 的方式,cds 和 lds 都指向 ads:
dynamic_resources:
ads_config:
api_type: GRPC
grpc_services:
envoy_grpc:
cluster_name: ads_cluster
cds_config: {ads: {}}
lds_config: {ads: {}}
第三段是下发配置,两个 cluster,一个是 ads_cluster,在上一段配置中已经被引用,另一个 xds_cluster在配置文件中没有被用到,但是后面的演示代码下发的配置中会用到。
ads_cluster 和 xds_cluster 的地址都是 127.0.0.1:5678,演示环境中 xds.go 和 envoy 容器在一台机器上,所以这里配置的都是本地地址。
static_resources:
clusters:
- name: ads_cluster
connect_timeout: 0.25s
type: STATIC
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
cluster_name: ads_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 5678
- name: xds_cluster
connect_timeout: 0.25s
type: STATIC
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
cluster_name: xds_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 5678
最后 static_resources 中还有两个演示中没有用到的 cluster,一个是指向 8.8.8.8:53 ,一个指向 www.baidu.com,它们只是用来示范 cluster 的配置方法:
- name: dns_google
connect_timeout: 0.25s
type: STATIC
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
cluster_name: dns_google
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 8.8.8.8
port_value: 53
- name: service_baidu
connect_timeout: 0.25s
type: LOGICAL_DNS
# Comment out the following line to test on v6 networks
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_baidu
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: www.baidu.com
port_value: 443
tls_context:
sni: www.baidu.com