Skip to content

Commit c540c54

Browse files
orishoshanomris94
andauthored
Add support for detecting AWS ALB ingress resources and auto-allowing traffic (#476)
Co-authored-by: omri.s <[email protected]>
1 parent c548e80 commit c540c54

File tree

13 files changed

+680
-62
lines changed

13 files changed

+680
-62
lines changed

src/operator/controllers/external_traffic/network_policy.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,23 @@ type NetworkPolicyHandler struct {
4242
client client.Client
4343
scheme *runtime.Scheme
4444
injectablerecorder.InjectableRecorder
45-
allowExternalTraffic allowexternaltraffic.Enum
46-
ingressControllerIdentities []serviceidentity.ServiceIdentity
45+
allowExternalTraffic allowexternaltraffic.Enum
46+
ingressControllerIdentities []serviceidentity.ServiceIdentity
47+
ingressControllerALBAllowAll bool
4748
}
4849

4950
func NewNetworkPolicyHandler(
5051
client client.Client,
5152
scheme *runtime.Scheme,
5253
allowExternalTraffic allowexternaltraffic.Enum,
5354
ingressControllerIdentities []serviceidentity.ServiceIdentity,
55+
ingressControllerALBAllowAll bool,
5456
) *NetworkPolicyHandler {
55-
return &NetworkPolicyHandler{client: client, scheme: scheme, allowExternalTraffic: allowExternalTraffic, ingressControllerIdentities: ingressControllerIdentities}
57+
return &NetworkPolicyHandler{client: client, scheme: scheme, allowExternalTraffic: allowExternalTraffic, ingressControllerIdentities: ingressControllerIdentities, ingressControllerALBAllowAll: ingressControllerALBAllowAll}
58+
}
59+
60+
func (r *NetworkPolicyHandler) SetIngressControllerALBAllowAll(ingressControllerALBAllowAll bool) {
61+
r.ingressControllerALBAllowAll = ingressControllerALBAllowAll
5662
}
5763

5864
func (r *NetworkPolicyHandler) createOrUpdateNetworkPolicy(
@@ -129,7 +135,7 @@ func (r *NetworkPolicyHandler) buildNetworkPolicyObjectForEndpoints(
129135

130136
rule := v1.NetworkPolicyIngressRule{}
131137
// Only limit netpol if there is an ingress controller restriction configured AND the service is not directly exposed.
132-
if len(r.ingressControllerIdentities) != 0 && svc.Spec.Type == corev1.ServiceTypeClusterIP {
138+
if len(r.ingressControllerIdentities) != 0 && svc.Spec.Type == corev1.ServiceTypeClusterIP && !(r.ingressControllerALBAllowAll && isIngressListHasInternetFacingAWSALB(ingressList.Items)) {
133139
for _, ingressController := range r.ingressControllerIdentities {
134140
rule.From = append(rule.From, v1.NetworkPolicyPeer{
135141
PodSelector: &metav1.LabelSelector{

src/operator/controllers/external_traffic/network_policy_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type NetworkPolicyHandlerTestSuite struct {
2222

2323
func (s *NetworkPolicyHandlerTestSuite) SetupTest() {
2424
s.MocksSuiteBase.SetupTest()
25-
s.handler = NewNetworkPolicyHandler(s.Client, &runtime.Scheme{}, allowexternaltraffic.IfBlockedByOtterize, make([]serviceidentity.ServiceIdentity, 0))
25+
s.handler = NewNetworkPolicyHandler(s.Client, &runtime.Scheme{}, allowexternaltraffic.IfBlockedByOtterize, make([]serviceidentity.ServiceIdentity, 0), false)
2626
}
2727

2828
func (s *NetworkPolicyHandlerTestSuite) TestNetworkPolicyHandler_HandleBeforeAccessPolicyRemoval_createWhenNoIntentsEnabled_doNothing() {

src/operator/controllers/external_traffic/service_uploader.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,12 @@ func convertToCloudExternalService(svc corev1.Service, identity serviceidentity.
146146

147147
// Remember to update the cache key that determines whether an update is needed.
148148
serviceInput := graphqlclient.ExternallyAccessibleServiceInput{
149-
Namespace: identity.Namespace,
150-
ServerName: identity.Name,
151-
ReferredByIngress: ReferredByIngress,
152-
ServiceType: cloudServiceType,
149+
Namespace: identity.Namespace,
150+
ServerName: identity.Name,
151+
ReferredByIngress: ReferredByIngress,
152+
ServiceType: cloudServiceType,
153+
ServiceName: svc.Name,
154+
HasInternetFacingAWSALBIngress: isIngressListHasInternetFacingAWSALB(referringIngressList.Items),
153155
}
154156
return serviceInput, true, nil
155157
}

src/operator/controllers/external_traffic/service_uploader_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,18 +227,21 @@ func (s *ServiceUploaderTestSuite) TestUploadNamespaceServices() {
227227
{
228228
Namespace: testNamespace,
229229
ServerName: podForServiceWithIngressName,
230+
ServiceName: serviceWithIngressName,
230231
ReferredByIngress: true,
231232
ServiceType: graphqlclient.KubernetesServiceTypeClusterIp,
232233
},
233234
{
234235
Namespace: testNamespace,
235236
ServerName: podForServiceWithNodePortName,
237+
ServiceName: serviceWithNodePortName,
236238
ReferredByIngress: false,
237239
ServiceType: graphqlclient.KubernetesServiceTypeNodePort,
238240
},
239241
{
240242
Namespace: testNamespace,
241243
ServerName: podForServiceWithLoadBalancerName,
244+
ServiceName: serviceWithLoadBalancerName,
242245
ReferredByIngress: false,
243246
ServiceType: graphqlclient.KubernetesServiceTypeLoadBalancer,
244247
},

src/operator/controllers/external_traffic/shared.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package external_traffic
22

33
import (
4+
"github.com/samber/lo"
45
"k8s.io/api/networking/v1"
56
"k8s.io/apimachinery/pkg/util/sets"
67
)
@@ -23,3 +24,18 @@ func serviceNamesFromIngress(ingress *v1.Ingress) sets.Set[string] {
2324

2425
return serviceNames
2526
}
27+
28+
func isIngressListHasInternetFacingAWSALB(ingressList []v1.Ingress) bool {
29+
return lo.SomeBy(ingressList, func(ingress v1.Ingress) bool {
30+
if ingress.Annotations == nil {
31+
return false
32+
}
33+
34+
scheme, ok := ingress.Annotations["alb.ingress.kubernetes.io/scheme"]
35+
if !ok {
36+
return false
37+
}
38+
39+
return scheme == "internet-facing"
40+
})
41+
}

src/operator/controllers/intents_reconcilers/external_traffic_network_policy/external_traffic_network_policy_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func (s *ExternalNetworkPolicyReconcilerTestSuite) SetupTest() {
9292
testName := s.T().Name()
9393
isShadowMode := strings.Contains(testName, "ShadowMode")
9494
defaultActive := !isShadowMode
95-
netpolHandler := external_traffic.NewNetworkPolicyHandler(s.Mgr.GetClient(), s.TestEnv.Scheme, allowexternaltraffic.IfBlockedByOtterize, make([]serviceidentity.ServiceIdentity, 0))
95+
netpolHandler := external_traffic.NewNetworkPolicyHandler(s.Mgr.GetClient(), s.TestEnv.Scheme, allowexternaltraffic.IfBlockedByOtterize, make([]serviceidentity.ServiceIdentity, 0), false)
9696
s.defaultDenyReconciler = protected_service_reconcilers.NewDefaultDenyReconciler(s.Mgr.GetClient(), netpolHandler, true)
9797
netpolReconciler := networkpolicy.NewReconciler(s.Mgr.GetClient(), s.TestEnv.Scheme, netpolHandler, []string{}, goset.NewSet[string](), true, defaultActive, []networkpolicy.IngressRuleBuilder{builders.NewIngressNetpolBuilder(), builders.NewPortNetworkPolicyReconciler(s.Mgr.GetClient())}, nil)
9898
serviceIdResolver := serviceidresolver.NewResolver(s.Mgr.GetClient())
@@ -817,7 +817,7 @@ func (s *ExternalNetworkPolicyReconcilerTestSuite) TestEndpointsReconcilerNetwor
817817

818818
s.AddNodePortService(nodePortServiceName, podIps, podLabels)
819819

820-
netpolHandler := external_traffic.NewNetworkPolicyHandler(s.Mgr.GetClient(), s.TestEnv.Scheme, allowexternaltraffic.Off, make([]serviceidentity.ServiceIdentity, 0))
820+
netpolHandler := external_traffic.NewNetworkPolicyHandler(s.Mgr.GetClient(), s.TestEnv.Scheme, allowexternaltraffic.Off, make([]serviceidentity.ServiceIdentity, 0), false)
821821
endpointReconcilerWithEnforcementDisabled := external_traffic.NewEndpointsReconciler(s.Mgr.GetClient(), netpolHandler)
822822
recorder := record.NewFakeRecorder(10)
823823
endpointReconcilerWithEnforcementDisabled.InjectRecorder(recorder)

src/operator/controllers/intents_reconcilers/external_traffic_network_policy/external_traffic_network_policy_with_ingress_controllers_configured_test.go

Lines changed: 144 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuite st
5858
EffectivePolicyIntentsReconciler *intents_reconcilers.ServiceEffectivePolicyIntentsReconciler
5959
podWatcher *pod_reconcilers.PodWatcher
6060
defaultDenyReconciler *protected_service_reconcilers.DefaultDenyReconciler
61+
netpolHandler *external_traffic.NetworkPolicyHandler
6162
}
6263

6364
func (s *ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuite) SetupSuite() {
@@ -105,7 +106,7 @@ func (s *ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuit
105106
Namespace: ingressControllerNamespace,
106107
Name: ingressControllerName,
107108
},
108-
})
109+
}, false)
109110
s.defaultDenyReconciler = protected_service_reconcilers.NewDefaultDenyReconciler(s.Mgr.GetClient(), netpolHandler, true)
110111
netpolReconciler := networkpolicy.NewReconciler(s.Mgr.GetClient(), s.TestEnv.Scheme, netpolHandler, []string{}, goset.NewSet[string](), true, defaultActive, []networkpolicy.IngressRuleBuilder{builders.NewIngressNetpolBuilder(), builders.NewPortNetworkPolicyReconciler(s.Mgr.GetClient())}, nil)
111112
serviceIdResolver := serviceidresolver.NewResolver(s.Mgr.GetClient())
@@ -123,6 +124,8 @@ func (s *ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuit
123124
s.IngressReconciler.InjectRecorder(recorder)
124125
s.Require().NoError(err)
125126

127+
s.netpolHandler = netpolHandler
128+
126129
controller := gomock.NewController(s.T())
127130
serviceEffectivePolicyReconciler := podreconcilersmocks.NewMockGroupReconciler(controller)
128131
s.podWatcher = pod_reconcilers.NewPodWatcher(s.Mgr.GetClient(), recorder, []string{}, true, true, goset.NewSet[string](), &mocks.MockIntentsReconcilerForTestEnv{}, serviceEffectivePolicyReconciler)
@@ -899,7 +902,7 @@ func (s *ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuit
899902
Name: ingressControllerName,
900903
Kind: "Deployment",
901904
},
902-
})
905+
}, false)
903906
endpointReconcilerWithEnforcementDisabled := external_traffic.NewEndpointsReconciler(s.Mgr.GetClient(), netpolHandler)
904907
recorder := record.NewFakeRecorder(10)
905908
endpointReconcilerWithEnforcementDisabled.InjectRecorder(recorder)
@@ -925,6 +928,145 @@ func (s *ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuit
925928
}
926929
}
927930

931+
func (s *ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuite) TestNetworkPolicyForAWSALBExemption_enabled() {
932+
serviceName := "ingress-service"
933+
ingressName := "test-ingress-alb"
934+
ingressNamespace := s.TestNamespace
935+
s.netpolHandler.SetIngressControllerALBAllowAll(true)
936+
937+
// Add Ingress with the annotation "alb.ingress.kubernetes.io/scheme": "internet-facing"
938+
ingress := s.AddIngressWithAnnotation(ingressName, ingressNamespace, serviceName, map[string]string{
939+
"alb.ingress.kubernetes.io/scheme": "internet-facing",
940+
})
941+
942+
intents, err := s.AddIntents("test-intents", "test-client", "Deployment", []otterizev2alpha1.Target{{
943+
Service: &otterizev2alpha1.ServiceTarget{Name: ingress.Spec.Rules[0].HTTP.Paths[0].Backend.Service.Name},
944+
},
945+
})
946+
s.Require().NoError(err)
947+
948+
_, err = s.EffectivePolicyIntentsReconciler.Reconcile(context.Background(), ctrl.Request{
949+
NamespacedName: types.NamespacedName{
950+
Namespace: intents.Namespace,
951+
Name: intents.Name,
952+
},
953+
})
954+
955+
s.Require().NoError(err)
956+
957+
// Reconcile the ingress
958+
res, err := s.IngressReconciler.Reconcile(context.Background(), ctrl.Request{
959+
NamespacedName: types.NamespacedName{Namespace: ingressNamespace, Name: ingressName},
960+
})
961+
s.Require().NoError(err)
962+
s.Require().Empty(res)
963+
964+
// Verify that the network policy allows all ingress traffic
965+
np := &v1.NetworkPolicy{}
966+
policyName := fmt.Sprintf(external_traffic.OtterizeExternalNetworkPolicyNameTemplate, serviceName)
967+
s.WaitUntilCondition(func(assert *assert.Assertions) {
968+
err := s.Mgr.GetClient().Get(context.Background(), types.NamespacedName{Namespace: ingressNamespace, Name: policyName}, np)
969+
assert.NoError(err)
970+
assert.NotEmpty(np)
971+
assert.Len(np.Spec.Ingress, 1)
972+
if len(np.Spec.Ingress) == 1 {
973+
assert.Len(np.Spec.Ingress[0].From, 0) // Allow all ingress traffic
974+
}
975+
})
976+
}
977+
978+
func (s *ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuite) TestNetworkPolicyForAWSALBExemption_disabled() {
979+
serviceName := "ingress-service"
980+
ingressName := "test-ingress-alb"
981+
ingressNamespace := s.TestNamespace
982+
s.netpolHandler.SetIngressControllerALBAllowAll(false)
983+
984+
// Add Ingress with the annotation "alb.ingress.kubernetes.io/scheme": "internet-facing"
985+
ingress := s.AddIngressWithAnnotation(ingressName, ingressNamespace, serviceName, map[string]string{
986+
"alb.ingress.kubernetes.io/scheme": "internet-facing",
987+
})
988+
989+
intents, err := s.AddIntents("test-intents", "test-client", "Deployment", []otterizev2alpha1.Target{{
990+
Service: &otterizev2alpha1.ServiceTarget{Name: ingress.Spec.Rules[0].HTTP.Paths[0].Backend.Service.Name},
991+
},
992+
})
993+
s.Require().NoError(err)
994+
995+
_, err = s.EffectivePolicyIntentsReconciler.Reconcile(context.Background(), ctrl.Request{
996+
NamespacedName: types.NamespacedName{
997+
Namespace: intents.Namespace,
998+
Name: intents.Name,
999+
},
1000+
})
1001+
1002+
s.Require().NoError(err)
1003+
1004+
// Reconcile the ingress
1005+
res, err := s.IngressReconciler.Reconcile(context.Background(), ctrl.Request{
1006+
NamespacedName: types.NamespacedName{Namespace: ingressNamespace, Name: ingressName},
1007+
})
1008+
s.Require().NoError(err)
1009+
s.Require().Empty(res)
1010+
1011+
// Verify that the network policy allows all ingress traffic
1012+
np := &v1.NetworkPolicy{}
1013+
policyName := fmt.Sprintf(external_traffic.OtterizeExternalNetworkPolicyNameTemplate, serviceName)
1014+
s.WaitUntilCondition(func(assert *assert.Assertions) {
1015+
err := s.Mgr.GetClient().Get(context.Background(), types.NamespacedName{Namespace: ingressNamespace, Name: policyName}, np)
1016+
assert.NoError(err)
1017+
assert.NotEmpty(np)
1018+
assert.Len(np.Spec.Ingress, 1)
1019+
if len(np.Spec.Ingress) == 1 {
1020+
assert.Len(np.Spec.Ingress[0].From, 1) // Only allow traffic from the ingress controller
1021+
}
1022+
})
1023+
}
1024+
1025+
func (s *ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuite) AddIngressWithAnnotation(name, namespace, serviceName string, annotations map[string]string) *v1.Ingress {
1026+
ingress := &v1.Ingress{
1027+
ObjectMeta: metav1.ObjectMeta{
1028+
Name: name,
1029+
Namespace: namespace,
1030+
Annotations: annotations,
1031+
},
1032+
Spec: v1.IngressSpec{
1033+
Rules: []v1.IngressRule{
1034+
{
1035+
Host: "example.com",
1036+
IngressRuleValue: v1.IngressRuleValue{
1037+
HTTP: &v1.HTTPIngressRuleValue{
1038+
Paths: []v1.HTTPIngressPath{
1039+
{
1040+
Path: "/",
1041+
PathType: lo.ToPtr(v1.PathTypePrefix),
1042+
Backend: v1.IngressBackend{
1043+
Service: &v1.IngressServiceBackend{
1044+
Name: serviceName,
1045+
Port: v1.ServiceBackendPort{
1046+
Number: 80,
1047+
},
1048+
},
1049+
},
1050+
},
1051+
},
1052+
},
1053+
},
1054+
},
1055+
},
1056+
},
1057+
}
1058+
s.Require().NoError(s.Mgr.GetClient().Create(context.Background(), ingress))
1059+
s.WaitForObjectToBeCreated(ingress)
1060+
1061+
s.AddDeploymentWithService(serviceName, []string{"3.3.3.3"}, map[string]string{"app": "test"}, nil)
1062+
1063+
// the ingress reconciler expect the pod watcher labels in order to work
1064+
_, err := s.podWatcher.Reconcile(context.Background(), ctrl.Request{NamespacedName: types.NamespacedName{Namespace: s.TestNamespace, Name: serviceName + "-0"}})
1065+
s.Require().NoError(err)
1066+
1067+
return ingress
1068+
}
1069+
9281070
func TestExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuite(t *testing.T) {
9291071
suite.Run(t, new(ExternalNetworkPolicyReconcilerWithIngressControllersConfiguredTestSuite))
9301072
}

src/operator/controllers/intents_reconcilers/external_traffic_network_policy/external_traffic_network_policy_with_no_intents_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func (s *ExternalNetworkPolicyReconcilerWithNoIntentsTestSuite) SetupTest() {
8585
s.Require().NoError((&otterizev2alpha1.ClientIntents{}).SetupWebhookWithManager(s.Mgr, intentsValidator2))
8686

8787
recorder := s.Mgr.GetEventRecorderFor("intents-operator")
88-
netpolHandler := external_traffic.NewNetworkPolicyHandler(s.Mgr.GetClient(), s.TestEnv.Scheme, allowexternaltraffic.Always, make([]serviceidentity.ServiceIdentity, 0))
88+
netpolHandler := external_traffic.NewNetworkPolicyHandler(s.Mgr.GetClient(), s.TestEnv.Scheme, allowexternaltraffic.Always, make([]serviceidentity.ServiceIdentity, 0), false)
8989
netpolReconciler := networkpolicy.NewReconciler(s.Mgr.GetClient(), s.TestEnv.Scheme, netpolHandler, []string{}, goset.NewSet[string](), true, true, []networkpolicy.IngressRuleBuilder{builders.NewIngressNetpolBuilder()}, nil)
9090
serviceIdResolver := serviceidresolver.NewResolver(s.Mgr.GetClient())
9191
groupReconciler := effectivepolicy.NewGroupReconciler(s.Mgr.GetClient(), s.TestEnv.Scheme, serviceIdResolver, netpolReconciler)
@@ -246,7 +246,7 @@ func (s *ExternalNetworkPolicyReconcilerWithNoIntentsTestSuite) TestEndpointsRec
246246

247247
s.AddNodePortService(nodePortServiceName, podIps, podLabels)
248248

249-
netpolHandler := external_traffic.NewNetworkPolicyHandler(s.Mgr.GetClient(), s.TestEnv.Scheme, allowexternaltraffic.Off, make([]serviceidentity.ServiceIdentity, 0))
249+
netpolHandler := external_traffic.NewNetworkPolicyHandler(s.Mgr.GetClient(), s.TestEnv.Scheme, allowexternaltraffic.Off, make([]serviceidentity.ServiceIdentity, 0), false)
250250
endpointReconcilerWithEnforcementDisabled := external_traffic.NewEndpointsReconciler(s.Mgr.GetClient(), netpolHandler)
251251
recorder := record.NewFakeRecorder(10)
252252
endpointReconcilerWithEnforcementDisabled.InjectRecorder(recorder)

src/operator/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ func main() {
197197

198198
kafkaServersStore := kafkaacls.NewServersStore(tlsSource, enforcementConfig.EnableKafkaACL, kafkaacls.NewKafkaIntentsAdmin, enforcementConfig.EnforcementDefaultState)
199199

200-
extNetpolHandler := external_traffic.NewNetworkPolicyHandler(mgr.GetClient(), mgr.GetScheme(), allowExternalTraffic, operatorconfig.GetIngressControllerServiceIdentities())
200+
extNetpolHandler := external_traffic.NewNetworkPolicyHandler(mgr.GetClient(), mgr.GetScheme(), allowExternalTraffic, operatorconfig.GetIngressControllerServiceIdentities(), viper.GetBool(operatorconfig.IngressControllerALBExemptKey))
201201
endpointReconciler := external_traffic.NewEndpointsReconciler(mgr.GetClient(), extNetpolHandler)
202202
ingressRulesBuilder := builders.NewIngressNetpolBuilder()
203203

src/shared/operatorconfig/config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ const (
6161
TelemetryErrorsAPIKeyKey = "telemetry-errors-api-key"
6262
TelemetryErrorsAPIKeyDefault = "60a78208a2b4fe714ef9fb3d3fdc0714"
6363
AWSAccountsKey = "aws"
64+
IngressControllerALBExemptKey = "ingress-controllers-exempt-alb"
65+
IngressControllerALBExemptDefault = false
6466
IngressControllerConfigKey = "ingressControllers"
6567
)
6668

@@ -76,6 +78,7 @@ func init() {
7678
viper.SetDefault(AWSRolesAnywhereCertDirKey, AWSRolesAnywhereCertDirDefault)
7779
viper.SetDefault(AWSRolesAnywherePrivKeyFilenameKey, AWSRolesAnywherePrivKeyFilenameDefault)
7880
viper.SetDefault(AWSRolesAnywhereCertFilenameKey, AWSRolesAnywhereCertFilenameDefault)
81+
viper.SetDefault(IngressControllerALBExemptKey, IngressControllerALBExemptDefault)
7982
viper.SetDefault(KafkaServerTLSCertKey, "")
8083
viper.SetDefault(KafkaServerTLSKeyKey, "")
8184
viper.SetDefault(KafkaServerTLSCAKey, "")

src/shared/otterizecloud/graphqlclient/generated.go

Lines changed: 14 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)