in src/go/configgenerator/filtergen/http_connection_manager.go [209:256]
func IsSchemeHeaderOverrideRequiredForOPConfig(serviceConfig *servicepb.Service, opts options.ConfigGeneratorOptions) (bool, error) {
if opts.ComputePlatformOverride != util.ServerlessPlatform {
glog.Infof("Skip HTTP Conn Manager scheme override because platform is NOT Cloud Run.")
return false, nil
}
isGRPCSupportRequired, err := IsGRPCSupportRequiredForOPConfig(serviceConfig, opts)
if err != nil {
return false, err
}
if !isGRPCSupportRequired {
glog.Infof("Skip HTTP Conn Manager scheme override because there is no gRPC backend.")
return false, nil
}
if opts.EnableBackendAddressOverride {
glog.Warningf("Skip HTTP Conn Manager scheme override because backend address override is enabled.")
return false, nil
}
for _, rule := range serviceConfig.GetBackend().GetRules() {
if util.ShouldSkipOPDiscoveryAPI(rule.GetSelector(), opts.AllowDiscoveryAPIs) {
glog.Warningf("Skip backend rule %q because discovery API is not supported.", rule.GetSelector())
continue
}
if rule.GetAddress() == "" {
glog.Infof("Skip backend rule %q because it does not have dynamic routing address.", rule.GetSelector())
return false, nil
}
scheme, _, _, _, err := util.ParseURI(rule.GetAddress())
if err != nil {
return false, fmt.Errorf("error parsing remote backend rule's address for operation %q, %v", rule.GetSelector(), err)
}
// Create a cluster for the remote backend.
_, useTLS, err := util.ParseBackendProtocol(scheme, rule.GetProtocol())
if err != nil {
return false, fmt.Errorf("error parsing remote backend rule's protocol for operation %q, %v", rule.GetSelector(), err)
}
if useTLS {
glog.Infof("add config to override scheme header as https.")
return true, nil
}
}
return false, nil
}