Skip to content

Commit 6419f0a

Browse files
committed
Merge remote-tracking branch 'origin/release-v2-dev' into opensource
Signed-off-by: ashing <[email protected]>
2 parents 5d39e2d + ecebace commit 6419f0a

File tree

8 files changed

+233
-87
lines changed

8 files changed

+233
-87
lines changed

charts/templates/cluster_role.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,20 @@ rules:
170170
- get
171171
- list
172172
- watch
173+
- apiGroups:
174+
- gateway.networking.k8s.io
175+
resources:
176+
- referencegrants
177+
verbs:
178+
- get
179+
- list
180+
- watch
181+
- apiGroups:
182+
- gateway.networking.k8s.io
183+
resources:
184+
- referencegrants/status
185+
verbs:
186+
- get
173187
- apiGroups:
174188
- networking.k8s.io
175189
resources:

charts/templates/configmap.yaml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ metadata:
55
namespace: {{ .Release.Namespace }}
66
data:
77
config.yaml: |
8-
cert_file: {{ .Values.config.certFile | default "" }}
9-
10-
key_file: {{ .Values.config.keyFile | default "" }}
11-
128
log_level: {{ .Values.config.logLevel | default "info" }}
139
1410
controller_name: {{ .Values.config.controllerName | default "apisix.apache.org/apisix-ingress-controller" }}
@@ -34,3 +30,8 @@ data:
3430
secure_metrics: {{ .Values.config.secureMetrics | default "" }}
3531
3632
exec_adc_timeout: {{ .Values.config.execADCTimeout | default "15s" }}
33+
34+
provider:
35+
sync_period: {{ .Values.config.provider.syncPeriod | default "0s" }}
36+
37+
init_sync_delay: {{ .Values.config.provider.initSyncDelay | default "20m" }}

charts/values.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ deployment:
3838
tag: "dev"
3939

4040
config:
41-
certFile: ""
42-
keyFile: ""
4341
logLevel: "info"
4442
controllerName: apisix.apache.org/apisix-ingress-controller
4543
leaderElection:
@@ -53,3 +51,6 @@ config:
5351
probeAddr: ":8081"
5452
secureMetrics: ""
5553
execADCTimeout: "15s"
54+
provider:
55+
syncPeriod: "0s"
56+
initSyncDelay: "20m"

config/samples/config.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ leader_election:
1616
# will wait between tries of actions with the controller.
1717
disable: false # Whether to disable leader election.
1818

19+
metrics_addr: ":8080" # The address the metrics endpoint binds to.
20+
# The default value is ":8080".
21+
22+
enable_http2: false # Whether to enable HTTP/2 for the server.
23+
# The default value is false.
24+
25+
probe_addr: ":8081" # The address the probe endpoint binds to.
26+
# The default value is ":8081".
27+
28+
secure_metrics: "" # The secure metrics configuration.
29+
# The default value is "" (empty).
30+
1931
exec_adc_timeout: 15s # The timeout for the ADC to execute.
2032
# The default value is 15 seconds.
2133

internal/controller/config/types.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ const (
3636
// Config contains all config items which are necessary for
3737
// apisix-ingress-controller's running.
3838
type Config struct {
39-
CertFilePath string `json:"cert_file" yaml:"cert_file"`
40-
KeyFilePath string `json:"key_file" yaml:"key_file"`
4139
LogLevel string `json:"log_level" yaml:"log_level"`
4240
ControllerName string `json:"controller_name" yaml:"controller_name"`
4341
LeaderElectionID string `json:"leader_election_id" yaml:"leader_election_id"`

internal/controller/gateway_controller.go

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ import (
2727
ctrl "sigs.k8s.io/controller-runtime"
2828
"sigs.k8s.io/controller-runtime/pkg/builder"
2929
"sigs.k8s.io/controller-runtime/pkg/client"
30+
"sigs.k8s.io/controller-runtime/pkg/event"
3031
"sigs.k8s.io/controller-runtime/pkg/handler"
3132
"sigs.k8s.io/controller-runtime/pkg/predicate"
3233
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3334
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
35+
"sigs.k8s.io/gateway-api/apis/v1beta1"
3436

3537
"github.com/apache/apisix-ingress-controller/api/v1alpha1"
3638
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
@@ -83,6 +85,23 @@ func (r *GatewayReconciler) SetupWithManager(mgr ctrl.Manager) error {
8385
&corev1.Secret{},
8486
handler.EnqueueRequestsFromMapFunc(r.listGatewaysForSecret),
8587
).
88+
Watches(&v1beta1.ReferenceGrant{},
89+
handler.EnqueueRequestsFromMapFunc(r.listReferenceGrantsForGateway),
90+
builder.WithPredicates(predicate.Funcs{
91+
CreateFunc: func(e event.CreateEvent) bool {
92+
return referenceGrantHasGatewayFrom(e.Object)
93+
},
94+
UpdateFunc: func(e event.UpdateEvent) bool {
95+
return referenceGrantHasGatewayFrom(e.ObjectOld) || referenceGrantHasGatewayFrom(e.ObjectNew)
96+
},
97+
DeleteFunc: func(e event.DeleteEvent) bool {
98+
return referenceGrantHasGatewayFrom(e.Object)
99+
},
100+
GenericFunc: func(e event.GenericEvent) bool {
101+
return referenceGrantHasGatewayFrom(e.Object)
102+
},
103+
}),
104+
).
86105
Complete(r)
87106
}
88107

@@ -117,7 +136,7 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
117136
msg: acceptedMessage("gateway"),
118137
}
119138

120-
// create a translate context
139+
// create a translation context
121140
tctx := provider.NewDefaultTranslateContext(ctx)
122141

123142
r.processListenerConfig(tctx, gateway)
@@ -164,20 +183,25 @@ func (r *GatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
164183
}
165184
}
166185

167-
ListenerStatuses, err := getListenerStatus(ctx, r.Client, gateway)
186+
var referenceGrantList v1beta1.ReferenceGrantList
187+
if err := r.List(ctx, &referenceGrantList); err != nil {
188+
r.Log.Error(err, "failed to list reference grants")
189+
return ctrl.Result{}, err
190+
}
191+
listenerStatuses, err := getListenerStatus(ctx, r.Client, gateway, referenceGrantList.Items)
168192
if err != nil {
169-
log.Error(err, "failed to get listener status", "gateway", gateway.GetName())
193+
r.Log.Error(err, "failed to get listener status", "gateway", types.NamespacedName{Namespace: gateway.GetNamespace(), Name: gateway.GetName()})
170194
return ctrl.Result{}, err
171195
}
172196

173197
accepted := SetGatewayConditionAccepted(gateway, acceptStatus.status, acceptStatus.msg)
174-
Programmed := SetGatewayConditionProgrammed(gateway, conditionProgrammedStatus, conditionProgrammedMsg)
175-
if accepted || Programmed || len(addrs) > 0 || len(ListenerStatuses) > 0 {
198+
programmed := SetGatewayConditionProgrammed(gateway, conditionProgrammedStatus, conditionProgrammedMsg)
199+
if accepted || programmed || len(addrs) > 0 || len(listenerStatuses) > 0 {
176200
if len(addrs) > 0 {
177201
gateway.Status.Addresses = addrs
178202
}
179-
if len(ListenerStatuses) > 0 {
180-
gateway.Status.Listeners = ListenerStatuses
203+
if len(listenerStatuses) > 0 {
204+
gateway.Status.Listeners = listenerStatuses
181205
}
182206

183207
return ctrl.Result{}, r.Status().Update(ctx, gateway)
@@ -348,6 +372,56 @@ func (r *GatewayReconciler) listGatewaysForSecret(ctx context.Context, obj clien
348372
return requests
349373
}
350374

375+
func (r *GatewayReconciler) listReferenceGrantsForGateway(ctx context.Context, obj client.Object) (requests []reconcile.Request) {
376+
grant, ok := obj.(*v1beta1.ReferenceGrant)
377+
if !ok {
378+
r.Log.Error(
379+
errors.New("unexpected object type"),
380+
"ReferenceGrant watch predicate received unexpected object type",
381+
"expected", FullTypeName(new(v1beta1.ReferenceGrant)), "found", FullTypeName(obj),
382+
)
383+
return nil
384+
}
385+
386+
var gatewayList gatewayv1.GatewayList
387+
if err := r.List(ctx, &gatewayList); err != nil {
388+
r.Log.Error(err, "failed to list gateways in watch predicate", "ReferenceGrant", grant.GetName())
389+
return nil
390+
}
391+
392+
for _, gateway := range gatewayList.Items {
393+
for _, from := range grant.Spec.From {
394+
gw := v1beta1.ReferenceGrantFrom{
395+
Group: gatewayv1.GroupName,
396+
Kind: KindGateway,
397+
Namespace: v1beta1.Namespace(gateway.GetNamespace()),
398+
}
399+
if from == gw {
400+
requests = append(requests, reconcile.Request{
401+
NamespacedName: types.NamespacedName{
402+
Namespace: gateway.GetNamespace(),
403+
Name: gateway.GetName(),
404+
},
405+
})
406+
}
407+
}
408+
}
409+
return requests
410+
}
411+
412+
func referenceGrantHasGatewayFrom(obj client.Object) bool {
413+
grant, ok := obj.(*v1beta1.ReferenceGrant)
414+
if !ok {
415+
return false
416+
}
417+
for _, from := range grant.Spec.From {
418+
if from.Kind == KindGateway && string(from.Group) == gatewayv1.GroupName {
419+
return true
420+
}
421+
}
422+
return false
423+
}
424+
351425
func (r *GatewayReconciler) processInfrastructure(tctx *provider.TranslateContext, gateway *gatewayv1.Gateway) error {
352426
rk := provider.ResourceKind{
353427
Kind: gateway.Kind,

0 commit comments

Comments
 (0)