From b1f0d286344671a4b9cd7ff14f223bbcd7f92dc6 Mon Sep 17 00:00:00 2001 From: Manuel Alejandro de Brito Fontes Date: Wed, 2 Sep 2020 09:08:53 -0400 Subject: [PATCH] Require Kubernetes v1.14 or higher and deprecate extensions --- cmd/nginx/main.go | 2 +- internal/admission/controller/main.go | 11 +--- internal/ingress/controller/store/store.go | 32 +----------- .../ingress/controller/store/store_test.go | 50 ------------------- internal/ingress/status/status.go | 35 ++++--------- 5 files changed, 14 insertions(+), 116 deletions(-) diff --git a/cmd/nginx/main.go b/cmd/nginx/main.go index cc8daccc0..79bed7e32 100644 --- a/cmd/nginx/main.go +++ b/cmd/nginx/main.go @@ -106,7 +106,7 @@ func main() { k8s.IsNetworkingIngressAvailable, k8s.IsIngressV1Ready = k8s.NetworkingIngressAvailable(kubeClient) if !k8s.IsNetworkingIngressAvailable { - klog.Warningf("Using deprecated \"k8s.io/api/extensions/v1beta1\" package because Kubernetes version is < v1.14.0") + klog.Fatalf("ingress-nginx requires Kubernetes v1.14.0 or higher") } if k8s.IsIngressV1Ready { diff --git a/internal/admission/controller/main.go b/internal/admission/controller/main.go index 512c185f0..7cfb77eb3 100644 --- a/internal/admission/controller/main.go +++ b/internal/admission/controller/main.go @@ -20,7 +20,6 @@ import ( "fmt" "k8s.io/api/admission/v1beta1" - extensions "k8s.io/api/extensions/v1beta1" networking "k8s.io/api/networking/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/klog/v2" @@ -41,14 +40,8 @@ type IngressAdmission struct { } var ( - extensionsResource = metav1.GroupVersionResource{ - Group: networking.GroupName, - Version: "v1beta1", - Resource: "ingresses", - } - networkingResource = metav1.GroupVersionResource{ - Group: extensions.GroupName, + Group: networking.GroupName, Version: "v1beta1", Resource: "ingresses", } @@ -66,7 +59,7 @@ func (ia *IngressAdmission) HandleAdmission(ar *v1beta1.AdmissionReview) { return } - if ar.Request.Resource != extensionsResource && ar.Request.Resource != networkingResource { + if ar.Request.Resource != networkingResource { err := fmt.Errorf("rejecting admission review because the request does not contains an Ingress resource but %s with name %s in namespace %s", ar.Request.Resource.String(), ar.Request.Name, ar.Request.Namespace) ar.Response = &v1beta1.AdmissionResponse{ diff --git a/internal/ingress/controller/store/store.go b/internal/ingress/controller/store/store.go index 44ab18c55..3bf8ee07b 100644 --- a/internal/ingress/controller/store/store.go +++ b/internal/ingress/controller/store/store.go @@ -28,7 +28,6 @@ import ( "github.com/eapache/channels" corev1 "k8s.io/api/core/v1" - extensionsv1beta1 "k8s.io/api/extensions/v1beta1" networkingv1beta1 "k8s.io/api/networking/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -280,12 +279,7 @@ func New( informers.WithNamespace(namespace), informers.WithTweakListOptions(tweakListOptionsFunc)) - if k8s.IsNetworkingIngressAvailable { - store.informers.Ingress = infFactory.Networking().V1beta1().Ingresses().Informer() - } else { - store.informers.Ingress = infFactory.Extensions().V1beta1().Ingresses().Informer() - } - + store.informers.Ingress = infFactory.Networking().V1beta1().Ingresses().Informer() store.listers.Ingress.Store = store.informers.Ingress.GetStore() store.informers.Endpoint = infFactory.Core().V1().Endpoints().Informer() @@ -960,34 +954,10 @@ func (s k8sStore) GetRunningControllerPodsCount() int { var runtimeScheme = k8sruntime.NewScheme() func init() { - utilruntime.Must(extensionsv1beta1.AddToScheme(runtimeScheme)) utilruntime.Must(networkingv1beta1.AddToScheme(runtimeScheme)) } -func fromExtensions(old *extensionsv1beta1.Ingress) (*networkingv1beta1.Ingress, error) { - networkingIngress := &networkingv1beta1.Ingress{} - - err := runtimeScheme.Convert(old, networkingIngress, nil) - if err != nil { - return nil, err - } - - return networkingIngress, nil -} - func toIngress(obj interface{}) (*networkingv1beta1.Ingress, bool) { - oldVersion, inExtension := obj.(*extensionsv1beta1.Ingress) - if inExtension { - ing, err := fromExtensions(oldVersion) - if err != nil { - klog.Errorf("unexpected error converting Ingress from extensions package: %v", err) - return nil, false - } - - k8s.SetDefaultNGINXPathType(ing) - return ing, true - } - if ing, ok := obj.(*networkingv1beta1.Ingress); ok { k8s.SetDefaultNGINXPathType(ing) return ing, true diff --git a/internal/ingress/controller/store/store_test.go b/internal/ingress/controller/store/store_test.go index 2a7680a85..e6ff4602c 100644 --- a/internal/ingress/controller/store/store_test.go +++ b/internal/ingress/controller/store/store_test.go @@ -17,7 +17,6 @@ limitations under the License. package store import ( - "bytes" "context" "encoding/base64" "fmt" @@ -30,7 +29,6 @@ import ( "github.com/eapache/channels" v1 "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" networking "k8s.io/api/networking/v1beta1" k8sErrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -1069,51 +1067,3 @@ func TestGetRunningControllerPodsCount(t *testing.T) { t.Errorf("Expected 1 controller Pods but got %v", s) } } - -func TestIngressConversion(t *testing.T) { - ing := &extensions.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "old-ingress", - Namespace: "demo", - CreationTimestamp: metav1.NewTime(time.Now()), - }, - Spec: extensions.IngressSpec{ - Rules: []extensions.IngressRule{ - { - Host: "foo.bar", - IngressRuleValue: extensions.IngressRuleValue{ - HTTP: &extensions.HTTPIngressRuleValue{ - Paths: []extensions.HTTPIngressPath{ - { - Backend: extensions.IngressBackend{ - ServiceName: "demo", - ServicePort: intstr.FromInt(80), - }, - }, - }, - }, - }, - }, - }, - }, - } - - new, err := fromExtensions(ing) - if err != nil { - t.Fatalf("unexpected error converting ingress: %v", err) - } - - m1, err := new.Marshal() - if err != nil { - t.Fatalf("unexpected error marshalling Ingress: %v", err) - } - - m2, err := ing.Marshal() - if err != nil { - t.Fatalf("unexpected error marshalling Ingress: %v", err) - } - - if !bytes.Equal(m1, m2) { - t.Fatalf("Expected marshalling of types should be equal") - } -} diff --git a/internal/ingress/status/status.go b/internal/ingress/status/status.go index 58fb26a07..99f5a32b6 100644 --- a/internal/ingress/status/status.go +++ b/internal/ingress/status/status.go @@ -266,32 +266,17 @@ func runUpdate(ing *ingress.Ingress, status []apiv1.LoadBalancerIngress, return nil, nil } - if k8s.IsNetworkingIngressAvailable { - ingClient := client.NetworkingV1beta1().Ingresses(ing.Namespace) - currIng, err := ingClient.Get(context.TODO(), ing.Name, metav1.GetOptions{}) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("unexpected error searching Ingress %v/%v", ing.Namespace, ing.Name)) - } + ingClient := client.NetworkingV1beta1().Ingresses(ing.Namespace) + currIng, err := ingClient.Get(context.TODO(), ing.Name, metav1.GetOptions{}) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("unexpected error searching Ingress %v/%v", ing.Namespace, ing.Name)) + } - klog.Infof("updating Ingress %v/%v status from %v to %v", currIng.Namespace, currIng.Name, currIng.Status.LoadBalancer.Ingress, status) - currIng.Status.LoadBalancer.Ingress = status - _, err = ingClient.UpdateStatus(context.TODO(), currIng, metav1.UpdateOptions{}) - if err != nil { - klog.Warningf("error updating ingress rule: %v", err) - } - } else { - ingClient := client.ExtensionsV1beta1().Ingresses(ing.Namespace) - currIng, err := ingClient.Get(context.TODO(), ing.Name, metav1.GetOptions{}) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("unexpected error searching Ingress %v/%v", ing.Namespace, ing.Name)) - } - - klog.Infof("updating Ingress %v/%v status from %v to %v", currIng.Namespace, currIng.Name, currIng.Status.LoadBalancer.Ingress, status) - currIng.Status.LoadBalancer.Ingress = status - _, err = ingClient.UpdateStatus(context.TODO(), currIng, metav1.UpdateOptions{}) - if err != nil { - klog.Warningf("error updating ingress rule: %v", err) - } + klog.Infof("updating Ingress %v/%v status from %v to %v", currIng.Namespace, currIng.Name, currIng.Status.LoadBalancer.Ingress, status) + currIng.Status.LoadBalancer.Ingress = status + _, err = ingClient.UpdateStatus(context.TODO(), currIng, metav1.UpdateOptions{}) + if err != nil { + klog.Warningf("error updating ingress rule: %v", err) } return true, nil