@@ -3,6 +3,8 @@ package controllers
33import (
44 "context"
55 "fmt"
6+ //structpb "github.com/golang/protobuf/ptypes/struct"
7+ "google.golang.org/protobuf/types/known/anypb"
68 "google.golang.org/protobuf/types/known/durationpb"
79 "hash/fnv"
810 "strconv"
@@ -13,16 +15,16 @@ import (
1315 envoycorev3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
1416 envoyendpoint "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3"
1517 envoylistener "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3"
16- filev3 "github.com/envoyproxy/go-control-plane/envoy/extensions/access_loggers/file /v3"
18+ streamv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/access_loggers/stream /v3"
1719 aggregatev3 "github.com/envoyproxy/go-control-plane/envoy/extensions/clusters/aggregate/v3"
1820 tcpproxyv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/tcp_proxy/v3"
1921 udpproxyv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/udp/udp_proxy/v3"
20- "github.com/golang/protobuf/ptypes/wrappers"
21- "google.golang.org/protobuf/types/known/wrapperspb"
22-
2322 "github.com/golang/protobuf/jsonpb"
2423 "github.com/golang/protobuf/ptypes"
2524 "github.com/golang/protobuf/ptypes/duration"
25+ "github.com/golang/protobuf/ptypes/wrappers"
26+ "google.golang.org/protobuf/types/known/structpb"
27+ "google.golang.org/protobuf/types/known/wrapperspb"
2628 corev1 "k8s.io/api/core/v1"
2729 apierrs "k8s.io/apimachinery/pkg/api/errors"
2830 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -35,6 +37,34 @@ import (
3537
3638// +kubebuilder:rbac:namespace=egress-operator-system,groups=core,resources=configmaps,verbs=get;list;watch;create;patch
3739
40+ var (
41+ logFields = & structpb.Struct {
42+ Fields : map [string ]* structpb.Value {
43+ "authority" : {Kind : & structpb.Value_StringValue {StringValue : "%REQ(:AUTHORITY)%" }},
44+ "bytes_received" : {Kind : & structpb.Value_StringValue {StringValue : "%BYTES_RECEIVED%" }},
45+ "bytes_sent" : {Kind : & structpb.Value_StringValue {StringValue : "%BYTES_SENT%" }},
46+ "connection_termination_details" : {Kind : & structpb.Value_StringValue {StringValue : "%CONNECTION_TERMINATION_DETAILS%" }},
47+ "downstream_local_address" : {Kind : & structpb.Value_StringValue {StringValue : "%DOWNSTREAM_LOCAL_ADDRESS%" }},
48+ "downstream_remote_address" : {Kind : & structpb.Value_StringValue {StringValue : "%DOWNSTREAM_REMOTE_ADDRESS%" }},
49+ "duration" : {Kind : & structpb.Value_StringValue {StringValue : "%DURATION%" }},
50+ "method" : {Kind : & structpb.Value_StringValue {StringValue : "%REQ(:METHOD)%" }},
51+ "path" : {Kind : & structpb.Value_StringValue {StringValue : "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%" }},
52+ "protocol" : {Kind : & structpb.Value_StringValue {StringValue : "%PROTOCOL%" }},
53+ "requested_server_name" : {Kind : & structpb.Value_StringValue {StringValue : "%REQUESTED_SERVER_NAME%" }},
54+ "response_code" : {Kind : & structpb.Value_StringValue {StringValue : "%RESPONSE_CODE%" }},
55+ "response_code_details" : {Kind : & structpb.Value_StringValue {StringValue : "%RESPONSE_CODE_DETAILS%" }},
56+ "response_flags" : {Kind : & structpb.Value_StringValue {StringValue : "%RESPONSE_FLAGS%" }},
57+ "start_time" : {Kind : & structpb.Value_StringValue {StringValue : "%START_TIME%" }},
58+ "upstream_cluster" : {Kind : & structpb.Value_StringValue {StringValue : "%UPSTREAM_CLUSTER%" }},
59+ "upstream_host" : {Kind : & structpb.Value_StringValue {StringValue : "%UPSTREAM_HOST%" }},
60+ "upstream_local_address" : {Kind : & structpb.Value_StringValue {StringValue : "%UPSTREAM_LOCAL_ADDRESS%" }},
61+ "upstream_service_time" : {Kind : & structpb.Value_StringValue {StringValue : "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%" }},
62+ "upstream_transport_failure_reason" : {Kind : & structpb.Value_StringValue {StringValue : "%UPSTREAM_TRANSPORT_FAILURE_REASON%" }},
63+ "user_agent" : {Kind : & structpb.Value_StringValue {StringValue : "%REQ(USER-AGENT)%" }},
64+ },
65+ }
66+ )
67+
3868func (r * ExternalServiceReconciler ) reconcileConfigMap (ctx context.Context , req ctrl.Request , es * egressv1.ExternalService , desired * corev1.ConfigMap ) error {
3969 if err := ctrl .SetControllerReference (es , desired , r .Scheme ); err != nil {
4070 return err
@@ -86,9 +116,6 @@ func adminPort(es *egressv1.ExternalService) int32 {
86116 panic ("couldn't find a port for admin listener" )
87117}
88118
89- const accessLogFormat = `[%START_TIME%] %BYTES_RECEIVED% %BYTES_SENT% %DURATION% "%DOWNSTREAM_REMOTE_ADDRESS%" "%UPSTREAM_HOST%" "%UPSTREAM_CLUSTER%"
90- `
91-
92119func envoyConfig (es * egressv1.ExternalService ) (string , error ) {
93120 config := bootstrap.Bootstrap {
94121 Node : & envoycorev3.Node {
@@ -197,16 +224,21 @@ func envoyConfig(es *egressv1.ExternalService) (string, error) {
197224 var listener * envoylistener.Listener
198225 switch protocol {
199226 case envoycorev3 .SocketAddress_TCP :
200- accessConfig , err := ptypes .MarshalAny (& filev3.FileAccessLog {
201- AccessLogFormat : & filev3.FileAccessLog_Format {
202- Format : accessLogFormat ,
227+ accessConfig , err := anypb .New (& streamv3.StdoutAccessLog {
228+ AccessLogFormat : & streamv3.StdoutAccessLog_LogFormat {
229+ LogFormat : & envoycorev3.SubstitutionFormatString {
230+ Format : & envoycorev3.SubstitutionFormatString_JsonFormat {
231+ JsonFormat : logFields ,
232+ },
233+ OmitEmptyValues : true ,
234+ ContentType : "application/json; charset=UTF-8" ,
235+ JsonFormatOptions : nil ,
236+ },
203237 },
204- Path : "/dev/stdout" ,
205238 })
206-
207- filterConfig , err := ptypes .MarshalAny (& tcpproxyv3.TcpProxy {
239+ filterConfig , err := anypb .New (& tcpproxyv3.TcpProxy {
208240 AccessLog : []* accesslogfilterv3.AccessLog {{
209- Name : "envoy.file_access_log " ,
241+ Name : "envoy.stdout_access_log " ,
210242 ConfigType : & accesslogfilterv3.AccessLog_TypedConfig {TypedConfig : accessConfig },
211243 }},
212244 StatPrefix : "tcp_proxy" ,
@@ -236,7 +268,7 @@ func envoyConfig(es *egressv1.ExternalService) (string, error) {
236268 }}}}},
237269 }
238270 case envoycorev3 .SocketAddress_UDP :
239- filterConfig , err := ptypes . MarshalAny (& udpproxyv3.UdpProxyConfig {
271+ filterConfig , err := anypb . New (& udpproxyv3.UdpProxyConfig {
240272 StatPrefix : "udp_proxy" ,
241273 RouteSpecifier : & udpproxyv3.UdpProxyConfig_Cluster {
242274 Cluster : name ,
0 commit comments