Is there a tool which checks if the connections (ingress --> service --> deployment --> pod) are valid?
There is no specific tool that does this, and I think doing this in a useful fashion would be difficult.
When creating a resource, you can generally get two responses from the API: Either (a) it works, or (b) it fails, and you receive an error message. It would be possible to implement an admission controller that performs this sort of check, but there's no way for it to deliver a "warning". So consider a situation in which you're performing an initial deployment of your application resources: it's very likely that they will be deployed "out of order", such that e.g. you are creating the Ingress object before the corresponding Service. With our hypothetical admission controller, this would cause the Ingress deployment to fail, which isn't what we want.
You could potentially write a tool to which you would provide a set of manifests as input, and it would perform the validation locally, but this would only be useful if the resources you are deploying form a "closed set": if you're adding an Ingress, but the corresponding Service already exists in the cluster and not in your local files, this idea wouldn't work. It would also fail if you are relying on labels or other metadata that are added dynamically to your resources after they have been deployed.
So the only real option is to write some sort of tool that inspects your resources after they have been deployed so that (a) everything exists in the API and (b) any dynamic modifications have already happened. This might be possible, but I would argue it would be more effective to perform traditional service availability checks instead -- that is, if you're deploying an application that offers a web service at https://example.com
, have a monitoring framework that will alert you if https://example.com
isn't available (which could happen because of a typo in your label selector, or a missing resource, or for a variety of other reasons).
That doesn't give you the same level of granularity you may be hoping for, but it's trivial to implement and solves the general problem of "was my deployment successful".