mirror of https://github.com/grpc/grpc-go.git
				
				
				
			xds: Check name of transport socket received in Cluster response. (#3988)
This commit is contained in:
		
							parent
							
								
									89faf1c3e8
								
							
						
					
					
						commit
						c8ef9bc957
					
				| 
						 | 
					@ -201,6 +201,30 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) {
 | 
				
			||||||
		wantUpdate ClusterUpdate
 | 
							wantUpdate ClusterUpdate
 | 
				
			||||||
		wantErr    bool
 | 
							wantErr    bool
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "transport-socket-unsupported-name",
 | 
				
			||||||
 | 
								cluster: &v3clusterpb.Cluster{
 | 
				
			||||||
 | 
									ClusterDiscoveryType: &v3clusterpb.Cluster_Type{Type: v3clusterpb.Cluster_EDS},
 | 
				
			||||||
 | 
									EdsClusterConfig: &v3clusterpb.Cluster_EdsClusterConfig{
 | 
				
			||||||
 | 
										EdsConfig: &v3corepb.ConfigSource{
 | 
				
			||||||
 | 
											ConfigSourceSpecifier: &v3corepb.ConfigSource_Ads{
 | 
				
			||||||
 | 
												Ads: &v3corepb.AggregatedConfigSource{},
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										ServiceName: serviceName,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									LbPolicy: v3clusterpb.Cluster_ROUND_ROBIN,
 | 
				
			||||||
 | 
									TransportSocket: &v3corepb.TransportSocket{
 | 
				
			||||||
 | 
										Name: "unsupported-foo",
 | 
				
			||||||
 | 
										ConfigType: &v3corepb.TransportSocket_TypedConfig{
 | 
				
			||||||
 | 
											TypedConfig: &anypb.Any{
 | 
				
			||||||
 | 
												TypeUrl: version.V3UpstreamTLSContextURL,
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								wantErr: true,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "transport-socket-unsupported-typeURL",
 | 
								name: "transport-socket-unsupported-typeURL",
 | 
				
			||||||
			cluster: &v3clusterpb.Cluster{
 | 
								cluster: &v3clusterpb.Cluster{
 | 
				
			||||||
| 
						 | 
					@ -298,6 +322,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) {
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				LbPolicy: v3clusterpb.Cluster_ROUND_ROBIN,
 | 
									LbPolicy: v3clusterpb.Cluster_ROUND_ROBIN,
 | 
				
			||||||
				TransportSocket: &v3corepb.TransportSocket{
 | 
									TransportSocket: &v3corepb.TransportSocket{
 | 
				
			||||||
 | 
										Name: "envoy.transport_sockets.tls",
 | 
				
			||||||
					ConfigType: &v3corepb.TransportSocket_TypedConfig{
 | 
										ConfigType: &v3corepb.TransportSocket_TypedConfig{
 | 
				
			||||||
						TypedConfig: &anypb.Any{
 | 
											TypedConfig: &anypb.Any{
 | 
				
			||||||
							TypeUrl: version.V3UpstreamTLSContextURL,
 | 
												TypeUrl: version.V3UpstreamTLSContextURL,
 | 
				
			||||||
| 
						 | 
					@ -342,6 +367,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) {
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				LbPolicy: v3clusterpb.Cluster_ROUND_ROBIN,
 | 
									LbPolicy: v3clusterpb.Cluster_ROUND_ROBIN,
 | 
				
			||||||
				TransportSocket: &v3corepb.TransportSocket{
 | 
									TransportSocket: &v3corepb.TransportSocket{
 | 
				
			||||||
 | 
										Name: "envoy.transport_sockets.tls",
 | 
				
			||||||
					ConfigType: &v3corepb.TransportSocket_TypedConfig{
 | 
										ConfigType: &v3corepb.TransportSocket_TypedConfig{
 | 
				
			||||||
						TypedConfig: &anypb.Any{
 | 
											TypedConfig: &anypb.Any{
 | 
				
			||||||
							TypeUrl: version.V3UpstreamTLSContextURL,
 | 
												TypeUrl: version.V3UpstreamTLSContextURL,
 | 
				
			||||||
| 
						 | 
					@ -392,6 +418,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) {
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				LbPolicy: v3clusterpb.Cluster_ROUND_ROBIN,
 | 
									LbPolicy: v3clusterpb.Cluster_ROUND_ROBIN,
 | 
				
			||||||
				TransportSocket: &v3corepb.TransportSocket{
 | 
									TransportSocket: &v3corepb.TransportSocket{
 | 
				
			||||||
 | 
										Name: "envoy.transport_sockets.tls",
 | 
				
			||||||
					ConfigType: &v3corepb.TransportSocket_TypedConfig{
 | 
										ConfigType: &v3corepb.TransportSocket_TypedConfig{
 | 
				
			||||||
						TypedConfig: &anypb.Any{
 | 
											TypedConfig: &anypb.Any{
 | 
				
			||||||
							TypeUrl: version.V3UpstreamTLSContextURL,
 | 
												TypeUrl: version.V3UpstreamTLSContextURL,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -259,6 +259,10 @@ func routesProtoToSlice(routes []*v3routepb.Route, logger *grpclog.PrefixLogger)
 | 
				
			||||||
	return routesRet, nil
 | 
						return routesRet, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TransportSocket proto message has a `name` field which is expected to be set
 | 
				
			||||||
 | 
					// to this value by the management server.
 | 
				
			||||||
 | 
					const transportSocketName = "envoy.transport_sockets.tls"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// UnmarshalCluster processes resources received in an CDS response, validates
 | 
					// UnmarshalCluster processes resources received in an CDS response, validates
 | 
				
			||||||
// them, and transforms them into a native struct which contains only fields we
 | 
					// them, and transforms them into a native struct which contains only fields we
 | 
				
			||||||
// are interested in.
 | 
					// are interested in.
 | 
				
			||||||
| 
						 | 
					@ -322,6 +326,9 @@ func securityConfigFromCluster(cluster *v3clusterpb.Cluster) (*SecurityConfig, e
 | 
				
			||||||
	if ts == nil {
 | 
						if ts == nil {
 | 
				
			||||||
		return nil, nil
 | 
							return nil, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if name := ts.GetName(); name != transportSocketName {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("xds: transport_socket field has unexpected name: %s", name)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	any := ts.GetTypedConfig()
 | 
						any := ts.GetTypedConfig()
 | 
				
			||||||
	if any == nil || any.TypeUrl != version.V3UpstreamTLSContextURL {
 | 
						if any == nil || any.TypeUrl != version.V3UpstreamTLSContextURL {
 | 
				
			||||||
		return nil, fmt.Errorf("xds: transport_socket field has unexpected typeURL: %s", any.TypeUrl)
 | 
							return nil, fmt.Errorf("xds: transport_socket field has unexpected typeURL: %s", any.TypeUrl)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue