in pkg/mesh/grpc_bootstrap.go [149:197]
func GenerateBootstrap(opts GenerateBootstrapOptions, meta map[string]string) (*Bootstrap, error) {
xdsMeta, err := extractMeta(meta)
if err != nil {
return nil, fmt.Errorf("failed extracting xds metadata: %v", err)
}
// TODO direct to CP should use secure channel (most likely JWT + TLS, but possibly allow mTLS)
serverURI := opts.DiscoveryAddress
if opts.XdsUdsPath != "" {
serverURI = fmt.Sprintf("unix:///%s", opts.XdsUdsPath)
}
bootstrap := Bootstrap{
XDSServers: []XdsServer{{
ServerURI: serverURI,
// connect locally via agent
ChannelCreds: []ChannelCreds{{Type: "insecure"}},
ServerFeatures: []string{"xds_v3"},
}},
Node: &Node{
Id: opts.Node.Id,
Locality: opts.Node.Locality,
Metadata: xdsMeta,
},
ServerListenerNameTemplate: ServerListenerNameTemplate,
}
if opts.CertDir != "" {
// TODO use a more appropriate interval
refresh, err := protojson.Marshal(durationpb.New(15 * time.Minute))
if err != nil {
return nil, err
}
bootstrap.CertProviders = map[string]CertificateProvider{
"default": {
PluginName: "file_watcher",
Config: FileWatcherCertProviderConfig{
PrivateKeyFile: path.Join(opts.CertDir, "key.pem"),
CertificateFile: path.Join(opts.CertDir, "cert-chain.pem"),
CACertificateFile: path.Join(opts.CertDir, "root-cert.pem"),
RefreshDuration: refresh,
},
},
}
}
return &bootstrap, err
}