github.com/cilium/cilium@v1.16.2/operator/pkg/ciliumenvoyconfig/annotations.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package ciliumenvoyconfig
     5  
     6  import (
     7  	"strings"
     8  
     9  	envoy_config_cluster_v3 "github.com/cilium/proxy/go/envoy/config/cluster/v3"
    10  	envoy_config_listener "github.com/cilium/proxy/go/envoy/config/listener/v3"
    11  	envoy_config_route_v3 "github.com/cilium/proxy/go/envoy/config/route/v3"
    12  	http_connection_manager_v3 "github.com/cilium/proxy/go/envoy/extensions/filters/network/http_connection_manager/v3"
    13  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    14  
    15  	"github.com/cilium/cilium/pkg/annotation"
    16  )
    17  
    18  const (
    19  	lbEnabledAnnotation = annotation.ServicePrefix + "/lb-l7"
    20  	lbModeAnnotation    = annotation.ServicePrefix + "/lb-l7-algorithm"
    21  )
    22  
    23  type clusterMutator func(*envoy_config_cluster_v3.Cluster) *envoy_config_cluster_v3.Cluster
    24  
    25  type httpConnectionManagerMutator func(*http_connection_manager_v3.HttpConnectionManager) *http_connection_manager_v3.HttpConnectionManager
    26  
    27  type listenerMutator func(*envoy_config_listener.Listener) *envoy_config_listener.Listener
    28  
    29  type routeMutator func(route *envoy_config_route_v3.Route) *envoy_config_route_v3.Route
    30  
    31  type routeConfigMutator func(*envoy_config_route_v3.RouteConfiguration) *envoy_config_route_v3.RouteConfiguration
    32  
    33  type virtualHostMutator func(*envoy_config_route_v3.VirtualHost) *envoy_config_route_v3.VirtualHost
    34  
    35  // isLBProtocolAnnotationEnabled returns true if the load balancer protocol is enabled
    36  func isLBProtocolAnnotationEnabled(obj metav1.Object) bool {
    37  	return obj.GetAnnotations()[lbEnabledAnnotation] == "enabled"
    38  }
    39  
    40  // getLBProtocolModelAnnotation returns the load balancer mode
    41  func getLBProtocolModelAnnotation(obj metav1.Object) string {
    42  	return obj.GetAnnotations()[lbModeAnnotation]
    43  }
    44  
    45  //
    46  // ClusterMutator functions
    47  //
    48  
    49  // grpcHttpConnectionManagerMutator returns a function that mutates the upgradeConfigs for grpc protocol
    50  func lbModeClusterMutator(obj metav1.Object) clusterMutator {
    51  	return func(cluster *envoy_config_cluster_v3.Cluster) *envoy_config_cluster_v3.Cluster {
    52  		lbMode := getLBProtocolModelAnnotation(obj)
    53  		if lbMode == "" {
    54  			return cluster
    55  		}
    56  
    57  		cluster.LbPolicy = envoy_config_cluster_v3.Cluster_LbPolicy(envoy_config_cluster_v3.Cluster_LbPolicy_value[strings.ToUpper(lbMode)])
    58  		return cluster
    59  	}
    60  }
    61  
    62  //
    63  // HTTPConnectionManagerMutator functions
    64  //
    65  
    66  // grpcHttpConnectionManagerMutator returns a function that mutates the upgradeConfigs for grpc protocol
    67  func grpcHttpConnectionManagerMutator(_ metav1.Object) httpConnectionManagerMutator {
    68  	return func(manager *http_connection_manager_v3.HttpConnectionManager) *http_connection_manager_v3.HttpConnectionManager {
    69  		manager.UpgradeConfigs = []*http_connection_manager_v3.HttpConnectionManager_UpgradeConfig{
    70  			{UpgradeType: "websocket"},
    71  		}
    72  		return manager
    73  	}
    74  }