Nice feature, but I think we should not implement it as a plugin, because
it is not a real plugin, but just a routing function in a specific scenario.
I think it should belong to Upstream, you can set additional rules for a
single Node.
In addition, I think the option "k8s_deployment_info" of upstream  is not
necessary, it limits the user's choice. Maybe we should propose a new
concept `Endpoint` to replace `Node`, and then make `grayscale` as a
conditional setting

YuanSheng Wang <[email protected]> 于2020年9月14日周一 下午12:09写道:

> nice feature, +1
>
> On Mon, Sep 14, 2020 at 11:54 AM Ming Wen <[email protected]> wrote:
>
> > cool, +1
> >
> > Thanks,
> > Ming Wen, Apache APISIX & Apache SkyWalking
> > Twitter: _WenMing
> >
> >
> > wei jin <[email protected]> 于2020年9月14日周一 上午11:16写道:
> >
> > > yes,  APISIX implement all feature in route object now, I think it is
> > also
> > > useful to implement in a plugin , and they can be combined to use
> > together.
> > >
> > > Ming Wen <[email protected]> 于2020年9月14日周一 上午9:17写道:
> > >
> > > > Hi, wei jin,
> > > > Do you mean to implement routing matching and dynamically modifying
> > > > upstream in the plugin?
> > > > Both of them are implemented in the router object now.
> > > > So the canary release is now bound to the router. It would be better
> if
> > > > there is a separate plugin to implement it.
> > > >
> > > > Thanks,
> > > > Ming Wen, Apache APISIX & Apache SkyWalking
> > > > Twitter: _WenMing
> > > >
> > > >
> > > > wei jin <[email protected]> 于2020年9月12日周六 下午4:51写道:
> > > >
> > > > > As we know , APISIX can configure and distribute traffic through
> > > powerful
> > > > > routing strategies. With this capability, we can achieve grayscale
> > > > > publishing.
> > > > >
> > > > > After the route is determined, we can again control the traffic to
> > the
> > > > > specified upstream through a plug-in, but it needs to be
> customized.
> > I
> > > > > propose that the community implement a version of the gray plug-in
> > that
> > > > > provides the following functions:
> > > > >
> > > > > 1. Specify matching conditions (for example, kv pairs of http
> > > > querystring,
> > > > > header and other parameters)
> > > > > 2. When a certain matching condition is met, specify upstream;
> > > > > 3. Specify the condition matching priority;
> > > > >
> > > > > Definition example:
> > > > >
> > > > > ```javascript
> > > > > {
> > > > > "grayscale":{
> > > > > "rules": [
> > > > > {
> > > > > "condition": [
> > > > > {
> > > > > "use": "header", // enum: uri_args/header/path_reg/default
> > > > > "key": "user_id",
> > > > > "values": [
> > > > > "U1",
> > > > > "U2",
> > > > > "U3"
> > > > > ],
> > > > > "operator": "anyOf" // enum: oneOf/anyOf/prefix/regular/...
> > > > > },
> > > > > ...
> > > > > ],
> > > > > "upstream": {},// upstream or upstreamId
> > > > > "priority": 10 // 0~100 The larger the value, the higher the
> priority
> > > > > },
> > > > > {
> > > > > "condition": [
> > > > > {
> > > > > "use": "header", // enum: uri_args/header/path_reg/default
> > > > > "key": "appkey",
> > > > > "values": [
> > > > > "dfaef-xfdafe-xj1kl3-1-jhilh1",
> > > > > "dfaef-xfdafe-xj1kl3-2-jhilh1",
> > > > > "dfaef-xfdafe-xj1kl3-3-jhilh1"
> > > > > ],
> > > > > "operator": "anyOf" // enum: oneOf/anyOf/prefix/regular/...
> > > > > },
> > > > > ...
> > > > > ],
> > > > > "upstream": {},// upstream or upstreamId
> > > > > "priority": 10 // 0~100 The larger the value, the higher the
> priority
> > > > > }
> > > > > ...
> > > > > ]
> > > > > }
> > > > > }
> > > > > ```
> > > > >
> > > >
> > >
> >
>
>
> --
>
> *MembPhis*
> My GitHub: https://github.com/membphis
> Apache APISIX: https://github.com/apache/incubator-apisix
>

Reply via email to