Skip to content

Commit

Permalink
Refactor/rm v1beta ingress (#1999)
Browse files Browse the repository at this point in the history
* delete tests and ingressv1 definitions

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* update version
make test work
remove v1beta1 uris and polling from clusterclient

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* remove v1beta1 code and definitions

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* fix staticcheck findings

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* remove v1 config overwrite for test api

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* remove v1 configuration override

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* fail fast should be fine in case api error is tested
add required Un-/Marshal functions for targetport handling

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* migrate to routeserv tests to v1 ingress

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* deprecate -kubernetes-ingress-v1 flag and Config.KubernetesIngressV1
remove all v1beta1 occurences in routesrv and routesrv tests

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* fix config default change

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* remove all occurences of ingress v1 option in flags and options, such that people will see it

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* drop last references to KubernetesIngressV1

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* remove ingress v1beta1

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* use generated routegroup crd

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* migrate v1beta1 to v1 in helm chart

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* fix merge conflicts
fix: vet errors
fix config test

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* fix: competing merge jsut after rebase to master with Kind: list had IngressesNamespaceFmt

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

* bump minor version to highlight the remove of k8s v1

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>

Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>
  • Loading branch information
szuecs authored Jan 11, 2023
1 parent e1d2f4c commit c083bd7
Show file tree
Hide file tree
Showing 291 changed files with 1,022 additions and 5,770 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v0.14
v0.15
4 changes: 0 additions & 4 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,6 @@ type Config struct {
KubernetesHealthcheck bool `yaml:"kubernetes-healthcheck"`
KubernetesHTTPSRedirect bool `yaml:"kubernetes-https-redirect"`
KubernetesHTTPSRedirectCode int `yaml:"kubernetes-https-redirect-code"`
KubernetesIngressV1 bool `yaml:"kubernetes-ingress-v1"`
KubernetesIngressClass string `yaml:"kubernetes-ingress-class"`
KubernetesRouteGroupClass string `yaml:"kubernetes-routegroup-class"`
WhitelistedHealthCheckCIDR string `yaml:"whitelisted-healthcheck-cidr"`
Expand Down Expand Up @@ -436,7 +435,6 @@ func NewConfig() *Config {
flag.BoolVar(&cfg.KubernetesHealthcheck, "kubernetes-healthcheck", true, "automatic healthcheck route for internal IPs with path /kube-system/healthz; valid only with kubernetes")
flag.BoolVar(&cfg.KubernetesHTTPSRedirect, "kubernetes-https-redirect", true, "automatic HTTP->HTTPS redirect route; valid only with kubernetes")
flag.IntVar(&cfg.KubernetesHTTPSRedirectCode, "kubernetes-https-redirect-code", 308, "overrides the default redirect code (308) when used together with -kubernetes-https-redirect")
flag.BoolVar(&cfg.KubernetesIngressV1, "kubernetes-ingress-v1", false, "enable kubernetes ingress version v1, defaults to version v1beta1")
flag.StringVar(&cfg.KubernetesIngressClass, "kubernetes-ingress-class", "", "ingress class regular expression used to filter ingress resources for kubernetes")
flag.StringVar(&cfg.KubernetesRouteGroupClass, "kubernetes-routegroup-class", "", "route group class regular expression used to filter route group resources for kubernetes")
flag.StringVar(&cfg.WhitelistedHealthCheckCIDR, "whitelisted-healthcheck-cidr", "", "sets the iprange/CIDRS to be whitelisted during healthcheck")
Expand Down Expand Up @@ -654,7 +652,6 @@ func (c *Config) ToRouteSrvOptions() routesrv.Options {
KubernetesHealthcheck: c.KubernetesHealthcheck,
KubernetesHTTPSRedirect: c.KubernetesHTTPSRedirect,
KubernetesHTTPSRedirectCode: c.KubernetesHTTPSRedirectCode,
KubernetesIngressV1: c.KubernetesIngressV1,
KubernetesIngressClass: c.KubernetesIngressClass,
KubernetesRouteGroupClass: c.KubernetesRouteGroupClass,
KubernetesPathMode: c.KubernetesPathMode,
Expand Down Expand Up @@ -806,7 +803,6 @@ func (c *Config) ToOptions() skipper.Options {
KubernetesHealthcheck: c.KubernetesHealthcheck,
KubernetesHTTPSRedirect: c.KubernetesHTTPSRedirect,
KubernetesHTTPSRedirectCode: c.KubernetesHTTPSRedirectCode,
KubernetesIngressV1: c.KubernetesIngressV1,
KubernetesIngressClass: c.KubernetesIngressClass,
KubernetesRouteGroupClass: c.KubernetesRouteGroupClass,
WhitelistedHealthCheckCIDR: whitelistCIDRS,
Expand Down
53 changes: 3 additions & 50 deletions dataclients/kubernetes/clusterclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import (

const (
ingressClassKey = "kubernetes.io/ingress.class"
IngressesClusterURI = "/apis/extensions/v1beta1/ingresses"
IngressesV1ClusterURI = "/apis/networking.k8s.io/v1/ingresses"
ZalandoResourcesClusterURI = "/apis/zalando.org/v1"
RouteGroupsName = "routegroups"
Expand All @@ -36,7 +35,6 @@ const (
EndpointsClusterURI = "/api/v1/endpoints"
SecretsClusterURI = "/api/v1/secrets"
defaultKubernetesURL = "http://localhost:8001"
IngressesNamespaceFmt = "/apis/extensions/v1beta1/namespaces/%s/ingresses"
IngressesV1NamespaceFmt = "/apis/networking.k8s.io/v1/namespaces/%s/ingresses"
routeGroupsNamespaceFmt = "/apis/zalando.org/v1/namespaces/%s/routegroups"
ServicesNamespaceFmt = "/api/v1/namespaces/%s/services"
Expand Down Expand Up @@ -65,7 +63,6 @@ type clusterClient struct {
routeGroupClass *regexp.Regexp
ingressClass *regexp.Regexp
httpClient *http.Client
ingressV1 bool

ingressLabelSelectors string
servicesLabelSelectors string
Expand Down Expand Up @@ -149,13 +146,8 @@ func newClusterClient(o Options, apiURL, ingCls, rgCls string, quit <-chan struc
return nil, err
}

ingressURI := IngressesClusterURI
if o.KubernetesIngressV1 {
ingressURI = IngressesV1ClusterURI
}
c := &clusterClient{
ingressV1: o.KubernetesIngressV1,
ingressesURI: ingressURI,
ingressesURI: IngressesV1ClusterURI,
routeGroupsURI: routeGroupsClusterURI,
servicesURI: ServicesClusterURI,
endpointsURI: EndpointsClusterURI,
Expand Down Expand Up @@ -219,11 +211,7 @@ func toLabelSelectorQuery(selectors map[string]string) string {
}

func (c *clusterClient) setNamespace(namespace string) {
if c.ingressV1 {
c.ingressesURI = fmt.Sprintf(IngressesV1NamespaceFmt, namespace)
} else {
c.ingressesURI = fmt.Sprintf(IngressesNamespaceFmt, namespace)
}
c.ingressesURI = fmt.Sprintf(IngressesV1NamespaceFmt, namespace)
c.routeGroupsURI = fmt.Sprintf(routeGroupsNamespaceFmt, namespace)
c.servicesURI = fmt.Sprintf(ServicesNamespaceFmt, namespace)
c.endpointsURI = fmt.Sprintf(EndpointsNamespaceFmt, namespace)
Expand Down Expand Up @@ -312,21 +300,6 @@ func (c *clusterClient) ingressClassMissmatch(m *definitions.Metadata) bool {
return false
}

// filterIngressesByClass will filter only the ingresses that have the valid class, these are
// the defined one, empty string class or not class at all
func (c *clusterClient) filterIngressesByClass(items []*definitions.IngressItem) []*definitions.IngressItem {
validIngs := []*definitions.IngressItem{}

for _, ing := range items {
if c.ingressClassMissmatch(ing.Metadata) {
continue
}
validIngs = append(validIngs, ing)
}

return validIngs
}

// filterIngressesV1ByClass will filter only the ingresses that have the valid class, these are
// the defined one, empty string class or not class at all
func (c *clusterClient) filterIngressesV1ByClass(items []*definitions.IngressV1Item) []*definitions.IngressV1Item {
Expand Down Expand Up @@ -365,20 +338,6 @@ func sortByMetadata(slice interface{}, getMetadata func(int) *definitions.Metada
})
}

func (c *clusterClient) loadIngresses() ([]*definitions.IngressItem, error) {
var il definitions.IngressList
if err := c.getJSON(c.ingressesURI+c.ingressLabelSelectors, &il); err != nil {
log.Debugf("requesting all ingresses failed: %v", err)
return nil, err
}

log.Debugf("all ingresses received: %d", len(il.Items))
fItems := c.filterIngressesByClass(il.Items)
log.Debugf("filtered ingresses by ingress class: %d", len(fItems))
sortByMetadata(fItems, func(i int) *definitions.Metadata { return fItems[i].Metadata })
return fItems, nil
}

func (c *clusterClient) loadIngressesV1() ([]*definitions.IngressV1Item, error) {
var il definitions.IngressV1List
if err := c.getJSON(c.ingressesURI+c.ingressLabelSelectors, &il); err != nil {
Expand Down Expand Up @@ -501,14 +460,9 @@ func (c *clusterClient) fetchClusterState() (*clusterState, error) {
var (
err error
ingressesV1 []*definitions.IngressV1Item
ingresses []*definitions.IngressItem
secrets map[definitions.ResourceID]*secret
)
if c.ingressV1 {
ingressesV1, err = c.loadIngressesV1()
} else {
ingresses, err = c.loadIngresses()
}
ingressesV1, err = c.loadIngressesV1()
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -543,7 +497,6 @@ func (c *clusterClient) fetchClusterState() (*clusterState, error) {
}

return &clusterState{
ingresses: ingresses,
ingressesV1: ingressesV1,
routeGroups: routeGroups,
services: services,
Expand Down
1 change: 0 additions & 1 deletion dataclients/kubernetes/clusterstate.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (

type clusterState struct {
mu sync.Mutex
ingresses []*definitions.IngressItem
ingressesV1 []*definitions.IngressV1Item
routeGroups []*definitions.RouteGroupItem
services map[definitions.ResourceID]*service
Expand Down
1 change: 0 additions & 1 deletion dataclients/kubernetes/clusterstate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ func benchmarkCachedEndpoints(b *testing.B, n int) {
}

cs := &clusterState{
ingresses: nil,
ingressesV1: nil,
routeGroups: nil,
services: nil,
Expand Down
61 changes: 61 additions & 0 deletions dataclients/kubernetes/definitions/ingressv1.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,64 @@ func GetHostsFromIngressRulesV1(ing *IngressV1Item) []string {
}
return hostList
}

// ResourceID is a stripped down version of Metadata used to identify resources in a cache map
type ResourceID struct {
Namespace string
Name string
}

/* required from v1beta1 */

// BackendPort is used for TargetPort similar to Kubernetes intOrString type
type BackendPort struct {
Value interface{}
}

// String converts BackendPort to string
func (p BackendPort) String() string {
switch v := p.Value.(type) {
case string:
return v
case int:
return strconv.Itoa(v)
default:
return ""
}
}

// Number converts BackendPort to int
func (p BackendPort) Number() (int, bool) {
i, ok := p.Value.(int)
return i, ok
}
func (p *BackendPort) UnmarshalJSON(value []byte) error {
if value[0] == '"' {
var s string
if err := json.Unmarshal(value, &s); err != nil {
return err
}

p.Value = s
return nil
}

var i int
if err := json.Unmarshal(value, &i); err != nil {
return err
}

p.Value = i
return nil
}

func (p BackendPort) MarshalJSON() ([]byte, error) {
switch p.Value.(type) {
case string, int:
return json.Marshal(p.Value)
default:
return nil, errInvalidPortType
}
}

var errInvalidPortType = errors.New("invalid port type")
154 changes: 0 additions & 154 deletions dataclients/kubernetes/definitions/ingressv1beta1.go

This file was deleted.

Loading

0 comments on commit c083bd7

Please sign in to comment.