@@ -33,6 +33,7 @@ import (
3333 "github.com/samber/lo"
3434 "go.uber.org/zap"
3535 corev1 "k8s.io/api/core/v1"
36+ discoveryv1 "k8s.io/api/discovery/v1"
3637 networkingv1 "k8s.io/api/networking/v1"
3738 "k8s.io/apimachinery/pkg/api/meta"
3839 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -921,34 +922,44 @@ func ProcessGatewayProxy(r client.Client, tctx *provider.TranslateContext, gatew
921922 tctx .ResourceParentRefs [rk ] = append (tctx .ResourceParentRefs [rk ], gatewayKind )
922923
923924 // Process provider secrets if provider exists
924- if gatewayProxy .Spec .Provider != nil && gatewayProxy . Spec . Provider .Type == v1alpha1 .ProviderTypeControlPlane {
925- if gatewayProxy . Spec . Provider . ControlPlane != nil &&
926- gatewayProxy . Spec . Provider . ControlPlane .Auth .Type == v1alpha1 .AuthTypeAdminKey &&
927- gatewayProxy . Spec . Provider . ControlPlane .Auth .AdminKey != nil &&
928- gatewayProxy . Spec . Provider . ControlPlane .Auth .AdminKey .ValueFrom != nil &&
929- gatewayProxy . Spec . Provider . ControlPlane .Auth .AdminKey .ValueFrom .SecretKeyRef != nil {
930-
931- secretRef := gatewayProxy . Spec . Provider . ControlPlane .Auth .AdminKey .ValueFrom .SecretKeyRef
932- secret := & corev1.Secret {}
933- if err := r .Get (context .Background (), client.ObjectKey {
934- Namespace : ns ,
935- Name : secretRef .Name ,
936- }, secret ); err != nil {
937- log .Error (err , "failed to get secret for GatewayProxy provider" ,
938- "namespace" , ns ,
939- "name" , secretRef .Name )
940- return err
941- }
925+ if prov := gatewayProxy .Spec .Provider ; prov != nil && prov .Type == v1alpha1 .ProviderTypeControlPlane {
926+ if cp := prov . ControlPlane ; cp != nil {
927+ if cp .Auth .Type == v1alpha1 .AuthTypeAdminKey &&
928+ cp .Auth .AdminKey != nil &&
929+ cp .Auth .AdminKey .ValueFrom != nil &&
930+ cp .Auth .AdminKey .ValueFrom .SecretKeyRef != nil {
931+
932+ secretRef := cp .Auth .AdminKey .ValueFrom .SecretKeyRef
933+ secret := & corev1.Secret {}
934+ if err := r .Get (context .Background (), client.ObjectKey {
935+ Namespace : ns ,
936+ Name : secretRef .Name ,
937+ }, secret ); err != nil {
938+ log .Error (err , "failed to get secret for GatewayProxy provider" ,
939+ "namespace" , ns ,
940+ "name" , secretRef .Name )
941+ return err
942+ }
942943
943- log .Info ("found secret for GatewayProxy provider" ,
944- "gateway" , gateway .Name ,
945- "gatewayproxy" , gatewayProxy .Name ,
946- "secret" , secretRef .Name )
944+ log .Info ("found secret for GatewayProxy provider" ,
945+ "gateway" , gateway .Name ,
946+ "gatewayproxy" , gatewayProxy .Name ,
947+ "secret" , secretRef .Name )
947948
948- tctx .Secrets [k8stypes.NamespacedName {
949- Namespace : ns ,
950- Name : secretRef .Name ,
951- }] = secret
949+ tctx .Secrets [k8stypes.NamespacedName {
950+ Namespace : ns ,
951+ Name : secretRef .Name ,
952+ }] = secret
953+ }
954+
955+ if cp .Service != nil {
956+ if err := addProviderEndpointsToTranslateContext (tctx , r , k8stypes.NamespacedName {
957+ Namespace : gatewayProxy .GetNamespace (),
958+ Name : cp .Service .Name ,
959+ }); err != nil {
960+ return err
961+ }
962+ }
952963 }
953964 }
954965 }
@@ -1340,33 +1351,45 @@ func ProcessIngressClassParameters(tctx *provider.TranslateContext, c client.Cli
13401351
13411352 // check if the provider field references a secret
13421353 if gatewayProxy .Spec .Provider != nil && gatewayProxy .Spec .Provider .Type == v1alpha1 .ProviderTypeControlPlane {
1343- if gatewayProxy .Spec .Provider .ControlPlane != nil &&
1344- gatewayProxy .Spec .Provider .ControlPlane .Auth .Type == v1alpha1 .AuthTypeAdminKey &&
1345- gatewayProxy .Spec .Provider .ControlPlane .Auth .AdminKey != nil &&
1346- gatewayProxy .Spec .Provider .ControlPlane .Auth .AdminKey .ValueFrom != nil &&
1347- gatewayProxy .Spec .Provider .ControlPlane .Auth .AdminKey .ValueFrom .SecretKeyRef != nil {
1348-
1349- secretRef := gatewayProxy .Spec .Provider .ControlPlane .Auth .AdminKey .ValueFrom .SecretKeyRef
1350- secret := & corev1.Secret {}
1351- if err := c .Get (tctx , client.ObjectKey {
1352- Namespace : ns ,
1353- Name : secretRef .Name ,
1354- }, secret ); err != nil {
1355- log .Error (err , "failed to get secret for GatewayProxy provider" ,
1356- "namespace" , ns ,
1357- "name" , secretRef .Name )
1358- return err
1359- }
1354+ if cp := gatewayProxy .Spec .Provider .ControlPlane ; cp != nil {
1355+ // process control plane provider auth
1356+ if cp .Auth .Type == v1alpha1 .AuthTypeAdminKey &&
1357+ cp .Auth .AdminKey != nil &&
1358+ cp .Auth .AdminKey .ValueFrom != nil &&
1359+ cp .Auth .AdminKey .ValueFrom .SecretKeyRef != nil {
1360+
1361+ secretRef := cp .Auth .AdminKey .ValueFrom .SecretKeyRef
1362+ secret := & corev1.Secret {}
1363+ if err := c .Get (tctx , client.ObjectKey {
1364+ Namespace : ns ,
1365+ Name : secretRef .Name ,
1366+ }, secret ); err != nil {
1367+ log .Error (err , "failed to get secret for GatewayProxy provider" ,
1368+ "namespace" , ns ,
1369+ "name" , secretRef .Name )
1370+ return err
1371+ }
13601372
1361- log .Info ("found secret for GatewayProxy provider" ,
1362- "ingressClass" , ingressClass .Name ,
1363- "gatewayproxy" , gatewayProxy .Name ,
1364- "secret" , secretRef .Name )
1373+ log .Info ("found secret for GatewayProxy provider" ,
1374+ "ingressClass" , ingressClass .Name ,
1375+ "gatewayproxy" , gatewayProxy .Name ,
1376+ "secret" , secretRef .Name )
1377+
1378+ tctx .Secrets [k8stypes.NamespacedName {
1379+ Namespace : ns ,
1380+ Name : secretRef .Name ,
1381+ }] = secret
1382+ }
13651383
1366- tctx .Secrets [k8stypes.NamespacedName {
1367- Namespace : ns ,
1368- Name : secretRef .Name ,
1369- }] = secret
1384+ // process control plane provider service
1385+ if cp .Service != nil {
1386+ if err := addProviderEndpointsToTranslateContext (tctx , c , client.ObjectKey {
1387+ Namespace : gatewayProxy .GetNamespace (),
1388+ Name : cp .Service .Name ,
1389+ }); err != nil {
1390+ return err
1391+ }
1392+ }
13701393 }
13711394 }
13721395 }
@@ -1420,3 +1443,31 @@ func distinctRequests(requests []reconcile.Request) []reconcile.Request {
14201443 }
14211444 return distinctRequests
14221445}
1446+
1447+ func addProviderEndpointsToTranslateContext (tctx * provider.TranslateContext , c client.Client , serviceNN k8stypes.NamespacedName ) error {
1448+ log .Debugf ("to process provider endpints by provider.service: %s" , serviceNN )
1449+ var (
1450+ service corev1.Service
1451+ )
1452+ if err := c .Get (tctx , serviceNN , & service ); err != nil {
1453+ log .Error (err , "failed to get service from GatewayProxy provider" , "key" , serviceNN )
1454+ return err
1455+ }
1456+ tctx .Services [serviceNN ] = & service
1457+
1458+ // get es
1459+ var (
1460+ esList discoveryv1.EndpointSliceList
1461+ )
1462+ if err := c .List (tctx , & esList ,
1463+ client .InNamespace (serviceNN .Namespace ),
1464+ client.MatchingLabels {
1465+ discoveryv1 .LabelServiceName : serviceNN .Name ,
1466+ }); err != nil {
1467+ log .Error (err , "failed to get endpoints for GatewayProxy provider" , "endpoints" , serviceNN )
1468+ return err
1469+ }
1470+ tctx .EndpointSlices [serviceNN ] = esList .Items
1471+
1472+ return nil
1473+ }
0 commit comments