Comments (7)
Hi @calexandre
Thank you for reporting this edge case. The field spec.loadBalancerClass
is indeed immutable. And since we do not set the field's value when the gateway operator creates the initial service based on the corresponding Gateway's config, the cloud provider's default value will be used. It seems that after deploying the Service in the cluster, AWS's controller will immediately set this immutable field based on the annotations. Although it should not be modified, they do it anyway. Could not find anything useful based on this online, if you got anything please post it in the comments.
Does this Error get raised only once?
If it works as expected maybe we should leave it as of now and create a note in the docs to raise attention that "AWS....".
@rg0now Maybe in the upcoming releases we could support an additional annotation to set the spec.loadBalancerClass
field by default when creating the Service. However, it might be problematic because the user needs to know which `aws-loadbalancer-' combination comes with whatever LoadBalancer class. AND it is just AWS we do not know how other cloud providers handle this.
from stunner.
@davidkornel for now it only affects AWS, but it will change in the future because the spec.loadBalancerClass
is part of the service
spec from official Kubernetes documentation.
It behaves very much like the spec.ingressClass
on the ingress
resource.
Now on my end, the stunner
error I posted above, is happening on every reconciliation loop (about 1 or 2 times per minute). What are the implications of the error on the stunner
side? Without that answer I cannot quantify the severity of the issue...
from stunner.
I asked whether it happens only once or every time to see if it blocks the service update totally or not. If it happens on every reconciliation it blocks the update process totally (I think). As I see from that point we lose control over the service since we cannot update it, however deletion should work. Thus a modification to the Gateway resource should not apply to the service.
from stunner.
I asked whether it happens only once or every time to see if it blocks the service update totally or not. If it happens on every reconciliation it blocks the update process totally (I think). As I see from that point we lose control over the service since we cannot update it, however deletion should work. Thus a modification to the Gateway resource should not apply to the service.
Okay, so if we do not update the gateway, despite the error there should be no problems right?
from stunner.
Okay, so if we do not update the gateway, despite the error there should be no problems right?
Yes, you're right. But it's still a bug though, thanks a lot for reporting it!
The solution would be to special-case the code that updates Services here:
- If the Service new Service (which we are about to DeepCopy) contains a nil
spec.loadBalancerClass
then we should leave thespec.loadBalancerClass
on the existing Service intact. This should fix this error. - If the new and the existing Service both contain a non-nil
spec.loadBalancerClass
and the two classes differ, then we should delete the existing Service and recreate it with the newspec.loadBalancerClass
(this is a super-intrusive update, public IPs and NodePorts will change, but this should be a relatively rare occurrence).
I'm wondering whether changing controllerutil.CreateOrUpdate
to controllerutil.CreateOrPatch
would automatically fix this without special-casing. We'll need to do some testing to see this.
from stunner.
Sounds great!
Let me know if you need anything else on my end for reproduction purposes...
from stunner.
Fixed in l7mp/stunner-gateway-operator@81c2eaf
from stunner.
Related Issues (20)
- Cannot apply GatewayClass from README.md on K8s v1.27 HOT 2
- Integrity check fails on passwords containing `$` [was: Auth server return bad url] HOT 24
- help - intermitent failures connecting to workers on `cloudretro` example on AWS + EKS + ALB HOT 16
- Support for Auth Secret authentication instead of username/password HOT 5
- Request for providing images for arm architecture (raspberry pi) HOT 7
- Make Stunner react faster to Gateway API changes HOT 1
- Rewrite `stunnerctl` in Go HOT 5
- Generate static yamls on release HOT 3
- Publish workflow fails if separately pushed commits are too rapid
- Make a better job at documenting that STUNner ignores the port in backend Services HOT 1
- Question: Can stunner be used as a pure relay server HOT 3
- Use of Nodeport instead of LoadBalancer HOT 10
- UDPRoutes from other namespaces are not getting attached HOT 11
- Question: Route based on host? HOT 10
- doc: Code snippets of some examples rendered incorrectly on readthedocs HOT 5
- Stunner service External IP still pending HOT 5
- Stunner service still in pending status HOT 5
- Pod Can't connect the stunner server HOT 2
- How debug problem? HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from stunner.