Skip to content

Commit

Permalink
New external command for scenareos where LBs are attached externally …
Browse files Browse the repository at this point in the history
…not explicitly via feed (#238)

* Working GCP feed with GKE ingress controller, external and internal

* External command that doesn't attach to external load baalncers

* Add external status updater

* Logging

* Flags for external and internal host name

* Flags for external and internal host name

* Formatting

* Rename to static
  • Loading branch information
chbatey authored Sep 29, 2021
1 parent 0c49f62 commit f7a314c
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 1 deletion.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ Examples:
If this flag is set, the namespace on which the ingress is defined should have all of the passed in labels.

## Ingress status
When using the [ELB](#elb), [NLB](#nlb) or [Merlin](#merlin) updaters, the ingress status will be updated with relevant
When using the [ELB](#elb), [NLB](#nlb), [Static](#static) or [Merlin](#merlin) updaters, the ingress status will be updated with relevant
load balancer information. This can then be used with other controllers such as `external-dns` which can set DNS for any
given ingress using the ingress status.

Expand All @@ -234,6 +234,12 @@ updater supports two different types: `internal` and `internet-facing`. These tw
An ingress can select which load balancer it wants to be associated with by setting the `sky.uk/frontend-scheme`
annotation to either `internal` or `internet-facing`.

### Static
The static updater sets an Ingress's status hostname to a static value.
Two values are supported: `external-hostname` and `internal-hostname`.
An ingress can select which hostname it wants to be associated with by setting the `sky.uk/frontend-scheme`
annotation to either `internal` or `internet-facing`.

## Running feed-ingress on privileged ports
feed-ingress can be run on privileged ports by defining the `NET_BIND_SERVICE` Linux capability.

Expand Down
49 changes: 49 additions & 0 deletions external/status.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package external

import (
"github.com/sky-uk/feed/controller"
"github.com/sky-uk/feed/k8s"
k8sStatus "github.com/sky-uk/feed/k8s/status"
v1 "k8s.io/api/core/v1"
)

// Config for External status updater.
type Config struct {
InternalHostname string
ExternalHostname string
KubernetesClient k8s.Client
}
type status struct {
internalHostname string
externalHostname string
loadBalancers map[string]v1.LoadBalancerStatus
kubernetesClient k8s.Client
}

// New creates a new External status updater.
func New(conf Config) (controller.Updater, error) {
return &status{
internalHostname: conf.InternalHostname,
externalHostname: conf.ExternalHostname,
loadBalancers: make(map[string]v1.LoadBalancerStatus),
kubernetesClient: conf.KubernetesClient,
}, nil
}

func (s *status) Start() error {
s.loadBalancers["internal"] = k8sStatus.GenerateLoadBalancerStatus([]string{s.internalHostname})
s.loadBalancers["internet-facing"] = k8sStatus.GenerateLoadBalancerStatus([]string{s.externalHostname})
return nil
}

func (s *status) Stop() error {
return nil
}

func (s *status) Health() error {
return nil
}

func (s *status) Update(ingresses controller.IngressEntries) error {
return k8sStatus.Update(ingresses, s.loadBalancers, s.kubernetesClient)
}
46 changes: 46 additions & 0 deletions feed-ingress/cmd/static.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package cmd

import (
"github.com/sky-uk/feed/controller"
"github.com/sky-uk/feed/external"
"github.com/sky-uk/feed/k8s"
"github.com/spf13/cobra"
)

var (
externalHostname string
internalHostName string
)

var externalCmd = &cobra.Command{
Use: "static",
Short: "Static hostname set for internal and external ingress",
Run: func(cmd *cobra.Command, args []string) {
runCmd(empty)
},
}

func init() {
rootCmd.AddCommand(externalCmd)

externalCmd.Flags().StringVar(&externalHostname, "external-hostname", "",
"Hostname for external ingress")
externalCmd.Flags().StringVar(&internalHostName, "internal-hostname", "",
"Hostname for internal ingress")

}

func empty(kubernetesClient k8s.Client, updaters []controller.Updater) ([]controller.Updater, error) {

config := external.Config{
InternalHostname: internalHostName,
ExternalHostname: externalHostname,
KubernetesClient: kubernetesClient,
}
statusUpdater, err := external.New(config)
if err != nil {
return nil, err
}

return append(updaters, statusUpdater), nil
}

0 comments on commit f7a314c

Please sign in to comment.