-
Notifications
You must be signed in to change notification settings - Fork 618
Description
What happened:
As we integrate and evolve our implementation to align with the Gateway API's standards, we have encountered a notable scenario that I believe warrants consideration for the broader community and the future direction of GRPCRoute conformance tests.
Background:
In the course of updating our implementation KIC to support the latest iterations of Gateway API, specifically around GRPCRoute, we have observed that the current conformance tests predominantly anticipate unencrypted (plaintext) gRPC traffic.
This observation is based on the default behavior in our own, where the default protocol for GRPCRoute has been set to grpcs to accommodate secure communication practices, which is a deviation from what the current conformance tests seem to expect.
Reference to our implementation details can be found here: KIC GRPCRoute Translation
What you expected to happen:
Given the increasing adoption of TLS/SSL to secure gRPC traffic in production environments, we propose the inclusion of TLS-encrypted test cases within the GRPCRoute conformance testing suite. This addition would not only reflect the real-world usage scenarios more accurately but also encourage implementations to support secure gRPC communication.
How to reproduce it (as minimally and precisely as possible):
- create base resources
- create grpc conformance test resources
- attempt to access API without adding
-insecureor-plaintextvia grpcurl
Anything else we need to know?:
- The gRPC client used in conformance test
gateway-api/conformance/utils/grpc/grpc.go
Lines 144 to 160 in 400e36d
func (c *client) ensureConnection(address string) error { if c.Conn != nil { return nil } var err error dialOpts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())} if c.RequestMetadata != nil && c.RequestMetadata.Authority != "" { dialOpts = append(dialOpts, grpc.WithAuthority(c.RequestMetadata.Authority)) } c.Conn, err = grpc.Dial(address, dialOpts...) if err != nil { c.Conn = nil return err } return nil } - The GRPCRoute GEP-1016 methioned that the H2C (gRPC without TLS Encrypted) is more for testing. The protocol that is not mandatory to use in the standard is grpc or grpcs.
- I noticed that some implementations (e.g. cilium, envoy-gateway) have passed the GRPCRoute conformance test, which is because they default to support H2C.