1
0
mirror of https://github.com/rancher/rke.git synced 2025-04-27 11:21:08 +00:00

Merge pull request #2346 from nickgerace/master-ingress

Set default http backend to be optional
This commit is contained in:
Nick Gerace 2020-12-03 17:05:18 -05:00 committed by GitHub
commit b0ade73b59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 68 additions and 2 deletions

View File

@ -37,7 +37,6 @@ const (
UserAddonJobName = "rke-user-addon-deploy-job"
UserAddonIncludeJobName = "rke-user-includes-addons-deploy-job"
MetricsServerAddonResourceName = "rke-metrics-addon"
NginxIngressAddonAppName = "ingress-nginx"
KubeDNSAddonAppName = "kube-dns"
KubeDNSAutoscalerAppName = "kube-dns-autoscaler"
CoreDNSAutoscalerAppName = "coredns-autoscaler"
@ -47,6 +46,10 @@ const (
CoreDNSProvider = "coredns"
KubeDNSProvider = "kube-dns"
Nodelocal = "nodelocal"
NginxIngressAddonAppName = "ingress-nginx"
NginxIngressAddonDefaultBackendName = "default-http-backend"
NginxIngressAddonDefaultBackendNamespace = "ingress-nginx"
)
var DNSProviders = []string{KubeDNSProvider, CoreDNSProvider}
@ -66,6 +69,7 @@ type ingressOptions struct {
HTTPPort int
HTTPSPort int
NetworkMode string
DefaultBackend bool
UpdateStrategy *appsv1.DaemonSetUpdateStrategy
Tolerations []v1.Toleration
}
@ -557,7 +561,6 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{}
if err := c.doAddonDelete(ctx, IngressAddonResourceName, false); err != nil {
return err
}
log.Infof(ctx, "[ingress] ingress controller removed successfully")
} else {
log.Infof(ctx, "[ingress] ingress controller is disabled, skipping ingress controller")
@ -579,6 +582,7 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{}
HTTPPort: c.Ingress.HTTPPort,
HTTPSPort: c.Ingress.HTTPSPort,
NetworkMode: c.Ingress.NetworkMode,
DefaultBackend: *c.Ingress.DefaultBackend,
UpdateStrategy: &appsv1.DaemonSetUpdateStrategy{
Type: c.Ingress.UpdateStrategy.Strategy,
RollingUpdate: c.Ingress.UpdateStrategy.RollingUpdate,
@ -612,9 +616,26 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{}
return fmt.Errorf("Failed to apply default PodSecurityPolicy ClusterRole and ClusterRoleBinding: %v", err)
}
}
// After deployment of the new ingress controller based on the update strategy, remove the default backend as requested.
if !ingressConfig.DefaultBackend {
log.Infof(ctx, "[ingress] removing default backend service and deployment if they exist")
kubeClient, err := k8s.NewClient(c.LocalKubeConfigPath, c.K8sWrapTransport)
if err != nil {
return err
}
if err = k8s.DeleteServiceIfExists(ctx, kubeClient, NginxIngressAddonDefaultBackendName, NginxIngressAddonDefaultBackendNamespace); err != nil {
return err
}
if err = k8s.DeleteDeploymentIfExists(ctx, kubeClient, NginxIngressAddonDefaultBackendName, NginxIngressAddonDefaultBackendNamespace); err != nil {
return err
}
}
log.Infof(ctx, "[ingress] ingress controller %s deployed successfully", c.Ingress.Provider)
return nil
}
func (c *Cluster) removeDNSProvider(ctx context.Context, dnsprovider string) error {
AddonJobExists, err := addons.AddonJobExists(getAddonResourceName(dnsprovider)+"-deploy-job", c.LocalKubeConfigPath, c.K8sWrapTransport)
if err != nil {

View File

@ -141,6 +141,7 @@ var (
}
DefaultClusterProportionalAutoscalerLinearParams = v3.LinearAutoscalerParams{CoresPerReplica: 128, NodesPerReplica: 4, Min: 1, PreventSinglePointFailure: true}
DefaultMonitoringAddonReplicas = int32(1)
DefaultDefaultBackend = true
)
type ExternalFlags struct {
@ -808,6 +809,9 @@ func (c *Cluster) setAddonsDefaults() {
c.Ingress.HTTPSPort = DefaultHTTPSPort
}
if c.Ingress.DefaultBackend == nil {
c.Ingress.DefaultBackend = &DefaultDefaultBackend
}
}
func setDaemonsetAddonDefaults(updateStrategy *v3.DaemonSetUpdateStrategy) *v3.DaemonSetUpdateStrategy {

17
k8s/deployment.go Normal file
View File

@ -0,0 +1,17 @@
package k8s
import (
"context"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
func DeleteDeploymentIfExists(ctx context.Context, k8sClient *kubernetes.Clientset, name, namespace string) error {
err := k8sClient.AppsV1().Deployments(namespace).Delete(ctx, name, metav1.DeleteOptions{})
if err != nil && !errors.IsNotFound(err) {
return err
}
return nil
}

17
k8s/service.go Normal file
View File

@ -0,0 +1,17 @@
package k8s
import (
"context"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
func DeleteServiceIfExists(ctx context.Context, k8sClient *kubernetes.Clientset, name, namespace string) error {
err := k8sClient.CoreV1().Services(namespace).Delete(ctx, name, metav1.DeleteOptions{})
if err != nil && !errors.IsNotFound(err) {
return err
}
return nil
}

View File

@ -443,6 +443,8 @@ type IngressConfig struct {
NetworkMode string `yaml:"network_mode" json:"networkMode,omitempty"`
// Tolerations for Deployments
Tolerations []v1.Toleration `yaml:"tolerations" json:"tolerations,omitempty"`
// Enable or disable nginx default-http-backend
DefaultBackend *bool `yaml:"default_backend" json:"defaultBackend,omitempty" norman:"default=true"`
}
type ExtraEnv struct {

View File

@ -858,6 +858,11 @@ func (in *IngressConfig) DeepCopyInto(out *IngressConfig) {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.DefaultBackend != nil {
in, out := &in.DefaultBackend, &out.DefaultBackend
*out = new(bool)
**out = **in
}
return
}