diff --git a/cmd/controller/app/controller.go b/cmd/controller/app/controller.go index d25426e29..58f3bea37 100644 --- a/cmd/controller/app/controller.go +++ b/cmd/controller/app/controller.go @@ -230,18 +230,29 @@ func buildControllerContext(ctx context.Context, opts *options.ControllerOptions return nil, nil, fmt.Errorf("error creating kubernetes client: %s", err.Error()) } + // check if the gateway API CRDs are available + var gatewayAvailable bool + d := cl.Discovery() + resources, err := d.ServerResourcesForGroupVersion(gwapi.GroupVersion.String()) + switch { + case apierrors.IsNotFound(err): + gatewayAvailable = false + log.Info("the Gateway API CRDs do not seem to be present, cert-manager will keep retrying watching for them") + case err != nil: + return nil, nil, fmt.Errorf("while checking if the Gateway API CRD is installed: %s", err.Error()) + case len(resources.APIResources) == 0: + gatewayAvailable = false + log.Info("the Gateway API CRDs do not seem to be present, cert-manager will keep retrying watching for them") + default: + gatewayAvailable = true + } + // cert-manager will try watching the Gateway resources with an exponential // back-off, which allows the user to install the CRDs after cert-manager // itself. Let's let the user know that the CRDs have not been found yet. + if opts.EnabledControllers().Has(shimgw.ControllerName) { - d := cl.Discovery() - resources, err := d.ServerResourcesForGroupVersion(gwapi.GroupVersion.String()) - switch { - case apierrors.IsNotFound(err): - log.Info("the Gateway API CRDs do not seem to be present, cert-manager will keep retrying watching for them") - case err != nil: - return nil, nil, fmt.Errorf("while checking if the Gateway API CRD is installed: %s", err.Error()) - case len(resources.APIResources) == 0: + if !gatewayAvailable { log.Info("the Gateway API CRDs do not seem to be present, cert-manager will keep retrying watching for them") } } @@ -307,12 +318,10 @@ func buildControllerContext(ctx context.Context, opts *options.ControllerOptions KubeSharedInformerFactory: kubeSharedInformerFactory, SharedInformerFactory: sharedInformerFactory, GWShared: gwSharedInformerFactory, - // TODO (@jakexks) / code reviewer: should this be automatically enabled or disabled based on discovering the gateway - // api or a flag? - GatewaySolverEnabled: true, - Namespace: opts.Namespace, - Clock: clock.RealClock{}, - Metrics: metrics.New(log, clock.RealClock{}), + GatewaySolverEnabled: gatewayAvailable, + Namespace: opts.Namespace, + Clock: clock.RealClock{}, + Metrics: metrics.New(log, clock.RealClock{}), ACMEOptions: controller.ACMEOptions{ HTTP01SolverImage: opts.ACMEHTTP01SolverImage, HTTP01SolverResourceRequestCPU: HTTP01SolverResourceRequestCPU, diff --git a/deploy/crds/crd-challenges.yaml b/deploy/crds/crd-challenges.yaml index c43f94307..5ee5e5bc1 100644 --- a/deploy/crds/crd-challenges.yaml +++ b/deploy/crds/crd-challenges.yaml @@ -389,7 +389,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -906,7 +906,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -937,7 +937,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -1454,7 +1454,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -1863,7 +1863,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -2380,7 +2380,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP. type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -2411,7 +2411,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -2928,7 +2928,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -3338,7 +3338,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -3855,7 +3855,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -3865,7 +3865,7 @@ spec: description: The ingress class to use when creating Ingress resources to solve ACME challenges that use this challenge solver. Only one of 'class' or 'name' may be specified. type: string ingressTemplate: - description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges + description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges. type: object properties: metadata: @@ -4403,7 +4403,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -4813,7 +4813,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -5330,7 +5330,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -5340,7 +5340,7 @@ spec: description: The ingress class to use when creating Ingress resources to solve ACME challenges that use this challenge solver. Only one of 'class' or 'name' may be specified. type: string ingressTemplate: - description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges + description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges. type: object properties: metadata: @@ -5361,7 +5361,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -5878,7 +5878,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. diff --git a/deploy/crds/crd-clusterissuers.yaml b/deploy/crds/crd-clusterissuers.yaml index db655797a..bc3b97f04 100644 --- a/deploy/crds/crd-clusterissuers.yaml +++ b/deploy/crds/crd-clusterissuers.yaml @@ -423,7 +423,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -940,7 +940,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -971,7 +971,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -1488,7 +1488,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -2109,7 +2109,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -2626,7 +2626,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP. type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -2657,7 +2657,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -3174,7 +3174,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -3797,7 +3797,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -4314,7 +4314,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -4324,7 +4324,7 @@ spec: description: The ingress class to use when creating Ingress resources to solve ACME challenges that use this challenge solver. Only one of 'class' or 'name' may be specified. type: string ingressTemplate: - description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges + description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges. type: object properties: metadata: @@ -4862,7 +4862,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -5485,7 +5485,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -6002,7 +6002,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -6012,7 +6012,7 @@ spec: description: The ingress class to use when creating Ingress resources to solve ACME challenges that use this challenge solver. Only one of 'class' or 'name' may be specified. type: string ingressTemplate: - description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges + description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges. type: object properties: metadata: @@ -6033,7 +6033,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -6550,7 +6550,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. diff --git a/deploy/crds/crd-issuers.yaml b/deploy/crds/crd-issuers.yaml index ec3083866..5917b2e7c 100644 --- a/deploy/crds/crd-issuers.yaml +++ b/deploy/crds/crd-issuers.yaml @@ -423,7 +423,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -940,7 +940,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -971,7 +971,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -1488,7 +1488,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -2109,7 +2109,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -2626,7 +2626,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP. type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -2657,7 +2657,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -3174,7 +3174,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -3797,7 +3797,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -4314,7 +4314,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -4324,7 +4324,7 @@ spec: description: The ingress class to use when creating Ingress resources to solve ACME challenges that use this challenge solver. Only one of 'class' or 'name' may be specified. type: string ingressTemplate: - description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges + description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges. type: object properties: metadata: @@ -4862,7 +4862,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. @@ -5485,7 +5485,7 @@ spec: additionalProperties: type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -6002,7 +6002,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string ingress: description: The ingress based HTTP01 challenge solver will solve challenges by creating or modifying Ingress resources in order to route requests for '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are provisioned by cert-manager for each Challenge to be completed. @@ -6012,7 +6012,7 @@ spec: description: The ingress class to use when creating Ingress resources to solve ACME challenges that use this challenge solver. Only one of 'class' or 'name' may be specified. type: string ingressTemplate: - description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges + description: Optional ingress template used to configure the ACME challenge solver ingress used for HTTP01 challenges. type: object properties: metadata: @@ -6033,7 +6033,7 @@ spec: description: The name of the ingress resource that should have ACME challenge solving routes inserted into it in order to solve HTTP01 challenges. This is typically used in conjunction with ingress controllers like ingress-gce, which maintains a 1:1 mapping between external IPs and ingress resources. type: string podTemplate: - description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges + description: Optional pod template used to configure the ACME challenge solver pods used for HTTP01 challenges. type: object properties: metadata: @@ -6550,7 +6550,7 @@ spec: description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string serviceType: - description: Optional service type for Kubernetes solver service + description: Optional service type for Kubernetes solver service. Supported values are NodePort or ClusterIP (default). type: string selector: description: Selector selects a set of DNSNames on the Certificate resource that should be solved using this challenge solver. If not specified, the solver will be treated as the 'default' solver with the lowest priority, i.e. if any other solver has a more specific match, it will be used instead. diff --git a/pkg/apis/acme/v1/types_issuer.go b/pkg/apis/acme/v1/types_issuer.go index 2cf1586ce..6c380efb3 100644 --- a/pkg/apis/acme/v1/types_issuer.go +++ b/pkg/apis/acme/v1/types_issuer.go @@ -198,6 +198,7 @@ type CertificateDNSNameSelector struct { // Typically this is accomplished through creating 'routes' of some description // that configure ingress controllers to direct traffic to 'solver pods', which // are responsible for responding to the ACME server's HTTP requests. +// Only one of Ingress / Gateway can be specified. type ACMEChallengeSolverHTTP01 struct { // The ingress based HTTP01 challenge solver will solve challenges by // creating or modifying Ingress resources in order to route requests for @@ -213,7 +214,8 @@ type ACMEChallengeSolverHTTP01 struct { } type ACMEChallengeSolverHTTP01Ingress struct { - // Optional service type for Kubernetes solver service + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP (default). // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` @@ -232,12 +234,12 @@ type ACMEChallengeSolverHTTP01Ingress struct { Name string `json:"name,omitempty"` // Optional pod template used to configure the ACME challenge solver pods - // used for HTTP01 challenges + // used for HTTP01 challenges. // +optional PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplate `json:"podTemplate,omitempty"` // Optional ingress template used to configure the ACME challenge solver - // ingress used for HTTP01 challenges + // ingress used for HTTP01 challenges. // +optional IngressTemplate *ACMEChallengeSolverHTTP01IngressTemplate `json:"ingressTemplate,omitempty"` } @@ -245,17 +247,17 @@ type ACMEChallengeSolverHTTP01Ingress struct { // The ACMEChallengeSolverHTTP01Gateway solver will create HTTPRoute objects for a Gateway class // routing to an ACME challenge solver pod. type ACMEChallengeSolverHTTP01Gateway struct { - // Optional service type for Kubernetes solver service + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP (default). // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` // The labels to set on HTTPRoute resources to solve ACME // challenges that use this challenge solver. - // +optional Labels map[string]string `json:"labels,omitempty"` // Optional pod template used to configure the ACME challenge solver pods - // used for HTTP01 challenges + // used for HTTP01 challenges. // +optional PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplate `json:"podTemplate,omitempty"` } diff --git a/pkg/apis/acme/v1alpha2/types_issuer.go b/pkg/apis/acme/v1alpha2/types_issuer.go index bbfcc4cfe..659447f57 100644 --- a/pkg/apis/acme/v1alpha2/types_issuer.go +++ b/pkg/apis/acme/v1alpha2/types_issuer.go @@ -197,6 +197,7 @@ type CertificateDNSNameSelector struct { // Typically this is accomplished through creating 'routes' of some description // that configure ingress controllers to direct traffic to 'solver pods', which // are responsible for responding to the ACME server's HTTP requests. +// Only one of Ingress / Gateway can be specified. type ACMEChallengeSolverHTTP01 struct { // The ingress based HTTP01 challenge solver will solve challenges by // creating or modifying Ingress resources in order to route requests for @@ -212,7 +213,8 @@ type ACMEChallengeSolverHTTP01 struct { } type ACMEChallengeSolverHTTP01Ingress struct { - // Optional service type for Kubernetes solver service + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP (default). // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` @@ -231,7 +233,7 @@ type ACMEChallengeSolverHTTP01Ingress struct { Name string `json:"name,omitempty"` // Optional pod template used to configure the ACME challenge solver pods - // used for HTTP01 challenges + // used for HTTP01 challenges. // +optional PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplate `json:"podTemplate,omitempty"` @@ -242,17 +244,17 @@ type ACMEChallengeSolverHTTP01Ingress struct { } type ACMEChallengeSolverHTTP01Gateway struct { - // Optional service type for Kubernetes solver service + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP (default). // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` // The labels to set on HTTPRoute resources to solve ACME // challenges that use this challenge solver. - // +optional Labels map[string]string `json:"labels,omitempty"` // Optional pod template used to configure the ACME challenge solver pods - // used for HTTP01 challenges + // used for HTTP01 challenges. // +optional PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplate `json:"podTemplate,omitempty"` } diff --git a/pkg/apis/acme/v1alpha3/types_issuer.go b/pkg/apis/acme/v1alpha3/types_issuer.go index 7a4e13926..5e1e7f6bd 100644 --- a/pkg/apis/acme/v1alpha3/types_issuer.go +++ b/pkg/apis/acme/v1alpha3/types_issuer.go @@ -197,6 +197,7 @@ type CertificateDNSNameSelector struct { // Typically this is accomplished through creating 'routes' of some description // that configure ingress controllers to direct traffic to 'solver pods', which // are responsible for responding to the ACME server's HTTP requests. +// Only one of Ingress / Gateway can be specified. type ACMEChallengeSolverHTTP01 struct { // The ingress based HTTP01 challenge solver will solve challenges by // creating or modifying Ingress resources in order to route requests for @@ -212,7 +213,8 @@ type ACMEChallengeSolverHTTP01 struct { } type ACMEChallengeSolverHTTP01Ingress struct { - // Optional service type for Kubernetes solver service + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP (default). // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` @@ -231,7 +233,7 @@ type ACMEChallengeSolverHTTP01Ingress struct { Name string `json:"name,omitempty"` // Optional pod template used to configure the ACME challenge solver pods - // used for HTTP01 challenges + // used for HTTP01 challenges. // +optional PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplate `json:"podTemplate,omitempty"` @@ -242,17 +244,17 @@ type ACMEChallengeSolverHTTP01Ingress struct { } type ACMEChallengeSolverHTTP01Gateway struct { - // Optional service type for Kubernetes solver service + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP. // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` // The labels to set on HTTPRoute resources to solve ACME // challenges that use this challenge solver. - // +optional Labels map[string]string `json:"labels,omitempty"` // Optional pod template used to configure the ACME challenge solver pods - // used for HTTP01 challenges + // used for HTTP01 challenges. // +optional PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplate `json:"podTemplate,omitempty"` } diff --git a/pkg/apis/acme/v1beta1/types_issuer.go b/pkg/apis/acme/v1beta1/types_issuer.go index 1e1e376de..5c919bb7c 100644 --- a/pkg/apis/acme/v1beta1/types_issuer.go +++ b/pkg/apis/acme/v1beta1/types_issuer.go @@ -212,7 +212,8 @@ type ACMEChallengeSolverHTTP01 struct { } type ACMEChallengeSolverHTTP01Ingress struct { - // Optional service type for Kubernetes solver service + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP (default). // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` @@ -236,23 +237,23 @@ type ACMEChallengeSolverHTTP01Ingress struct { PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplate `json:"podTemplate,omitempty"` // Optional ingress template used to configure the ACME challenge solver - // ingress used for HTTP01 challenges + // ingress used for HTTP01 challenges. // +optional IngressTemplate *ACMEChallengeSolverHTTP01IngressTemplate `json:"ingressTemplate,omitempty"` } type ACMEChallengeSolverHTTP01Gateway struct { - // Optional service type for Kubernetes solver service + // Optional service type for Kubernetes solver service. Supported values + // are NodePort or ClusterIP (default). // +optional ServiceType corev1.ServiceType `json:"serviceType,omitempty"` // The labels to set on HTTPRoute resources to solve ACME // challenges that use this challenge solver. - // +optional Labels map[string]string `json:"labels,omitempty"` // Optional pod template used to configure the ACME challenge solver pods - // used for HTTP01 challenges + // used for HTTP01 challenges. // +optional PodTemplate *ACMEChallengeSolverHTTP01IngressPodTemplate `json:"podTemplate,omitempty"` } diff --git a/pkg/issuer/acme/http/httproute.go b/pkg/issuer/acme/http/httproute.go index e8c8da049..64bbc941f 100644 --- a/pkg/issuer/acme/http/httproute.go +++ b/pkg/issuer/acme/http/httproute.go @@ -59,7 +59,7 @@ func (s *Solver) ensureGatewayHTTPRoute(ctx context.Context, ch *cmacme.Challeng return nil, err } - return nil, fmt.Errorf("not implemented") + return httpRoute, nil } func (s *Solver) getGatewayHTTPRoute(ctx context.Context, ch *cmacme.Challenge) (*gwapi.HTTPRoute, error) {