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 }