-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
the annotation "service-upstream" is not inherited by the "canary" ingress. #12823
Comments
not sure whether that's only a display issue. as set in:
|
Can you test that if you set the service-upstream on the carnary ingress, it does set the service IP instead of node IP/port? |
/triage needs-information |
@strongjz Yes it does set the clusterIP if we set service-upstream: true on the canary ingress. Please let me know if you need more information. we are wondering why the annotations on stable is not inherited to canary ingress. |
Carnary is for testing different versions of an application and possible different configurations, so this seems to be by design. We discussed this on the community call and wouldn't consider this a bug if it works if you set it directly on the canary. |
@strongjz we were wondering if we copy over the annotations from stable to canary to maintain consistency and avoid conflicts/different behaviors. The controller wouldn't cause any issues ex: conflicts if it tries to inherit stable ingress annotations in any flow , causing failures ? |
@strongjz do you know who maintains this document? "Note that when you mark an ingress as canary, then all the other non-canary annotations will be ignored (inherited from the corresponding main ingress) except nginx.ingress.kubernetes.io/load-balance, nginx.ingress.kubernetes.io/upstream-hash-by, and annotations related to session affinity. If you want to restore the original behavior of canaries when session affinity was ignored, set nginx.ingress.kubernetes.io/affinity-canary-behavior annotation with value legacy on the canary ingress definition." from this section, I think the annotation for the canary will inherit from the corresponding main ingress. but looks like this is not the current behaivour, at least the "server-upstream" is not "inherited". I'm thinking whether the "noserver": true make it happen, or something else? please help. |
/remove-kind bug |
/kind support |
Everyone on the project is responsible for keeping the documentation updated. Unfortunately, that section of the docs has not been updated in 8 years, so it's likely to be outdated. The majority of that code has not been updated for 2 to 7 years, so this very well may be a bug. IIUC service-upstream is not a canary-related annotation so that it will be ignored on a canary ingress and not inherited. |
++ @ElvinEfendi who contributed to this document in this commit: pr which implemented the canary feature FYI: |
What happened:
in this document:
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#known-issues
all the annotations should be ignored (actually inherrited from the main ingress).
but for the "service-upstream" annotation, if we use the "service-upstream": true in the main ingress.
and for the canary ingress, we do not specify it. then from the output of the
/dbg backends all
the backends are still the node ip/ports. not the service one.
could you please help check whether this is by design or just one bug?
What you expected to happen:
NGINX Ingress controller version (exec into the pod and run
/nginx-ingress-controller --version
):Kubernetes version (use
kubectl version
):Environment:
Cloud provider or hardware configuration:
OS (e.g. from /etc/os-release):
Kernel (e.g.
uname -a
):Install tools:
Please mention how/where was the cluster created like kubeadm/kops/minikube/kind etc.
Basic cluster related info:
kubectl version
kubectl get nodes -o wide
How was the ingress-nginx-controller installed:
helm ls -A | grep -i ingress
helm -n <ingresscontrollernamespace> get values <helmreleasename>
Current State of the controller:
kubectl describe ingressclasses
kubectl -n <ingresscontrollernamespace> get all -A -o wide
kubectl -n <ingresscontrollernamespace> describe po <ingresscontrollerpodname>
kubectl -n <ingresscontrollernamespace> describe svc <ingresscontrollerservicename>
Current state of ingress object, if applicable:
kubectl -n <appnamespace> get all,ing -o wide
kubectl -n <appnamespace> describe ing <ingressname>
Others:
kubectl describe ...
of any custom configmap(s) created and in useHow to reproduce this issue:
Anything else we need to know:
The text was updated successfully, but these errors were encountered: