Skip to content

Commit 46526c8

Browse files
committed
fix: r
Signed-off-by: ashing <[email protected]>
1 parent a38f729 commit 46526c8

File tree

6 files changed

+45
-121
lines changed

6 files changed

+45
-121
lines changed

internal/controller/config/config.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,17 +163,14 @@ func GatewayNameList() []string {
163163
return gatewayNameList
164164
}
165165

166-
// GetIngressClass 获取 Ingress 类名
167166
func GetIngressClass() string {
168167
return ControllerConfig.IngressClass
169168
}
170169

171-
// GetIngressPublishService 获取 Ingress 发布服务
172170
func GetIngressPublishService() string {
173171
return ControllerConfig.IngressPublishService
174172
}
175173

176-
// GetIngressStatusAddress 获取 Ingress 状态地址
177174
func GetIngressStatusAddress() []string {
178175
return ControllerConfig.IngressStatusAddress
179176
}

internal/controller/indexer/indexer.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ func IngressClassIndexFunc(rawObj client.Object) []string {
116116
}
117117

118118
func IngressServiceIndexFunc(rawObj client.Object) []string {
119-
120119
ingress := rawObj.(*networkingv1.Ingress)
121120
var services []string
122121

@@ -129,18 +128,15 @@ func IngressServiceIndexFunc(rawObj client.Object) []string {
129128
if path.Backend.Service == nil {
130129
continue
131130
}
132-
133131
key := GenIndexKey(ingress.Namespace, path.Backend.Service.Name)
134132
services = append(services, key)
135133
}
136134
}
137-
138135
return services
139136
}
140137

141138
func IngressSecretIndexFunc(rawObj client.Object) []string {
142139
ingress := rawObj.(*networkingv1.Ingress)
143-
144140
secrets := make([]string, 0)
145141

146142
for _, tls := range ingress.Spec.TLS {
@@ -151,7 +147,6 @@ func IngressSecretIndexFunc(rawObj client.Object) []string {
151147
key := GenIndexKey(ingress.Namespace, tls.SecretName)
152148
secrets = append(secrets, key)
153149
}
154-
155150
return secrets
156151
}
157152

internal/controller/ingress_controller.go

Lines changed: 22 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,6 @@ func (r *IngressReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
106106
return ctrl.Result{}, err
107107
}
108108

109-
// process routing rules
110-
if err := r.processRules(tctx, ingress); err != nil {
111-
r.Log.Error(err, "failed to process ingress rules", "ingress", ingress.Name)
112-
return ctrl.Result{}, err
113-
}
114-
115109
// update the ingress resources
116110
if err := r.Provider.Update(ctx, tctx, ingress); err != nil {
117111
r.Log.Error(err, "failed to update ingress resources", "ingress", ingress.Name)
@@ -288,14 +282,6 @@ func (r *IngressReconciler) processTLS(ctx context.Context, tctx *provider.Trans
288282
func (r *IngressReconciler) processBackends(ctx context.Context, tctx *provider.TranslateContext, ingress *networkingv1.Ingress) error {
289283
var terr error
290284

291-
// process the default backend
292-
if ingress.Spec.DefaultBackend != nil && ingress.Spec.DefaultBackend.Service != nil {
293-
service := ingress.Spec.DefaultBackend.Service
294-
if err := r.processBackendService(ctx, tctx, ingress.Namespace, service.Name, service.Port.Number); err != nil {
295-
terr = err
296-
}
297-
}
298-
299285
// process all the backend services in the rules
300286
for _, rule := range ingress.Spec.Rules {
301287
if rule.HTTP == nil {
@@ -308,7 +294,7 @@ func (r *IngressReconciler) processBackends(ctx context.Context, tctx *provider.
308294
}
309295

310296
service := path.Backend.Service
311-
if err := r.processBackendService(ctx, tctx, ingress.Namespace, service.Name, service.Port.Number); err != nil {
297+
if err := r.processBackendService(ctx, tctx, ingress.Namespace, service); err != nil {
312298
terr = err
313299
}
314300
}
@@ -318,28 +304,37 @@ func (r *IngressReconciler) processBackends(ctx context.Context, tctx *provider.
318304
}
319305

320306
// processBackendService process a single backend service
321-
func (r *IngressReconciler) processBackendService(ctx context.Context, tctx *provider.TranslateContext, namespace, name string, port int32) error {
307+
func (r *IngressReconciler) processBackendService(ctx context.Context, tctx *provider.TranslateContext, namespace string, backendService *networkingv1.IngressServiceBackend) error {
322308
// get the service
323309
var service corev1.Service
324310
if err := r.Get(ctx, client.ObjectKey{
325311
Namespace: namespace,
326-
Name: name,
312+
Name: backendService.Name,
327313
}, &service); err != nil {
328-
r.Log.Error(err, "failed to get service", "namespace", namespace, "name", name)
314+
r.Log.Error(err, "failed to get service", "namespace", namespace, "name", backendService.Name)
329315
return err
330316
}
331317

332318
// verify if the port exists
333-
portExists := false
334-
for _, servicePort := range service.Spec.Ports {
335-
if servicePort.Port == port {
336-
portExists = true
337-
break
319+
var portExists bool
320+
if backendService.Port.Number != 0 {
321+
for _, servicePort := range service.Spec.Ports {
322+
if servicePort.Port == backendService.Port.Number {
323+
portExists = true
324+
break
325+
}
326+
}
327+
} else if backendService.Port.Name != "" {
328+
for _, servicePort := range service.Spec.Ports {
329+
if servicePort.Name == backendService.Port.Name {
330+
portExists = true
331+
break
332+
}
338333
}
339334
}
340335

341336
if !portExists {
342-
err := fmt.Errorf("port %d not found in service %s/%s", port, namespace, name)
337+
err := fmt.Errorf("port(name: %s, number: %d) not found in service %s/%s", backendService.Port.Name, backendService.Port.Number, namespace, backendService.Name)
343338
r.Log.Error(err, "service port not found")
344339
return err
345340
}
@@ -349,86 +344,22 @@ func (r *IngressReconciler) processBackendService(ctx context.Context, tctx *pro
349344
if err := r.List(ctx, endpointSliceList,
350345
client.InNamespace(namespace),
351346
client.MatchingLabels{
352-
discoveryv1.LabelServiceName: name,
347+
discoveryv1.LabelServiceName: backendService.Name,
353348
},
354349
); err != nil {
355-
r.Log.Error(err, "failed to list endpoint slices", "namespace", namespace, "name", name)
350+
r.Log.Error(err, "failed to list endpoint slices", "namespace", namespace, "name", backendService.Name)
356351
return err
357352
}
358353

359354
// save the endpoint slices to the translate context
360355
tctx.EndpointSlices[client.ObjectKey{
361356
Namespace: namespace,
362-
Name: name,
357+
Name: backendService.Name,
363358
}] = endpointSliceList.Items
364359

365360
return nil
366361
}
367362

368-
// processRules process the rules of the ingress
369-
func (r *IngressReconciler) processRules(tctx *provider.TranslateContext, ingress *networkingv1.Ingress) error {
370-
var terr error
371-
// convert the IngressRule to the routing rules
372-
for _, rule := range ingress.Spec.Rules {
373-
host := rule.Host
374-
if rule.HTTP == nil {
375-
terr = fmt.Errorf("rule %s has no HTTP section", rule.Host)
376-
continue
377-
}
378-
379-
for _, path := range rule.HTTP.Paths {
380-
// process the path type
381-
pathType := networkingv1.PathTypeImplementationSpecific
382-
if path.PathType != nil {
383-
pathType = *path.PathType
384-
}
385-
386-
// process the path
387-
urlPath := "/"
388-
if path.Path != "" {
389-
urlPath = path.Path
390-
}
391-
392-
// process the backend service
393-
if path.Backend.Service == nil {
394-
terr = fmt.Errorf("rule %s has no backend service", rule.Host)
395-
continue
396-
}
397-
398-
// add the backend service to the translate context
399-
backendRef := &provider.BackendRef{
400-
Namespace: ingress.Namespace,
401-
Name: path.Backend.Service.Name,
402-
Port: path.Backend.Service.Port.Number,
403-
Host: host,
404-
Path: urlPath,
405-
PathType: string(pathType),
406-
}
407-
408-
tctx.IngressBackendRefs = append(tctx.IngressBackendRefs, backendRef)
409-
}
410-
}
411-
412-
// process the default backend
413-
if ingress.Spec.DefaultBackend != nil && ingress.Spec.DefaultBackend.Service != nil {
414-
service := ingress.Spec.DefaultBackend.Service
415-
416-
backendRef := &provider.BackendRef{
417-
Namespace: ingress.Namespace,
418-
Name: service.Name,
419-
Port: service.Port.Number,
420-
Host: "", // the default backend has no host
421-
Path: "/", // the default path
422-
PathType: string(networkingv1.PathTypePrefix),
423-
IsDefault: true,
424-
}
425-
426-
tctx.IngressBackendRefs = append(tctx.IngressBackendRefs, backendRef)
427-
}
428-
429-
return terr
430-
}
431-
432363
// updateStatus update the status of the ingress
433364
func (r *IngressReconciler) updateStatus(ctx context.Context, ingress *networkingv1.Ingress) error {
434365
var loadBalancerStatus networkingv1.IngressLoadBalancerStatus

internal/provider/adc/adc.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"go.uber.org/zap"
1212
"gopkg.in/yaml.v3"
13+
networkingv1 "k8s.io/api/networking/v1"
1314
"sigs.k8s.io/controller-runtime/pkg/client"
1415
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
1516

@@ -60,6 +61,9 @@ func (d *adcClient) Update(ctx context.Context, tctx *provider.TranslateContext,
6061
case *gatewayv1.Gateway:
6162
result, err = d.translator.TranslateGateway(tctx, t.DeepCopy())
6263
resourceTypes = append(resourceTypes, "global_rule", "ssl", "plugin_metadata")
64+
case *networkingv1.Ingress:
65+
result, err = d.translator.TranslateIngress(tctx, t.DeepCopy())
66+
resourceTypes = append(resourceTypes, "service", "ssl")
6367
}
6468
if err != nil {
6569
return err
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package translator
2+
3+
import (
4+
"github.com/api7/api7-ingress-controller/internal/provider"
5+
networkingv1 "k8s.io/api/networking/v1"
6+
)
7+
8+
func (t *Translator) TranslateIngress(tctx *provider.TranslateContext, obj *networkingv1.Ingress) (*TranslateResult, error) {
9+
return nil, nil
10+
}

internal/provider/provider.go

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,32 +17,19 @@ type Provider interface {
1717
Delete(context.Context, client.Object) error
1818
}
1919

20-
// BackendRef represents the backend reference of the ingress
21-
type BackendRef struct {
22-
Namespace string
23-
Name string
24-
Port int32
25-
Host string
26-
Path string
27-
PathType string
28-
IsDefault bool
29-
}
30-
3120
type TranslateContext struct {
32-
BackendRefs []gatewayv1.BackendRef
33-
GatewayTLSConfig []gatewayv1.GatewayTLSConfig
34-
GatewayProxy *v1alpha1.GatewayProxy
35-
EndpointSlices map[types.NamespacedName][]discoveryv1.EndpointSlice
36-
Secrets map[types.NamespacedName]*corev1.Secret
37-
PluginConfigs map[types.NamespacedName]*v1alpha1.PluginConfig
38-
IngressBackendRefs []*BackendRef
21+
BackendRefs []gatewayv1.BackendRef
22+
GatewayTLSConfig []gatewayv1.GatewayTLSConfig
23+
GatewayProxy *v1alpha1.GatewayProxy
24+
EndpointSlices map[types.NamespacedName][]discoveryv1.EndpointSlice
25+
Secrets map[types.NamespacedName]*corev1.Secret
26+
PluginConfigs map[types.NamespacedName]*v1alpha1.PluginConfig
3927
}
4028

4129
func NewDefaultTranslateContext() *TranslateContext {
4230
return &TranslateContext{
43-
EndpointSlices: make(map[types.NamespacedName][]discoveryv1.EndpointSlice),
44-
Secrets: make(map[types.NamespacedName]*corev1.Secret),
45-
PluginConfigs: make(map[types.NamespacedName]*v1alpha1.PluginConfig),
46-
IngressBackendRefs: make([]*BackendRef, 0),
31+
EndpointSlices: make(map[types.NamespacedName][]discoveryv1.EndpointSlice),
32+
Secrets: make(map[types.NamespacedName]*corev1.Secret),
33+
PluginConfigs: make(map[types.NamespacedName]*v1alpha1.PluginConfig),
4734
}
4835
}

0 commit comments

Comments
 (0)