diff --git a/assets/components/openshift-router/deployment.yaml b/assets/components/openshift-router/deployment.yaml index 8834c39fdd..1621b7532d 100644 --- a/assets/components/openshift-router/deployment.yaml +++ b/assets/components/openshift-router/deployment.yaml @@ -63,6 +63,8 @@ spec: value: 1s - name: ROUTER_DOMAIN value: apps.{{ .BaseDomain }} + - name: ROUTER_IP_V4_V6_MODE + value: '{{ .RouterMode }}' livenessProbe: failureThreshold: 3 httpGet: diff --git a/pkg/components/controllers.go b/pkg/components/controllers.go index 6c7591a2c6..cecd870c31 100644 --- a/pkg/components/controllers.go +++ b/pkg/components/controllers.go @@ -176,10 +176,20 @@ func startIngressController(ctx context.Context, cfg *config.Config, kubeconfigP klog.Warningf("Failed to apply configMap %v: %v", cm, err) return err } + + routerMode := "v4" + if cfg.IsIPv6() { + routerMode = "v4v6" + if !cfg.IsIPv4() { + routerMode = "v6" + } + } + extraParams := assets.RenderParams{ "RouterNamespaceOwnership": cfg.Ingress.AdmissionPolicy.NamespaceOwnership == config.NamespaceOwnershipAllowed, "RouterHttpPort": *cfg.Ingress.Ports.Http, "RouterHttpsPort": *cfg.Ingress.Ports.Https, + "RouterMode": routerMode, } if err := assets.ApplyServices(ctx, svc, renderTemplate, renderParamsFromConfig(cfg, extraParams), kubeconfigPath); err != nil { klog.Warningf("Failed to apply service %v %v", svc, err) diff --git a/pkg/config/config.go b/pkg/config/config.go index bfc5eceb21..a21e3d48a6 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -404,6 +404,26 @@ func (c Config) UserNodeIP() string { return "" } +func (c Config) IsIPv4() bool { + for _, network := range c.Network.ClusterNetwork { + ip, _, _ := net.ParseCIDR(network) + if ip.To4() != nil { + return true + } + } + return false +} + +func (c Config) IsIPv6() bool { + for _, network := range c.Network.ClusterNetwork { + ip, _, _ := net.ParseCIDR(network) + if ip.To4() == nil { + return true + } + } + return false +} + var allHostnames []string func getAllHostnames() ([]string, error) { diff --git a/scripts/auto-rebase/rebase.sh b/scripts/auto-rebase/rebase.sh index 59c5a5f0f7..bfa1441f0e 100755 --- a/scripts/auto-rebase/rebase.sh +++ b/scripts/auto-rebase/rebase.sh @@ -690,6 +690,11 @@ EOF yq -i '.spec.template.spec.containers[0].env += {"name": "ROUTER_TCP_BALANCE_SCHEME", "value": "source"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml yq -i '.spec.template.spec.containers[0].env += {"name": "ROUTER_THREADS", "value": "4"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml yq -i '.spec.template.spec.containers[0].env += {"name": "SSL_MIN_VERSION", "value": "TLSv1.2"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml + # Not use proxy protocol due to lack of load balancer support + yq -i '.spec.template.spec.containers[0].env += {"name": "ROUTER_USE_PROXY_PROTOCOL", "value": "false"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml + yq -i '.spec.template.spec.containers[0].env += {"name": "GRACEFUL_SHUTDOWN_DELAY", "value": "1s"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml + yq -i '.spec.template.spec.containers[0].env += {"name": "ROUTER_DOMAIN", "value": "apps.{{ .BaseDomain }}"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml + yq -i '.spec.template.spec.containers[0].env += {"name": "ROUTER_IP_V4_V6_MODE", "value": "{{ .RouterMode }}"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml # TODO: Generate and volume mount the router-stats-default secret # yq -i '.spec.template.spec.containers[0].env += {"name": "STATS_PASSWORD_FILE", "value": "/var/lib/haproxy/conf/metrics-auth/statsPassword"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml # yq -i '.spec.template.spec.containers[0].env += {"name": "STATS_USERNAME_FILE", "value": "/var/lib/haproxy/conf/metrics-auth/statsUsername"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml @@ -719,10 +724,6 @@ EOF yq -i '.spec.replicas = 1' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml # Set deployment strategy type to Recreate. yq -i '.spec.strategy.type = "Recreate"' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml - # Not use proxy protocol due to lack of load balancer support - yq -i '.spec.template.spec.containers[0].env += {"name": "ROUTER_USE_PROXY_PROTOCOL", "value": "false"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml - yq -i '.spec.template.spec.containers[0].env += {"name": "GRACEFUL_SHUTDOWN_DELAY", "value": "1s"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml - yq -i '.spec.template.spec.containers[0].env += {"name": "ROUTER_DOMAIN", "value": "apps.{{ .BaseDomain }}"}' "${REPOROOT}"/assets/components/openshift-router/deployment.yaml # Configure LoadBalancer service yq -i '.metadata += {"name": "router-default", "namespace": "openshift-ingress"}' "${REPOROOT}"/assets/components/openshift-router/service-cloud.yaml yq -i '.spec.selector = {"ingresscontroller.operator.openshift.io/deployment-ingresscontroller": "default"}' "${REPOROOT}"/assets/components/openshift-router/service-cloud.yaml