Skip to content
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

Rollout model with istio and/or ambassador #1844

Closed
lluunn opened this issue Oct 23, 2018 · 10 comments
Closed

Rollout model with istio and/or ambassador #1844

lluunn opened this issue Oct 23, 2018 · 10 comments

Comments

@lluunn
Copy link
Contributor

lluunn commented Oct 23, 2018

Problem:
#1823 adds support for rolling out a new version of model, and send X% of traffic to it.
The request path is

ingress --> ambassador --> tfserving (version1 or version2)

However, it actually doesn't work because ambassador is not in istio service mesh, and Istio traffic management needs the client side to talk to Istio Pilot.
(so for ambassador --> tfserving, the client is ambassador)
Ambassador can deploy with Istio,
but we cannot inject istio sidecar to ambassador. (see issue)

So I think the options are

  1. Use ambassador to do canary rollout (see doc)
  2. Add an additional hop between ambassador and tfserving, which is in the istio mesh.
  3. Remove ambassador. We need to figure out how to do (dynamic) routing with istio then.

I think we don't want 1 as we are moving toward Istio.
2 is not ideal.
I will test if 3 can be done by Istio's VirtualService

cc @jlewi

@lluunn
Copy link
Contributor Author

lluunn commented Oct 23, 2018

related #1309

@lluunn
Copy link
Contributor Author

lluunn commented Oct 23, 2018

I think Istio's way to do edge routing is to use Gateway, and bind VirtualService to it.

@jlewi
Copy link
Contributor

jlewi commented Oct 24, 2018

It looks like Ambassador has ISTIO integration.
https://www.getambassador.io/user-guide/with-istio/

Does that work?

@lluunn
Copy link
Contributor Author

lluunn commented Oct 24, 2018

The integration means using ambassador at the edge in front of the Istio mesh (which is what we are doing now).
Problem is ambassador is not in service mesh

@lluunn
Copy link
Contributor Author

lluunn commented Oct 24, 2018

ambassador has an open issue on this: emissary-ingress/emissary#255

@jlewi
Copy link
Contributor

jlewi commented Oct 25, 2018

Could we use the ISTIO service Gateway as our dynamic reverse proxy rather than Ambassador?

I looked at this blog post about Ambassador and ISTIO
https://itnext.io/ambassador-and-istio-edge-proxy-and-service-mesh-814aac9f23df

I think the current way Ambassador works with ISTIO is that Ambassador routes traffic to a service inside the mesh (in the example the product page app). The product page then uses ISTIO to route traffic to its various backends.

In our case we want to expose outside the cluster an API that will serve models and split traffic between different model versions. In this case we don't have a service inside the mesh that can be a backend for Ambassador (e.g. we don't have a web app sending requests to the different version of the models).

/cc @kflynn

@aroundthecode any thoughts?

@lluunn
Copy link
Contributor Author

lluunn commented Oct 25, 2018

Yeah that's the direction I am exploring

@ukclivecox
Copy link
Contributor

We have an example in Seldon for using istio to route traffic to two versions (canary)
See docs and notebook link here

This is using Ambassador with Istio.

This was referenced Nov 5, 2018
@carmine carmine added this to the 0.4.0 milestone Nov 6, 2018
@jlewi
Copy link
Contributor

jlewi commented Nov 7, 2018

Talked to @lluunn; we have a solution and instructions.

Next step would be simplifying/automating the ISTIO install process. There is a separate issue #1909 for that.

@jlewi jlewi closed this as completed Nov 7, 2018
@vaibhavrtk
Copy link

@jlewi Can you please elaborate on the solution that you finally used.

surajkota pushed a commit to surajkota/kubeflow that referenced this issue Jun 13, 2022
…low#1844)

* remove load-restrictor kustomize flag and lint README markdown

* Set kustomize loader to RestrictionRootOnly in test_util.go

* review: undo changes to test scripts

* review: add note to reusing patches best practices
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants