1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
| // pilot/pkg/bootstrap/config_template.go
const EnvoyBootstrapTemplate = `
{
"node": {
"id": "{{.NodeID}}",
"cluster": "{{.Cluster}}",
"locality": {
"region": "{{.Region}}",
"zone": "{{.Zone}}"
},
"metadata": {{.NodeMetadata}}
},
"static_resources": {
"listeners": [
{
"name": "virtualOutbound",
"address": {
"socket_address": {
"address": "0.0.0.0",
"port_value": 15001
}
}
}
],
"clusters": [
{
"name": "xds-grpc",
"type": "STRICT_DNS",
"connect_timeout": "1s",
"lb_policy": "ROUND_ROBIN",
"load_assignment": {
"cluster_name": "xds-grpc",
"endpoints": [
{
"lb_endpoints": [
{
"endpoint": {
"address": {
"socket_address": {
"address": "{{.DiscoveryAddress}}",
"port_value": {{.DiscoveryPort}}
}
}
}
}
]
}
]
}
}
]
},
"dynamic_resources": {
"lds_config": {
"ads": {}
},
"cds_config": {
"ads": {}
},
"ads_config": {
"api_type": "GRPC",
"transport_api_version": "V3",
"grpc_services": [
{
"envoy_grpc": {
"cluster_name": "xds-grpc"
}
}
]
}
}
}
`
// 引导配置生成逻辑
// pilot/cmd/pilot-agent/app/cmd.go:300
func (a *Agent) generateBootstrapConfig() ([]byte, error) {
// 1. 收集模板数据
templateData := &BootstrapTemplateData{
NodeID: a.proxyConfig.ServiceNode,
Cluster: a.proxyConfig.ServiceCluster,
Region: a.region,
Zone: a.zone,
NodeMetadata: a.nodeMetadata,
DiscoveryAddress: a.discoveryAddress,
DiscoveryPort: a.discoveryPort,
}
// 2. 解析和执行模板
tmpl, err := template.New("bootstrap").Parse(EnvoyBootstrapTemplate)
if err != nil {
return nil, fmt.Errorf("failed to parse bootstrap template: %v", err)
}
var buf bytes.Buffer
if err := tmpl.Execute(&buf, templateData); err != nil {
return nil, fmt.Errorf("failed to execute bootstrap template: %v", err)
}
// 3. 验证生成的JSON配置
var config map[string]interface{}
if err := json.Unmarshal(buf.Bytes(), &config); err != nil {
return nil, fmt.Errorf("generated invalid bootstrap config: %v", err)
}
return buf.Bytes(), nil
}
|