argoproj-labs / rollouts-plugin-trafficrouter-gatewayapi

The Argo Rollouts plugin implementing the Kubernetes Gateway API specification for using different traffic providers in progressive delivery scenarios
https://rollouts-plugin-trafficrouter-gatewayapi.readthedocs.io/en/latest/
Apache License 2.0
94 stars 19 forks source link

feat: configurable HTTP route version #56

Closed tommy351 closed 2 months ago

tommy351 commented 5 months ago

Some Gateway API implementations do not support Gateway API v1 yet. (e.g. GKE) I added a new flag http-route-api-version for users to configure HTTP route version during plugin initialization. This feature requires https://github.com/argoproj/argo-rollouts/pull/2992 which is introduced in Argo Rollouts v1.7.0-rc1.

trafficRouterPlugins:
  name: argoproj-labs/gatewayAPI
  location: https://github.com/argoproj-labs/rollouts-plugin-trafficrouter-gatewayapi/releases/download/v0.2.0/gateway-api-plugin-linux-amd64
  args:
    - "--http-route-api-version"
    - v1beta1
Philipp-Plotnikov commented 5 months ago

@tommy351 did you find examples when v1 doesnt work correctly with versions that are less than v1 ? I tried it with several traffic providers with beta versions and it worked well. If you found so example, can you share it with us, please ?

kostis-codefresh commented 5 months ago

The problem with this Pr is that it instantly doubles the testing and maintenance effort as we will need to see what happens this both 1.0 and pre 1.0 releases

Also if this flag stays as a permanent feature we will need to create a compatibility table with versions of plugin vs versions of gateway api which in the long run might be too much

What I suggest is to have two releases of the plugin and let people downgrade if their provider doesn't support 1.0

After all this is supposed to be a temporary case. What do you think @tommy351 ?

tommy351 commented 5 months ago

GKE doesn't support v1 currently, and users can't install newer CRDs. I think having two releases is also fine for me.

Philipp-Plotnikov commented 5 months ago

@tommy351 it doesn't mean that you can't use gateway api with v1, did you find traffic provider where you had a problem ? You can use versions less than v1 but use gateway api with v1, I tested and locally for me it worked, if you had problem, please share it with us

tommy351 commented 5 months ago

The plugin prints this error without this fix. It's not because I didn't create a corresponding HTTPRoute resource. The plugin can't use v1 API because the corresponding version doesn't exist on the cluster at all.

time="2024-04-30T03:54:39Z" level=error msg="rollout syncHandler error: failed to set weight via plugin: the server could not find the requested resource (get httproutes.gate
way.networking.k8s.io test)" namespace=default rollout=test
Philipp-Plotnikov commented 5 months ago

The plugin prints this error without this fix. It's not because I didn't create a corresponding HTTPRoute resource. The plugin can't use v1 API because the corresponding version doesn't exist on the cluster at all.


time="2024-04-30T03:54:39Z" level=error msg="rollout syncHandler error: failed to set weight via plugin: the server could not find the requested resource (get httproutes.gate

way.networking.k8s.io test)" namespace=default rollout=test

I will be near the computer on the evening, but did you try to install CRD of gateway api of v1 and create HTTPRoute with beta version ? I remember I installed CRD of v1 and created beta HTTPRoute, but not sure I had in cluster CRD of beta version. (I can't now check it but I think I only had v1 gateway CRD, traffic provider that supports beta version and routes with beta versions and all was good)

tommy351 commented 5 months ago

I just tried installing v1 CRDs on a GKE cluster. It's impossible to override the CRDs installed by GKE. When I executed the following command, it didn't fail but the CRDs didn't changed either.

kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml
kostis-codefresh commented 5 months ago

I think the gateway api is actually lead by Google. So it is really strange that they don't support it.

Do you have an account manager that you can contact and ask them about it?

I mean if they intend to support 1.0 real soon maybe we just need to wait?

tommy351 commented 5 months ago

I just found that Google will update their CRDs on 1.29.3. It should be released a few months later.

https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#architecture

kostis-codefresh commented 3 months ago

@tommy351 Do I understand correctly that Google now supports Gateway API 1.0 and this PR is no longer needed?