Skip to content

Commit aa5e297

Browse files
committed
Merge branch 'main' of github.com:oracle/oci-native-ingress-controller into dependabot/go_modules/golang.org/x/net-0.17.0
2 parents c5ce8ee + 1eded64 commit aa5e297

File tree

17 files changed

+288
-56
lines changed

17 files changed

+288
-56
lines changed

GettingStarted.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ This section describes steps to deploy and test OCI-Native-Ingress-Controller.
4646
### Prerequisites
4747
Kubernetes Cluster with Native Pod Networking setup.
4848
Currently supported kubernetes versions are:
49-
- 1.26
5049
- 1.27
5150
- 1.28
51+
- 1.29
5252

5353
We set up the cluster with native pod networking and update the security rules.
5454
The documentation for NPN : [Doc Ref](https://docs.oracle.com/en-us/iaas/Content/ContEng/Concepts/contengpodnetworking_topic-OCI_CNI_plugin.htm).
@@ -135,8 +135,8 @@ Allow <subject> to manage certificate-associations in compartment <compartment-i
135135
Allow <subject> to read certificate-authorities in compartment <compartment-id>
136136
Allow <subject> to manage certificate-authority-associations in compartment <compartment-id>
137137
Allow <subject> to read certificate-authority-bundles in compartment <compartment-id>
138-
ALLOW <subject> native-ingress-controller to read public-ips in tenancy
139-
ALLOW <subject> native-ingress-controller to manage floating-ips in tenancy
138+
ALLOW <subject> to read public-ips in tenancy
139+
ALLOW <subject> to manage floating-ips in tenancy
140140
Allow <subject> to manage waf-family in compartment <compartment-id>
141141
Allow <subject> to read cluster-family in compartment <compartment-id>
142142

deploy/manifests/oci-native-ingress-controller/templates/deployment.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ metadata:
1818
name: oci-native-ingress-controller
1919
namespace: native-ingress-controller-system
2020
labels:
21-
helm.sh/chart: oci-native-ingress-controller-1.3.0
21+
helm.sh/chart: oci-native-ingress-controller-1.3.3
2222
app.kubernetes.io/name: oci-native-ingress-controller
2323
app.kubernetes.io/instance: oci-native-ingress-controller
24-
app.kubernetes.io/version: "1.3.0"
24+
app.kubernetes.io/version: "1.3.3"
2525
app.kubernetes.io/managed-by: Helm
2626
spec:
2727
replicas: 1
@@ -51,7 +51,7 @@ spec:
5151
readOnlyRootFilesystem: true
5252
runAsNonRoot: true
5353
runAsUser: 1000
54-
image: "ghcr.io/oracle/oci-native-ingress-controller:v1.3.0"
54+
image: "ghcr.io/oracle/oci-native-ingress-controller:v1.3.3"
5555
imagePullPolicy: Always
5656
args:
5757
- --lease-lock-name=oci-native-ingress-controller

deploy/manifests/oci-native-ingress-controller/templates/rbac.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ kind: ClusterRole
1111
metadata:
1212
name: oci-native-ingress-controller-role
1313
labels:
14-
helm.sh/chart: oci-native-ingress-controller-1.3.0
14+
helm.sh/chart: oci-native-ingress-controller-1.3.3
1515
app.kubernetes.io/name: oci-native-ingress-controller
1616
app.kubernetes.io/instance: oci-native-ingress-controller
17-
app.kubernetes.io/version: "1.3.0"
17+
app.kubernetes.io/version: "1.3.3"
1818
app.kubernetes.io/managed-by: Helm
1919
rules:
2020
- apiGroups: [""]
@@ -48,10 +48,10 @@ kind: ClusterRoleBinding
4848
metadata:
4949
name: oci-native-ingress-controller-rolebinding
5050
labels:
51-
helm.sh/chart: oci-native-ingress-controller-1.3.0
51+
helm.sh/chart: oci-native-ingress-controller-1.3.3
5252
app.kubernetes.io/name: oci-native-ingress-controller
5353
app.kubernetes.io/instance: oci-native-ingress-controller
54-
app.kubernetes.io/version: "1.3.0"
54+
app.kubernetes.io/version: "1.3.3"
5555
app.kubernetes.io/managed-by: Helm
5656
roleRef:
5757
apiGroup: rbac.authorization.k8s.io
@@ -69,10 +69,10 @@ metadata:
6969
name: oci-native-ingress-controller-leader-election-role
7070
namespace: native-ingress-controller-system
7171
labels:
72-
helm.sh/chart: oci-native-ingress-controller-1.3.0
72+
helm.sh/chart: oci-native-ingress-controller-1.3.3
7373
app.kubernetes.io/name: oci-native-ingress-controller
7474
app.kubernetes.io/instance: oci-native-ingress-controller
75-
app.kubernetes.io/version: "1.3.0"
75+
app.kubernetes.io/version: "1.3.3"
7676
app.kubernetes.io/managed-by: Helm
7777
rules:
7878
- apiGroups: ["coordination.k8s.io"]
@@ -90,10 +90,10 @@ metadata:
9090
name: oci-native-ingress-controller-leader-election-rolebinding
9191
namespace: native-ingress-controller-system
9292
labels:
93-
helm.sh/chart: oci-native-ingress-controller-1.3.0
93+
helm.sh/chart: oci-native-ingress-controller-1.3.3
9494
app.kubernetes.io/name: oci-native-ingress-controller
9595
app.kubernetes.io/instance: oci-native-ingress-controller
96-
app.kubernetes.io/version: "1.3.0"
96+
app.kubernetes.io/version: "1.3.3"
9797
app.kubernetes.io/managed-by: Helm
9898
roleRef:
9999
apiGroup: rbac.authorization.k8s.io

deploy/manifests/oci-native-ingress-controller/templates/service.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ metadata:
1212
name: oci-native-ingress-controller
1313
namespace: native-ingress-controller-system
1414
labels:
15-
helm.sh/chart: oci-native-ingress-controller-1.3.0
15+
helm.sh/chart: oci-native-ingress-controller-1.3.3
1616
app.kubernetes.io/name: oci-native-ingress-controller
1717
app.kubernetes.io/instance: oci-native-ingress-controller
18-
app.kubernetes.io/version: "1.3.0"
18+
app.kubernetes.io/version: "1.3.3"
1919
app.kubernetes.io/managed-by: Helm
2020
spec:
2121
type: ClusterIP

deploy/manifests/oci-native-ingress-controller/templates/serviceaccount.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ metadata:
1212
name: oci-native-ingress-controller
1313
namespace: native-ingress-controller-system
1414
labels:
15-
helm.sh/chart: oci-native-ingress-controller-1.3.0
15+
helm.sh/chart: oci-native-ingress-controller-1.3.3
1616
app.kubernetes.io/name: oci-native-ingress-controller
1717
app.kubernetes.io/instance: oci-native-ingress-controller
18-
app.kubernetes.io/version: "1.3.0"
18+
app.kubernetes.io/version: "1.3.3"
1919
app.kubernetes.io/managed-by: Helm

deploy/manifests/oci-native-ingress-controller/templates/webhook.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ kind: MutatingWebhookConfiguration
3636
metadata:
3737
name: oci-native-ingress-controller-webhook
3838
labels:
39-
helm.sh/chart: oci-native-ingress-controller-1.3.0
39+
helm.sh/chart: oci-native-ingress-controller-1.3.3
4040
app.kubernetes.io/name: oci-native-ingress-controller
4141
app.kubernetes.io/instance: oci-native-ingress-controller
42-
app.kubernetes.io/version: "1.3.0"
42+
app.kubernetes.io/version: "1.3.3"
4343
app.kubernetes.io/managed-by: Helm
4444
annotations:
4545
cert-manager.io/inject-ca-from: native-ingress-controller-system/oci-native-ingress-controller-webhook-serving-cert

helm/oci-native-ingress-controller/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ apiVersion: v2
88
name: oci-native-ingress-controller
99
description: OCI Native Ingress Controller
1010
type: application
11-
version: 1.3.0
12-
appVersion: "1.3.0"
11+
version: 1.3.3
12+
appVersion: "1.3.3"
1313

1414
maintainers:
1515
- name: OKE Foundations team

helm/oci-native-ingress-controller/templates/deployment.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
# Copyright (c) 2023 Oracle America, Inc. and its affiliates.
55
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
66
#
7+
{{- if not (lookup "v1" "Namespace" "" .Values.deploymentNamespace)}}
78
apiVersion: v1
89
kind: Namespace
910
metadata:
1011
name: {{ .Values.deploymentNamespace }}
12+
{{- end }}
1113
---
1214
apiVersion: apps/v1
1315
kind: Deployment
@@ -69,7 +71,7 @@ spec:
6971
- name: OCI_RESOURCE_PRINCIPAL_VERSION
7072
value: "2.2"
7173
- name: OCI_RESOURCE_PRINCIPAL_REGION
72-
value: "us-phoenix-1"
74+
value: {{ .Values.region }}
7375
- name: OCI_SDK_DEFAULT_RETRY_ENABLED
7476
value: "true"
7577
ports:

helm/oci-native-ingress-controller/values.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ image:
2222
repository: ghcr.io/oracle/oci-native-ingress-controller
2323
pullPolicy: Always
2424
# Overrides the image tag whose default is the chart appVersion.
25-
tag: "v1.3.0"
25+
tag: "v1.3.3"
2626

2727
imagePullSecrets: []
2828
nameOverride: ""
@@ -97,6 +97,8 @@ webhookBindPort: 9443
9797
# Supported auths - instance(default), user
9898
authType: instance
9999
authSecretName: oci-config
100+
# Region where OKE cluster is deployed
101+
region: ""
100102

101103
# objectSelector for webhook
102104
objectSelector:
@@ -110,4 +112,4 @@ objectSelector:
110112

111113
metrics:
112114
backend: prometheus
113-
port: 2223
115+
port: 2223

pkg/controllers/backend/backend.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -146,41 +146,38 @@ func (c *Controller) ensureBackends(ingressClass *networkingv1.IngressClass, lbI
146146
for _, ingress := range ingresses {
147147
for _, rule := range ingress.Spec.Rules {
148148
for _, path := range rule.HTTP.Paths {
149-
svcName, svcPort, targetPort, _, err := util.PathToServiceAndTargetPort(c.serviceLister, ingress.Namespace, path)
149+
pSvc, svc, err := util.ExtractServices(path, c.serviceLister, ingress)
150+
if err != nil {
151+
return err
152+
}
153+
svcName, svcPort, targetPort, err := util.PathToServiceAndTargetPort(svc, pSvc, ingress.Namespace, false)
150154
if err != nil {
151155
return err
152156
}
153-
154157
epAddrs, err := util.GetEndpoints(c.endpointLister, ingress.Namespace, svcName)
155158
if err != nil {
156159
return fmt.Errorf("unable to fetch endpoints for %s/%s/%d: %w", ingress.Namespace, svcName, targetPort, err)
157160
}
158-
159161
backends := []ociloadbalancer.BackendDetails{}
160162
for _, epAddr := range epAddrs {
161163
backends = append(backends, util.NewBackend(epAddr.IP, targetPort))
162164
}
163-
164165
backendSetName := util.GenerateBackendSetName(ingress.Namespace, svcName, svcPort)
165166
err = c.client.GetLbClient().UpdateBackends(context.TODO(), lbID, backendSetName, backends)
166167
if err != nil {
167168
return fmt.Errorf("unable to update backends for %s/%s: %w", ingressClass.Name, backendSetName, err)
168169
}
169-
170170
backendSetHealth, err := c.client.GetLbClient().GetBackendSetHealth(context.TODO(), lbID, backendSetName)
171171
if err != nil {
172172
return fmt.Errorf("unable to fetch backendset health: %w", err)
173173
}
174-
175174
for _, epAddr := range epAddrs {
176175
pod, err := c.podLister.Pods(ingress.Namespace).Get(epAddr.TargetRef.Name)
177176
if err != nil {
178177
return fmt.Errorf("failed to fetch pod %s/%s: %w", ingress.Namespace, epAddr.TargetRef.Name, err)
179178
}
180-
181179
backendName := fmt.Sprintf("%s:%d", epAddr.IP, targetPort)
182180
readinessCondition := util.GetPodReadinessCondition(ingress.Name, rule.Host, path)
183-
184181
err = c.ensurePodReadinessCondition(pod, readinessCondition, backendSetHealth, backendName)
185182
if err != nil {
186183
return fmt.Errorf("%w", err)

pkg/controllers/nodeBackend/nodeBackend.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,17 +169,21 @@ func (c *Controller) ensureBackends(ingressClass *networkingv1.IngressClass, lbI
169169
for _, ingress := range ingresses {
170170
for _, rule := range ingress.Spec.Rules {
171171
for _, path := range rule.HTTP.Paths {
172-
svcName, svcPort, _, svc, err := util.PathToServiceAndTargetPort(c.serviceLister, ingress.Namespace, path)
172+
173+
pSvc, svc, err := util.ExtractServices(path, c.serviceLister, ingress)
173174
if err != nil {
174175
return err
175176
}
176177

177-
if svc == nil || svc.Spec.Ports == nil || svc.Spec.Ports[0].NodePort == 0 {
178+
svcName, svcPort, nodePort, err := util.PathToServiceAndTargetPort(svc, pSvc, ingress.Namespace, true)
179+
if err != nil {
180+
return err
181+
}
182+
if svc == nil || svc.Spec.Ports == nil || nodePort == 0 {
178183
continue
179184
}
180185

181186
var backends []ociloadbalancer.BackendDetails
182-
nodePort := svc.Spec.Ports[0].NodePort
183187
trafficPolicy := svc.Spec.ExternalTrafficPolicy
184188
if trafficPolicy == corev1.ServiceExternalTrafficPolicyTypeCluster {
185189
for _, node := range nodes {

pkg/server/server.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ import (
5353
"github.com/oracle/oci-native-ingress-controller/pkg/podreadiness"
5454
)
5555

56+
const (
57+
// OkeHostOverrideEnvVar is a hidden flag that allows NIC to hit another containerengine endpoint
58+
okeHostOverrideEnvVar = "OKE_HOST_OVERRIDE"
59+
)
60+
5661
func BuildConfig(kubeconfig string) (*rest.Config, error) {
5762
if kubeconfig != "" {
5863
cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
@@ -200,6 +205,11 @@ func setupClient(ctx context.Context, opts types.IngressOpts, k8client clientset
200205
klog.Fatalf("failed to load container engine client configuration provider: %v", err)
201206
}
202207

208+
// undocumented endpoint for testing in dev
209+
if os.Getenv(okeHostOverrideEnvVar) != "" {
210+
containerEngineClient.BaseClient.Host = os.Getenv(okeHostOverrideEnvVar)
211+
}
212+
203213
lbClient := loadbalancer.New(&ociLBClient)
204214

205215
certificatesClient := certificate.New(&ociCertificatesMgmtClient, ociclient.NewCertificateClient(&ociCertificatesClient))

pkg/state/ingressstate.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ func (s *StateStore) BuildState(ingressClass *networkingv1.IngressClass) error {
150150
if err != nil {
151151
return err
152152
}
153-
153+
bsTLSEnabled := util.GetBackendTlsEnabled(ing)
154154
certificateId := util.GetListenerTlsCertificateOcid(ing)
155155
if certificateId != nil {
156156
tlsPortDetail, ok := listenerTLSConfigMap[servicePort]
@@ -165,11 +165,12 @@ func (s *StateStore) BuildState(ingressClass *networkingv1.IngressClass) error {
165165
Artifact: *certificateId,
166166
}
167167
listenerTLSConfigMap[servicePort] = config
168-
bsTLSConfigMap[bsName] = config
168+
updateBackendTlsStatus(bsTLSEnabled, bsTLSConfigMap, bsName, config)
169169
}
170170

171171
if rule.Host != "" {
172172
secretName, ok := hostSecretMap[rule.Host]
173+
173174
if ok && secretName != "" {
174175
tlsPortDetail, ok := listenerTLSConfigMap[servicePort]
175176
if ok {
@@ -183,7 +184,7 @@ func (s *StateStore) BuildState(ingressClass *networkingv1.IngressClass) error {
183184
Artifact: secretName,
184185
}
185186
listenerTLSConfigMap[servicePort] = config
186-
bsTLSConfigMap[bsName] = config
187+
updateBackendTlsStatus(bsTLSEnabled, bsTLSConfigMap, bsName, config)
187188
}
188189
}
189190
}
@@ -214,6 +215,18 @@ func (s *StateStore) BuildState(ingressClass *networkingv1.IngressClass) error {
214215
return nil
215216
}
216217

218+
func updateBackendTlsStatus(bsTLSEnabled bool, bsTLSConfigMap map[string]TlsConfig, bsName string, config TlsConfig) {
219+
if bsTLSEnabled {
220+
bsTLSConfigMap[bsName] = config
221+
} else {
222+
config := TlsConfig{
223+
Type: "",
224+
Artifact: "",
225+
}
226+
bsTLSConfigMap[bsName] = config
227+
}
228+
}
229+
217230
func validateBackendSetHealthChecker(ingressResource *networkingv1.Ingress,
218231
bsHealthCheckerMap map[string]*ociloadbalancer.HealthCheckerDetails, bsName string) error {
219232
defaultHealthChecker := util.GetDefaultHeathChecker()

pkg/state/ingressstate_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const (
3535
TestIngressStateFilePath = "test-ingress-state.yaml"
3636
TestIngressStateWithPortNameFilePath = "test-ingress-state_withportname.yaml"
3737
TestIngressStateWithNamedClassesFilePath = "test-ingress-state_withnamedclasses.yaml"
38+
TestSslTerminationAtLb = "test-ssl-termination-lb.yaml"
3839
)
3940

4041
func setUp(ctx context.Context, ingressClassList *networkingv1.IngressClassList, ingressList *networkingv1.IngressList, testService *v1.ServiceList) (networkinglisters.IngressClassLister, networkinglisters.IngressLister, corelisters.ServiceLister) {
@@ -418,3 +419,33 @@ func TestValidateProtocolConfigWithConflict(t *testing.T) {
418419

419420
Expect(err.Error()).Should(ContainSubstring(fmt.Sprintf(ProtocolConflictMessage, 900)))
420421
}
422+
423+
func TestSslTerminationAtLB(t *testing.T) {
424+
RegisterTestingT(t)
425+
ctx, cancel := context.WithCancel(context.Background())
426+
defer cancel()
427+
428+
ingressClassList := testutil.GetIngressClassList()
429+
430+
ingressList := testutil.ReadResourceAsIngressList(TestSslTerminationAtLb)
431+
432+
certificateId := "certificateId"
433+
ingressList.Items[0].Spec.TLS = []networkingv1.IngressTLS{}
434+
ingressList.Items[0].Annotations = map[string]string{util.IngressListenerTlsCertificateAnnotation: certificateId}
435+
436+
testService := testutil.GetServiceListResource("default", "tls-test", 443)
437+
ingressClassLister, ingressLister, serviceLister := setUp(ctx, ingressClassList, ingressList, testService)
438+
439+
stateStore := NewStateStore(ingressClassLister, ingressLister, serviceLister, nil)
440+
err := stateStore.BuildState(&ingressClassList.Items[0])
441+
Expect(err).NotTo(HaveOccurred())
442+
443+
bsName := util.GenerateBackendSetName("default", "tls-test", 443)
444+
bsTlsConfig := stateStore.IngressGroupState.BackendSetTLSConfigMap[bsName]
445+
Expect(bsTlsConfig.Artifact).Should(Equal(""))
446+
Expect(bsTlsConfig.Type).Should(Equal(""))
447+
448+
lstTlsConfig := stateStore.IngressGroupState.ListenerTLSConfigMap[443]
449+
Expect(lstTlsConfig.Artifact).Should(Equal(certificateId))
450+
Expect(lstTlsConfig.Type).Should(Equal(ArtifactTypeCertificate))
451+
}

0 commit comments

Comments
 (0)