bc10055edc
The importing peer will need to know what SNI and SPIFFE name corresponds to each exported service. Additionally it will need to know at a high level the protocol in use (L4/L7) to generate the appropriate connection pool and local metrics. For replicated connect synthetic entities we edit the `Connect{}` part of a `NodeService` to have a new section: { "PeerMeta": { "SNI": [ "web.default.default.owt.external.183150d5-1033-3672-c426-c29205a576b8.consul" ], "SpiffeID": [ "spiffe://183150d5-1033-3672-c426-c29205a576b8.consul/ns/default/dc/dc1/svc/web" ], "Protocol": "tcp" } } This data is then replicated and saved as-is at the importing side. Both SNI and SpiffeID are slices for now until I can be sure we don't need them for how mesh gateways will ultimately work.
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package structs
|
|
|
|
// PeeringToken identifies a peer in order for a connection to be established.
|
|
type PeeringToken struct {
|
|
CA []string
|
|
ServerAddresses []string
|
|
ServerName string
|
|
PeerID string
|
|
}
|
|
|
|
// PeeredService is a service that has been configured with an exported-service config entry to be exported to a peer.
|
|
type PeeredService struct {
|
|
Name ServiceName
|
|
PeerName string
|
|
}
|
|
|
|
// NOTE: this is not serialized via msgpack so it can be changed without concern.
|
|
type ExportedServiceList struct {
|
|
// Services is a list of exported services that apply to both standard
|
|
// service discovery and service mesh.
|
|
Services []ServiceName
|
|
|
|
// DiscoChains is a list of exported service that ONLY apply to service mesh.
|
|
DiscoChains []ServiceName
|
|
|
|
// TODO(peering): reduce duplication here in the response
|
|
ConnectProtocol map[ServiceName]string
|
|
}
|
|
|
|
// ListAllDiscoveryChains returns all discovery chains (union of Services and
|
|
// DiscoChains).
|
|
func (list *ExportedServiceList) ListAllDiscoveryChains() map[ServiceName]string {
|
|
chainsByName := make(map[ServiceName]string)
|
|
if list == nil {
|
|
return chainsByName
|
|
}
|
|
|
|
for _, svc := range list.Services {
|
|
chainsByName[svc] = list.ConnectProtocol[svc]
|
|
}
|
|
for _, chainName := range list.DiscoChains {
|
|
chainsByName[chainName] = list.ConnectProtocol[chainName]
|
|
}
|
|
return chainsByName
|
|
}
|