Commit dd639a1f authored by Geoff Simmons's avatar Geoff Simmons

WIP: update to support k8s-1.22.

We now work with Ingress from the API group networking.k8s.io. Ingress
in the extensions API group is no longer supported. This entails:

- update RBAC grants
- update client-go code
- update the examples/tests, currently only using helm deployments
  - changes in the Ingress backend and service fields
  - for now we only test pathType:ImplementationSpecific, implemented
    as posix_type re2 matches, which had been the match implementation
    prior to this change.

viking will support the Match and Prefix pathTypes, but in this
iteration, it was not necessary to change the code to support the
ImplementationSpecific pathType.

Examples/tests with kubectl deployments and plain YAML manifests will
also be updated in an upcoming iteration.
parent 7778b708
......@@ -34,7 +34,7 @@ rules:
- create
- patch
- apiGroups:
- extensions
- networking.k8s.io
resources:
- ingresses
verbs:
......@@ -42,7 +42,7 @@ rules:
- watch
- get
- apiGroups:
- "extensions"
- networking.k8s.io
resources:
- ingresses/status
verbs:
......
......@@ -36,7 +36,7 @@ rules:
- create
- patch
- apiGroups:
- extensions
- networking.k8s.io
resources:
- ingresses
verbs:
......@@ -44,7 +44,7 @@ rules:
- watch
- get
- apiGroups:
- "extensions"
- networking.k8s.io
resources:
- ingresses/status
verbs:
......
apiVersion: extensions/v1beta1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Values.ingress.name }}
......@@ -22,9 +22,11 @@ spec:
{{- end }}
{{- end }}
{{- if .Values.defaultApp }}
backend:
serviceName: {{ .Values.defaultApp.app }}-svc
servicePort: {{ default "80" .Values.defaultApp.servicePort }}
defaultBackend:
service:
name: {{ .Values.defaultApp.app }}-svc
port:
number: {{ default "80" .Values.defaultApp.servicePort }}
{{- end }}
{{- if .Values.ingress.rules }}
rules:
......@@ -34,9 +36,12 @@ spec:
paths:
{{- range $path := $rule.paths }}
- path: {{ $path.path }}
pathType: ImplementationSpecific
backend:
serviceName: {{ $path.app }}-svc
servicePort: {{ default "80" $path.servicePort }}
service:
name: {{ $path.app }}-svc
port:
number: {{ default "80" $path.servicePort }}
{{- end }}
{{- end }}
{{- end }}
......@@ -15,7 +15,7 @@ kubectl port-forward svc/varnish-ingress ${LOCALPORT}:80 >/dev/null &
trap 'kill $(jobs -p)' EXIT
wait_for_port ${LOCALPORT}
# XXX intermittent 503 responses immediately after the config is valid.
sleep 10
# Give VMOD dynamic enough time to update the IP from DNS.
sleep 30
varnishtest ${TESTOPTS} -Dlocalport=${LOCALPORT} ../hello/cafe.vtc
......@@ -33,7 +33,7 @@ import (
"code.uplex.de/uplex-varnish/k8s-ingress/pkg/update"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
)
......@@ -41,7 +41,7 @@ import (
func (worker *NamespaceWorker) enqueueIngsForBackendSvcs(svcs []string,
namespace, name string) update.Status {
svc2ing := make(map[string]*extensions.Ingress)
svc2ing := make(map[string]*net_v1.Ingress)
ings, err := worker.ing.List(labels.Everything())
if errors.IsNotFound(err) {
return update.MakeNoop(
......@@ -52,15 +52,15 @@ func (worker *NamespaceWorker) enqueueIngsForBackendSvcs(svcs []string,
return update.MakeRecoverable("%v", err)
}
for _, ing := range ings {
if ing.Spec.Backend != nil {
svc2ing[ing.Spec.Backend.ServiceName] = ing
if ing.Spec.DefaultBackend != nil {
svc2ing[ing.Spec.DefaultBackend.Service.Name] = ing
}
for _, rule := range ing.Spec.Rules {
if rule.HTTP == nil {
continue
}
for _, path := range rule.HTTP.Paths {
svc2ing[path.Backend.ServiceName] = ing
svc2ing[path.Backend.Service.Name] = ing
}
}
}
......
......@@ -50,12 +50,12 @@ import (
"k8s.io/client-go/kubernetes"
core_v1 "k8s.io/client-go/kubernetes/typed/core/v1"
core_v1_listers "k8s.io/client-go/listers/core/v1"
ext_listers "k8s.io/client-go/listers/extensions/v1beta1"
net_v1_listers "k8s.io/client-go/listers/networking/v1"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/record"
api_v1 "k8s.io/api/core/v1"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
......@@ -109,7 +109,7 @@ type SyncObj struct {
// IngressController, and handed off to NamespaceWorker workers to
// read data from the client-go cache.
type Listers struct {
ing ext_listers.IngressLister
ing net_v1_listers.IngressLister
svc core_v1_listers.ServiceLister
endp core_v1_listers.EndpointsLister
tsecr core_v1_listers.SecretLister
......@@ -176,7 +176,7 @@ func NewIngressController(
if err := api_v1.AddToScheme(evtScheme); err != nil {
return nil, err
}
if err := extensions.AddToScheme(evtScheme); err != nil {
if err := net_v1.AddToScheme(evtScheme); err != nil {
return nil, err
}
if err := vcr_v1alpha1.AddToScheme(evtScheme); err != nil {
......@@ -186,7 +186,7 @@ func NewIngressController(
api_v1.EventSource{Component: "varnish-ingress-controller"})
ingc.informers = &infrmrs{
ing: infFactory.Extensions().V1beta1().Ingresses().Informer(),
ing: infFactory.Networking().V1().Ingresses().Informer(),
svc: infFactory.Core().V1().Services().Informer(),
endp: infFactory.Core().V1().Endpoints().Informer(),
vsecr: vsecrInfFactory.Core().V1().Secrets().Informer(),
......@@ -228,7 +228,7 @@ func NewIngressController(
}
ingc.listers = &Listers{
ing: infFactory.Extensions().V1beta1().Ingresses().Lister(),
ing: infFactory.Networking().V1().Ingresses().Lister(),
svc: infFactory.Core().V1().Services().Lister(),
endp: infFactory.Core().V1().Endpoints().Lister(),
vsecr: vsecrInfFactory.Core().V1().Secrets().Lister(),
......@@ -284,7 +284,7 @@ func (ingc *IngressController) logObj(action string, obj interface{}) {
func incWatchCounter(obj interface{}, sync string) {
switch obj.(type) {
case *extensions.Ingress:
case *net_v1.Ingress:
watchCounters.WithLabelValues("Ingress", sync).Inc()
case *api_v1.Service:
watchCounters.WithLabelValues("Service", sync).Inc()
......@@ -334,7 +334,7 @@ func (ingc *IngressController) updateObj(old, new interface{}) {
} else {
kind := "Unknown"
switch old.(type) {
case *extensions.Ingress:
case *net_v1.Ingress:
kind = "Ingress"
case *api_v1.Service:
kind = "Service"
......
......@@ -69,7 +69,7 @@ func (worker *NamespaceWorker) syncEndp(key string) update.Status {
worker.log.Tracef("Update ingresses for endpoints %s", key)
requeued := make([]string, 0, len(ings))
for _, ing := range ings {
if !worker.isVarnishIngress(ing) {
if !worker.isVikingIngress(ing) {
worker.log.Tracef("Ingress %s/%s: not Varnish",
ing.Namespace, ing.Name)
continue
......
......@@ -46,10 +46,9 @@ import (
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/util/intstr"
api_v1 "k8s.io/api/core/v1"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
......@@ -93,7 +92,7 @@ func (worker *NamespaceWorker) filterVarnishIngSvcs(
}
func (worker *NamespaceWorker) getVarnishSvcForIng(
ing *extensions.Ingress) (*api_v1.Service, error) {
ing *net_v1.Ingress) (*api_v1.Service, error) {
svcs, err := worker.listers.svc.List(varnishIngressSelector)
if err != nil {
......@@ -146,7 +145,7 @@ func (worker *NamespaceWorker) getVarnishSvcForIng(
}
func (worker *NamespaceWorker) getIngsForVarnishSvc(
svc *api_v1.Service) ([]*extensions.Ingress, error) {
svc *api_v1.Service) ([]*net_v1.Ingress, error) {
ings, err := worker.listers.ing.List(labels.Everything())
if err != nil {
......@@ -163,9 +162,9 @@ func (worker *NamespaceWorker) getIngsForVarnishSvc(
}
nsVarnishSvcs = worker.filterVarnishIngSvcs(nsVarnishSvcs)
ings4Svc := make([]*extensions.Ingress, 0)
ings4Svc := make([]*net_v1.Ingress, 0)
for _, ing := range ings {
if !worker.isVarnishIngress(ing) {
if !worker.isVikingIngress(ing) {
continue
}
namespace := ing.Namespace
......@@ -195,11 +194,11 @@ func (worker *NamespaceWorker) getIngsForVarnishSvc(
return ings4Svc, nil
}
func ingMergeError(ings []*extensions.Ingress) error {
host2ing := make(map[string]*extensions.Ingress)
var ingWdefBackend *extensions.Ingress
func ingMergeError(ings []*net_v1.Ingress) error {
host2ing := make(map[string]*net_v1.Ingress)
var ingWdefBackend *net_v1.Ingress
for _, ing := range ings {
if ing.Spec.Backend != nil {
if ing.Spec.DefaultBackend != nil {
if ingWdefBackend != nil {
return fmt.Errorf("Default backend configured "+
"in more than one Ingress: %s/%s and "+
......@@ -224,10 +223,10 @@ func ingMergeError(ings []*extensions.Ingress) error {
func (worker *NamespaceWorker) ingBackend2Addrs(
namespace string,
backend extensions.IngressBackend,
backend net_v1.IngressBackend,
) (addrs []vcl.Address, extName string, extPort string, status update.Status) {
nsLister := worker.listers.svc.Services(namespace)
svc, err := nsLister.Get(backend.ServiceName)
svc, err := nsLister.Get(backend.Service.Name)
if err != nil {
status = IncompleteIfNotFound(err, "%v", err)
return
......@@ -252,7 +251,7 @@ func (worker *NamespaceWorker) ingBackend2Addrs(
}
extPort = svc.Spec.Ports[idx].TargetPort.String()
} else {
extPort = backend.ServicePort.String()
extPort = backend.Service.Port.String()
}
return
}
......@@ -272,12 +271,11 @@ func (worker *NamespaceWorker) ingBackend2Addrs(
}
targetPort := int32(0)
ingSvcPort := backend.ServicePort
ingSvcPort := backend.Service.Port
for _, port := range svc.Spec.Ports {
if (ingSvcPort.Type == intstr.Int &&
port.Port == int32(ingSvcPort.IntValue())) ||
(ingSvcPort.Type == intstr.String &&
port.Name == ingSvcPort.String()) {
if (ingSvcPort.Number != 0 && port.Port == ingSvcPort.Number) ||
(ingSvcPort.Number == 0 &&
port.Name == ingSvcPort.Name) {
targetPort, err = worker.
getTargetPort(&port, svc)
if err != nil {
......@@ -517,7 +515,7 @@ BCfgs:
return vclSvc, bcfg, onload, update.MakeSuccess("")
}
func (worker *NamespaceWorker) ings2VCLSpec(ings []*extensions.Ingress) (
func (worker *NamespaceWorker) ings2VCLSpec(ings []*net_v1.Ingress) (
vcl.Spec,
map[string]*vcr_v1alpha1.BackendConfig,
map[string]*haproxy.OnloadSpec,
......@@ -534,24 +532,24 @@ func (worker *NamespaceWorker) ings2VCLSpec(ings []*extensions.Ingress) (
if namespace == "" {
namespace = "default"
}
if ing.Spec.Backend != nil {
if ing.Spec.DefaultBackend != nil {
if vclSpec.DefaultService.Name != "" {
panic("More than one Ingress default backend")
}
backend := ing.Spec.Backend
backend := ing.Spec.DefaultBackend
addrs, extName, extPort, status := worker.
ingBackend2Addrs(namespace, *backend)
if status.IsError() {
return vclSpec, bcfgs, onlds, status
}
vclSvc, bcfg, onload, status := worker.
getVCLSvc(namespace, backend.ServiceName, addrs,
extName, extPort)
getVCLSvc(namespace, backend.Service.Name,
addrs, extName, extPort)
if status.IsError() {
return vclSpec, bcfgs, onlds, status
}
vclSpec.DefaultService = vclSvc
key := namespace + "/" + backend.ServiceName
key := namespace + "/" + backend.Service.Name
if extName == "" {
vclSpec.IntSvcs[key] = vclSvc
if onload != nil {
......@@ -592,14 +590,14 @@ func (worker *NamespaceWorker) ings2VCLSpec(ings []*extensions.Ingress) (
}
vclSvc, bcfg, onload, status := worker.
getVCLSvc(namespace,
path.Backend.ServiceName, addrs,
path.Backend.Service.Name, addrs,
extName, extPort)
if status.IsError() {
return vclSpec, bcfgs, onlds, status
}
vclRule.PathMap[path.Path] = vclSvc
key := namespace + "/" +
path.Backend.ServiceName
path.Backend.Service.Name
if extName == "" {
vclSpec.IntSvcs[key] = vclSvc
if onload != nil {
......@@ -929,7 +927,7 @@ func (worker *NamespaceWorker) configReqDisps(spec *vcl.Spec,
func (worker *NamespaceWorker) ings2OffloaderSpec(
svc *api_v1.Service,
ings []*extensions.Ingress,
ings []*net_v1.Ingress,
) (haproxy.Spec, error) {
offldrSpec := haproxy.Spec{
Namespace: svc.Namespace,
......@@ -964,7 +962,7 @@ func (worker *NamespaceWorker) ings2OffloaderSpec(
// Ingress, using network addresses of the Services that expose the
// http and https ports.
func (worker *NamespaceWorker) updateIngStatus(
admSvc *api_v1.Service, ings []*extensions.Ingress,
admSvc *api_v1.Service, ings []*net_v1.Ingress,
) update.Status {
svcs, err := worker.svc.List(vikingPubSvcSelector)
if err != nil {
......@@ -1058,7 +1056,7 @@ func (worker *NamespaceWorker) updateIngStatus(
ing.Status.LoadBalancer.Ingress =
make([]api_v1.LoadBalancerIngress, len(ips)+len(hosts))
copy(ing.Status.LoadBalancer.Ingress, lb)
ingClient := worker.client.ExtensionsV1beta1().
ingClient := worker.client.NetworkingV1().
Ingresses(ing.Namespace)
if _, err := ingClient.UpdateStatus(context.TODO(), ing,
metav1.UpdateOptions{}); err != nil {
......@@ -1071,7 +1069,7 @@ func (worker *NamespaceWorker) updateIngStatus(
}
func (worker *NamespaceWorker) addOrUpdateIng(
ing *extensions.Ingress,
ing *net_v1.Ingress,
) update.Status {
ingKey := ing.ObjectMeta.Namespace + "/" + ing.ObjectMeta.Name
worker.log.Infof("Adding or Updating Ingress: %s", ingKey)
......@@ -1272,15 +1270,15 @@ func (worker *NamespaceWorker) addOrUpdateIng(
// We only handle Ingresses with the class annotation with the value
// given as the "class" flag (default "varnish").
func (worker *NamespaceWorker) isVarnishIngress(ing *extensions.Ingress) bool {
func (worker *NamespaceWorker) isVikingIngress(ing *net_v1.Ingress) bool {
class, exists := ing.Annotations[ingressClassKey]
return exists && class == worker.ingClass
}
func (worker *NamespaceWorker) chkAddOrUpdateIng(
ing *extensions.Ingress) update.Status {
ing *net_v1.Ingress) update.Status {
if !worker.isVarnishIngress(ing) {
if !worker.isVikingIngress(ing) {
syncCounters.WithLabelValues(worker.namespace, "Ingress",
"Ignore").Inc()
return update.MakeNoop("Ignoring Ingress %s/%s, "+
......@@ -1310,7 +1308,7 @@ func (worker *NamespaceWorker) updateIng(key string) update.Status {
}
func (worker *NamespaceWorker) deleteIng(obj interface{}) update.Status {
ing, ok := obj.(*extensions.Ingress)
ing, ok := obj.(*net_v1.Ingress)
if !ok || ing == nil {
return update.MakeNoop("Delete Ingress: not found: %v", obj)
}
......
......@@ -34,7 +34,7 @@ import (
vcr_v1alpha1 "code.uplex.de/uplex-varnish/k8s-ingress/pkg/apis/varnishingress/v1alpha1"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"code.uplex.de/uplex-varnish/k8s-ingress/pkg/varnish/vcl"
......@@ -42,43 +42,47 @@ import (
"github.com/sirupsen/logrus"
)
var ing1 = &extensions.Ingress{
var ing1 = &net_v1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "ing1",
},
Spec: extensions.IngressSpec{
Backend: &extensions.IngressBackend{
ServiceName: "default-svc2",
Spec: net_v1.IngressSpec{
DefaultBackend: &net_v1.IngressBackend{
Service: &net_v1.IngressServiceBackend{
Name: "default-svc2",
},
},
Rules: []extensions.IngressRule{
Rules: []net_v1.IngressRule{
{Host: "host1"},
},
},
}
var ing2 = &extensions.Ingress{
var ing2 = &net_v1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "ing2",
},
Spec: extensions.IngressSpec{
Backend: &extensions.IngressBackend{
ServiceName: "default-svc2",
Spec: net_v1.IngressSpec{
DefaultBackend: &net_v1.IngressBackend{
Service: &net_v1.IngressServiceBackend{
Name: "default-svc2",
},
},
Rules: []extensions.IngressRule{
Rules: []net_v1.IngressRule{
{Host: "host2"},
},
},
}
var ing3 = &extensions.Ingress{
var ing3 = &net_v1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "ing3",
},
Spec: extensions.IngressSpec{
Rules: []extensions.IngressRule{
Spec: net_v1.IngressSpec{
Rules: []net_v1.IngressRule{
{Host: "host1"},
{Host: "host2"},
},
......@@ -86,7 +90,7 @@ var ing3 = &extensions.Ingress{
}
func TestIngressMergeError(t *testing.T) {
ings := []*extensions.Ingress{ing1, ing2}
ings := []*net_v1.Ingress{ing1, ing2}
if err := ingMergeError(ings); err == nil {
t.Errorf("ingMergeError(): no error reported for more than " +
"one default backend")
......@@ -94,7 +98,7 @@ func TestIngressMergeError(t *testing.T) {
t.Logf("ingMergeError() returned as expected: %v", err)
}
ings = []*extensions.Ingress{ing2, ing3}
ings = []*net_v1.Ingress{ing2, ing3}
if err := ingMergeError(ings); err == nil {
t.Errorf("ingMergeError(): no error reported for overlapping " +
"Hosts")
......
......@@ -33,7 +33,7 @@ import (
vcr_v1alpha1 "code.uplex.de/uplex-varnish/k8s-ingress/pkg/apis/varnishingress/v1alpha1"
api_v1 "k8s.io/api/core/v1"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
......@@ -64,7 +64,7 @@ var (
func (worker *NamespaceWorker) getIngsForTLSSecret(
secret *api_v1.Secret,
) (ings []*extensions.Ingress, status update.Status) {
) (ings []*net_v1.Ingress, status update.Status) {
nsIngs, err := worker.ing.List(labels.Everything())
if err != nil {
if errors.IsNotFound(err) {
......@@ -77,7 +77,7 @@ func (worker *NamespaceWorker) getIngsForTLSSecret(
}
for _, ing := range nsIngs {
if !worker.isVarnishIngress(ing) {
if !worker.isVikingIngress(ing) {
continue
}
for _, tls := range ing.Spec.TLS {
......
......@@ -34,25 +34,26 @@ import (
"testing"
api_v1 "k8s.io/api/core/v1"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes/fake"
ext_listers "k8s.io/client-go/listers/extensions/v1beta1"
net_v1_listers "k8s.io/client-go/listers/networking/v1"
"k8s.io/client-go/tools/cache"
"github.com/sirupsen/logrus"
)
func setupIngLister(
client *fake.Clientset, ns string) ext_listers.IngressNamespaceLister {
client *fake.Clientset,
ns string,
) net_v1_listers.IngressNamespaceLister {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
infFactory := informers.NewSharedInformerFactory(client, 0)
ingInformer := infFactory.Extensions().V1beta1().Ingresses().Informer()
ingLister := infFactory.Extensions().V1beta1().Ingresses().Lister()
ingInformer := infFactory.Networking().V1().Ingresses().Informer()
ingLister := infFactory.Networking().V1().Ingresses().Lister()
ingNsLister := ingLister.Ingresses(ns)
infFactory.Start(ctx.Done())
......@@ -69,7 +70,7 @@ func TestIngsForTLSSecret(t *testing.T) {
noIngClassSecret := "no-ing-class-secret"
client := fake.NewSimpleClientset(
&extensions.Ingress{
&net_v1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Namespace: ns,
Name: ingName,
......@@ -77,13 +78,13 @@ func TestIngsForTLSSecret(t *testing.T) {
ingressClassKey: ingClass,
},
},
Spec: extensions.IngressSpec{
TLS: []extensions.IngressTLS{{
Spec: net_v1.IngressSpec{
TLS: []net_v1.IngressTLS{{
SecretName: secretName,
}},
},
},
&extensions.Ingress{
&net_v1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Namespace: ns,
Name: "wrong-ing-class",
......@@ -91,24 +92,24 @@ func TestIngsForTLSSecret(t *testing.T) {
ingressClassKey: "wrong-ing-class",
},
},
Spec: extensions.IngressSpec{
TLS: []extensions.IngressTLS{{
Spec: net_v1.IngressSpec{
TLS: []net_v1.IngressTLS{{
SecretName: wrongIngClassSecret,
}},
},
},
&extensions.Ingress{
&net_v1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Namespace: ns,
Name: "no-ing-class",
},
Spec: extensions.IngressSpec{
TLS: []extensions.IngressTLS{{
Spec: net_v1.IngressSpec{
TLS: []net_v1.IngressTLS{{
SecretName: noIngClassSecret,
}},
},
},
&extensions.Ingress{
&net_v1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Namespace: ns,
Name: "different-secret-name",
......@@ -116,8 +117,8 @@ func TestIngsForTLSSecret(t *testing.T) {
ingressClassKey: ingClass,
},
},
Spec: extensions.IngressSpec{
TLS: []extensions.IngressTLS{{
Spec: net_v1.IngressSpec{
TLS: []net_v1.IngressTLS{{
SecretName: "different-secret-name",
}},
},
......
......@@ -36,7 +36,7 @@ import (
"code.uplex.de/uplex-varnish/k8s-ingress/pkg/varnish/vcl"
api_v1 "k8s.io/api/core/v1"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
)
......@@ -70,7 +70,7 @@ func (worker *NamespaceWorker) isVarnishIngSvc(svc *api_v1.Service) bool {
func (worker *NamespaceWorker) getIngsForSvc(
svc *api_v1.Service,
) (ings []*extensions.Ingress, status update.Status) {
) (ings []*net_v1.Ingress, status update.Status) {
allIngs, err := worker.ing.List(labels.Everything())
if err != nil {
if errors.IsNotFound(err) {
......@@ -91,8 +91,8 @@ func (worker *NamespaceWorker) getIngsForSvc(
continue
}
cpy := ing.DeepCopy()
if cpy.Spec.Backend != nil {
if cpy.Spec.Backend.ServiceName == svc.Name {
if cpy.Spec.DefaultBackend != nil {
if cpy.Spec.DefaultBackend.Service.Name == svc.Name {
ings = append(ings, cpy)
}
}
......@@ -101,7 +101,7 @@ func (worker *NamespaceWorker) getIngsForSvc(
continue
}
for _, p := range rules.IngressRuleValue.HTTP.Paths {
if p.Backend.ServiceName == svc.Name {
if p.Backend.Service.Name == svc.Name {
ings = append(ings, cpy)
}
}
......@@ -129,7 +129,7 @@ func (worker *NamespaceWorker) enqueueIngressForService(
}
requeued := make([]string, 0, len(ings))
for _, ing := range ings {
if !worker.isVarnishIngress(ing) {
if !worker.isVikingIngress(ing) {
continue
}
worker.queue.Add(&SyncObj{Type: Update, Obj: ing})
......@@ -147,7 +147,7 @@ func (worker *NamespaceWorker) enqueueIngressForService(
// Return true if changes in Varnish services may lead to changes in
// the VCL config generated for the Ingress.
func (worker *NamespaceWorker) isVarnishInVCLSpec(ing *extensions.Ingress) bool {
func (worker *NamespaceWorker) isVarnishInVCLSpec(ing *net_v1.Ingress) bool {
vcfgs, err := worker.vcfg.List(labels.Everything())
if err != nil {
worker.log.Warnf("Error retrieving VarnishConfigs in "+
......
......@@ -41,7 +41,7 @@ import (
"code.uplex.de/uplex-varnish/k8s-ingress/pkg/varnish/vcl"
api_v1 "k8s.io/api/core/v1"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
)
// Don't return error (requeuing the vcfg) if either of Ingresses or
......@@ -50,7 +50,7 @@ import (
func (worker *NamespaceWorker) enqueueIngsForVcfg(
vcfg *vcr_v1alpha1.VarnishConfig) update.Status {
svc2ing := make(map[*api_v1.Service]*extensions.Ingress)
svc2ing := make(map[*api_v1.Service]*net_v1.Ingress)
ings, err := worker.ing.List(labels.Everything())
if errors.IsNotFound(err) {
return update.MakeNoop("VarnishConfig %s/%s: no Ingresses "+
......@@ -61,7 +61,7 @@ func (worker *NamespaceWorker) enqueueIngsForVcfg(
return update.MakeRecoverable("%v", err)
}
for _, ing := range ings {
if !worker.isVarnishIngress(ing) {
if !worker.isVikingIngress(ing) {
continue
}
vSvc, err := worker.getVarnishSvcForIng(ing)
......
......@@ -34,11 +34,11 @@ import (
"time"
api_v1 "k8s.io/api/core/v1"
extensions "k8s.io/api/extensions/v1beta1"
net_v1 "k8s.io/api/networking/v1"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/kubernetes"
core_v1_listers "k8s.io/client-go/listers/core/v1"
ext_listers "k8s.io/client-go/listers/extensions/v1beta1"
net_v1_listers "k8s.io/client-go/listers/networking/v1"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/workqueue"
......@@ -68,7 +68,7 @@ type NamespaceWorker struct {
hController *haproxy.Controller
queue workqueue.RateLimitingInterface
listers *Listers
ing ext_listers.IngressNamespaceLister
ing net_v1_listers.IngressNamespaceLister
svc core_v1_listers.ServiceNamespaceLister
endp core_v1_listers.EndpointsNamespaceLister
tsecr core_v1_listers.SecretNamespaceLister
......@@ -97,8 +97,8 @@ func (worker *NamespaceWorker) event(obj interface{}, evtType, reason,
}
kind := "Unknown"
switch eventObj.(type) {
case *extensions.Ingress:
ing, _ := eventObj.(*extensions.Ingress)
case *net_v1.Ingress:
ing, _ := eventObj.(*net_v1.Ingress)
worker.recorder.Eventf(ing, evtType, reason, msgFmt, args...)
kind = "Ingress"
case *api_v1.Service:
......@@ -171,7 +171,7 @@ func (worker *NamespaceWorker) dispatch(obj interface{}) update.Status {
switch syncObj.Type {
case Add:
switch syncObj.Obj.(type) {
case *extensions.Ingress:
case *net_v1.Ingress:
return worker.addIng(key)
case *api_v1.Service:
return worker.addSvc(key)
......@@ -191,7 +191,7 @@ func (worker *NamespaceWorker) dispatch(obj interface{}) update.Status {
}
case Update:
switch syncObj.Obj.(type) {
case *extensions.Ingress:
case *net_v1.Ingress:
return worker.updateIng(key)
case *api_v1.Service:
return worker.updateSvc(key)
......@@ -218,7 +218,7 @@ func (worker *NamespaceWorker) dispatch(obj interface{}) update.Status {
deletedObj = deleted.Obj
}
switch deletedObj.(type) {
case *extensions.Ingress:
case *net_v1.Ingress:
return worker.deleteIng(deletedObj)
case *api_v1.Service:
return worker.deleteSvc(deletedObj)
......
apiVersion: extensions/v1beta1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: other-ingress
......@@ -12,10 +12,16 @@ spec:
http:
paths:
- path: /this
pathType: ImplementationSpecific
backend:
serviceName: this-svc
servicePort: 80
service:
name: this-svc
port:
number: 80
- path: /that
pathType: ImplementationSpecific
backend:
serviceName: that-svc
servicePort: 80
service:
name: that-svc
port:
number: 80
......@@ -40,7 +40,7 @@ rules:
- create
- patch
- apiGroups:
- extensions
- networking.k8s.io
resources:
- ingresses
verbs:
......@@ -48,7 +48,7 @@ rules:
- watch
- get
- apiGroups:
- "extensions"
- networking.k8s.io
resources:
- ingresses/status
verbs:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment