question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Ingress await semantics are too strict

See original GitHub issue

Hi

After upgrading to version 3.10.1 We are getting this error on creation of a ingress object

the Kubernetes API server reported that “ingress-system/gateway-default-8i88hdw3” failed to fully initialize or become live: ‘gateway-default-8i88hdw3’ timed out waiting to be Ready Ingress has at least one rule that does not target any Service. Field ‘.spec.rules[].http.paths[].backend.service.name’ may not match any active Service

We are using a default Ingress object without any http rules other then host. This has allowed us to share TLS setting with other Ingress objects. This is suppoted by the nginx controller we use.

var defaultIngress = new Pulumi.Kubernetes.Networking.V1.Ingress(
	GetLogicalName("default"), new IngressArgs
	{
		Metadata = new ObjectMetaArgs
		{
			Namespace = _namespace.Metadata.Apply(c => c.Name),
			Annotations =
			{
				{ "nginx.ingress.kubernetes.io/ssl-redirect", "false" }
			}
		},
		Spec = new IngressSpecArgs
		{
			IngressClassName = "nginx",
			Tls ={
				new IngressTLSArgs
				{
					Hosts = PublicIpFqdn,
					SecretName = _certificate.Apply(c=> c.KubernetesSecretName)!
				}
			},
			Rules = new IngressRuleArgs
			{
				Host = PublicIpFqdn
			}
		}

	}, new()
	{
		Parent = this,
		DependsOn = _chart.GetChildren()
	});

Issue details

Steps to reproduce

  1. Provision a ingress object without any http rules

Expected: The update to have no breaking changes Actual: Did have a breaking change

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:8 (5 by maintainers)

github_iconTop GitHub Comments

3reactions
sziegler-skyhookcommented, Nov 24, 2021

I am also running into this problem using the AWS ALB Controller + K8S Ingresses.

The ALB controller uses annotations to forward traffic to a specific target group and therefore the backend service name is not an actual K8S service. (see here: https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/#traffic-routing)

Here is my use case:

kind: Ingress
metadata:
  name: ingress-a
  namespace: default
  annotations:
    alb.ingress.kubernetes.io/actions.forward-to-9443: '{"type":"forward","targetGroupARN":"{{ .Values.aws.primary.TargetGroup }}"}'
  spec:
  rules:
  - http:
      paths:
        - pathType: Prefix
          path: /a
          backend:
            service:
              name: forward-to-9443
              port:
                name: use-annotation
        - pathType: Prefix
          path: /b
          backend:
            service:
              name: forward-to-9443
              port:
                name: use-annotation
        - pathType: Exact
          path: /c
          backend:
            service:
              name: forward-to-9443
              port:
                name: use-annotation

This results in error: Ingress has at least one rule that does not target any Service. Field '.spec.rules[].http.paths[].backend.service.name' may not match any active Service because the service forward-to-9443 does not exist, it is an AWS ALB Annotation.

1reaction
viveklakcommented, Nov 24, 2021

I renamed the issue to use this as a tracking issue to consider relaxing the constraints currently imposed for ingress await logic. The suggested workaround for the moment is to use the pulumi.com/skipAwait: "true" annotation on the affected ingress objects. However, attempts to extract loadbalancer addresses etc. will have to resort to refreshing or polling the ingress object in such cases.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Configuration keys - HAProxy Ingress
Configuration key Data type Scope Default value acme‑emails email1,email2,… Global acme‑endpoint Global acme‑expiring number of days Global 30
Read more >
Inter-Canister Query Calls (Community Consideration) - #37 by ulan ...
I chatted with Ulan about one-shot messaging a bit more. I really like the idea of using them for update calls but for...
Read more >
Async/Await - Best Practices in Asynchronous Programming
Async void methods have different error-handling semantics. When an exception is thrown out of an async Task or async Task<T> method, that exception...
Read more >
Deployment Graph — Ray 1.13.0 - the Ray documentation
Note: This feature is in Alpha, so APIs are subject to change. ... import InputNode @serve.deployment async def preprocessor(input_data: str): """Simple ...
Read more >
await - JavaScript - MDN Web Docs
The await operator is used to wait for a Promise and get its fulfillment value. It can only be used inside an async...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found