Require Kubernetes v1.14 or higher and deprecate extensions
This commit is contained in:
parent
f55a47e461
commit
b1f0d28634
5 changed files with 14 additions and 116 deletions
|
@ -106,7 +106,7 @@ func main() {
|
||||||
|
|
||||||
k8s.IsNetworkingIngressAvailable, k8s.IsIngressV1Ready = k8s.NetworkingIngressAvailable(kubeClient)
|
k8s.IsNetworkingIngressAvailable, k8s.IsIngressV1Ready = k8s.NetworkingIngressAvailable(kubeClient)
|
||||||
if !k8s.IsNetworkingIngressAvailable {
|
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 {
|
if k8s.IsIngressV1Ready {
|
||||||
|
|
|
@ -20,7 +20,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/api/admission/v1beta1"
|
"k8s.io/api/admission/v1beta1"
|
||||||
extensions "k8s.io/api/extensions/v1beta1"
|
|
||||||
networking "k8s.io/api/networking/v1beta1"
|
networking "k8s.io/api/networking/v1beta1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
@ -41,14 +40,8 @@ type IngressAdmission struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
extensionsResource = metav1.GroupVersionResource{
|
|
||||||
Group: networking.GroupName,
|
|
||||||
Version: "v1beta1",
|
|
||||||
Resource: "ingresses",
|
|
||||||
}
|
|
||||||
|
|
||||||
networkingResource = metav1.GroupVersionResource{
|
networkingResource = metav1.GroupVersionResource{
|
||||||
Group: extensions.GroupName,
|
Group: networking.GroupName,
|
||||||
Version: "v1beta1",
|
Version: "v1beta1",
|
||||||
Resource: "ingresses",
|
Resource: "ingresses",
|
||||||
}
|
}
|
||||||
|
@ -66,7 +59,7 @@ func (ia *IngressAdmission) HandleAdmission(ar *v1beta1.AdmissionReview) {
|
||||||
return
|
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",
|
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.Request.Resource.String(), ar.Request.Name, ar.Request.Namespace)
|
||||||
ar.Response = &v1beta1.AdmissionResponse{
|
ar.Response = &v1beta1.AdmissionResponse{
|
||||||
|
|
|
@ -28,7 +28,6 @@ import (
|
||||||
|
|
||||||
"github.com/eapache/channels"
|
"github.com/eapache/channels"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
|
||||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
@ -280,12 +279,7 @@ func New(
|
||||||
informers.WithNamespace(namespace),
|
informers.WithNamespace(namespace),
|
||||||
informers.WithTweakListOptions(tweakListOptionsFunc))
|
informers.WithTweakListOptions(tweakListOptionsFunc))
|
||||||
|
|
||||||
if k8s.IsNetworkingIngressAvailable {
|
|
||||||
store.informers.Ingress = infFactory.Networking().V1beta1().Ingresses().Informer()
|
store.informers.Ingress = infFactory.Networking().V1beta1().Ingresses().Informer()
|
||||||
} else {
|
|
||||||
store.informers.Ingress = infFactory.Extensions().V1beta1().Ingresses().Informer()
|
|
||||||
}
|
|
||||||
|
|
||||||
store.listers.Ingress.Store = store.informers.Ingress.GetStore()
|
store.listers.Ingress.Store = store.informers.Ingress.GetStore()
|
||||||
|
|
||||||
store.informers.Endpoint = infFactory.Core().V1().Endpoints().Informer()
|
store.informers.Endpoint = infFactory.Core().V1().Endpoints().Informer()
|
||||||
|
@ -960,34 +954,10 @@ func (s k8sStore) GetRunningControllerPodsCount() int {
|
||||||
var runtimeScheme = k8sruntime.NewScheme()
|
var runtimeScheme = k8sruntime.NewScheme()
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
utilruntime.Must(extensionsv1beta1.AddToScheme(runtimeScheme))
|
|
||||||
utilruntime.Must(networkingv1beta1.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) {
|
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 {
|
if ing, ok := obj.(*networkingv1beta1.Ingress); ok {
|
||||||
k8s.SetDefaultNGINXPathType(ing)
|
k8s.SetDefaultNGINXPathType(ing)
|
||||||
return ing, true
|
return ing, true
|
||||||
|
|
|
@ -17,7 +17,6 @@ limitations under the License.
|
||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"context"
|
"context"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -30,7 +29,6 @@ import (
|
||||||
|
|
||||||
"github.com/eapache/channels"
|
"github.com/eapache/channels"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
extensions "k8s.io/api/extensions/v1beta1"
|
|
||||||
networking "k8s.io/api/networking/v1beta1"
|
networking "k8s.io/api/networking/v1beta1"
|
||||||
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
|
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
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)
|
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")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -266,7 +266,6 @@ func runUpdate(ing *ingress.Ingress, status []apiv1.LoadBalancerIngress,
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if k8s.IsNetworkingIngressAvailable {
|
|
||||||
ingClient := client.NetworkingV1beta1().Ingresses(ing.Namespace)
|
ingClient := client.NetworkingV1beta1().Ingresses(ing.Namespace)
|
||||||
currIng, err := ingClient.Get(context.TODO(), ing.Name, metav1.GetOptions{})
|
currIng, err := ingClient.Get(context.TODO(), ing.Name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -279,20 +278,6 @@ func runUpdate(ing *ingress.Ingress, status []apiv1.LoadBalancerIngress,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Warningf("error updating ingress rule: %v", err)
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue