Dear Eric
Yes, I think it's the root cause.
and sure, I've posted the issue on GitHub.
Thanks
Eric Wittmann <eric.wittmann(a)redhat.com> 於 2018年12月14日 週五 上午4:30寫道:
Very interesting, thanks Jon. So if I understand correctly, the
problem
is that the Client has a contract for API1 (published to GW1) and a
contract for API2 (published to GW2). And so when registering a client,
we're trying to send Contracts for APIs that don't exist on the GW. So
yeah, filtering the list of Contracts during registration makes sense. We
should file this as a bug in Apiman (on GitHub). Would you be willing to
do that?
https://github.com/apiman/apiman/issues
-Eric
On Thu, Dec 13, 2018 at 1:54 AM Jon Huang <chttl582(a)gmail.com> wrote:
> Dear Eric
>
> I spent some time to track this issue.
> First I hit the status API (GATEWAY_API_URL/system/status) and got
> following response:
> {
> "id": "apiman-gateway-api",
> "name": "API Gateway REST API",
> "description": "The API Gateway REST API is used by the API
Manager
> to publish APIs and register clients. You can use it directly if you wish,
> but if you are utilizing the API Manager then it's probably best to avoid
> invoking this API directly.",
> "version": "1.5.2-SNAPSHOT",
> "up": true
> }
> seems OK, then I hit the register client API (PUT GATEWAY_API_URL
> /clients) to retrieve further information, which returned an
> ApiNotFoundException.
> After reviewing the payload, I found the register client API sent every
> contract info to the gateway endpoint. (ex: contract A & B to Gateway 2,
> refer to following diagram)
> {
> "organizationId": "ORG",
> "clientId": "CLIENT",
> "version": "1.0",
> "apiKey": "1763bc30-64af-4fd8-877e-1382c1a2cac2",
> "contracts": [{
> "apiOrgId": "ORG",
> "apiId": "API1",
> "apiVersion": "1.0",
> "plan": "plan",
> "policies": []
> }, {
> "apiOrgId": "ORG",
> "apiId": "API2",
> "apiVersion": "1.0",
> "plan": "plan",
> "policies": []
> }
> ]
> }
>
> [image: image.png]
>
> So if there is an contract's which its API publishing to another gateway
> leads to 404 not found exception. (ex: contract A info sent to Gateway 2)
> Maybe filtering the register client API payload or preventing API manager
> UI from creating contract between APIs with different gateways can solve
> this issue. (or is there any other solution?)
> Thanks.
>
>
> Eric Wittmann <eric.wittmann(a)redhat.com> 於 2018年12月6日 週四 下午9:47寫道:
>
>> Your diagram looks exactly right. I don't know why you are getting a
>> 404 error when trying to register the client. My best guess is that your
>> Gateway 2 configuration is actually incorrect and that the "Test
Gateway"
>> function is returning a false positive somehow. Can you post the
>> configuration settings you are using for *BOTH* of your Gateways? (I
>> assume you can successfully publish an API to Gateway 1).
>>
>> You should be able to manually confirm your Gateway settings using e.g.
>> curl or postman. There is an endpoint on the Gateway API that you can hit:
>>
>> GATEWAY_API_URL/system/status
>>
>> You'll need to provide auth info for this to work, but it will return a
>> JSON response like this:
>>
>> {
>> "id": "xyz",
>> "name": "Apiman Gateway API",
>> "description": "... something here ...",
>> "version": "x.y.z",
>> "up": true
>> }
>>
>> The UI should be checking that endpoint when you click the "Test
>> Gateway" button, but perhaps there's a bug in that.
>>
>> If the above endpoint can be hit and verified, then I'm at a complete
>> loss as to why you'd be getting a 404 when trying to publish! The
>> implication is that the Gateway API endpoint that the UI is attempting to
>> use is missing. But if /system/status can be found, then everything else
>> should be available too!
>>
>> @Marc Savy <msavy(a)redhat.com> - any thoughts on this?
>>
>> -Eric
>>
>>
>> On Thu, Dec 6, 2018 at 3:02 AM Jon Huang <chttl582(a)gmail.com> wrote:
>>
>>> Dear Eric
>>>
>>> Thanks for your explanation.
>>> I tried to deploy another gateway with a new storage(Elasticsearch) and
>>> configure API to publish on the new one. (API manager version 1.5.1)
>>> However when I tried to create a contract between API and client apps
>>> then re-register client apps, error happened.
>>> It seems API manager fails to connect to gateway2. (But UI-> Manage
>>> Gateways -> Edit Gateway -> Test Gateway returns *Gateway
>>> Configuration Valid*)
>>> (io.apiman.manager.api.rest.contract.exceptions.ActionException:
>>> Failed to register client.)
>>> I put detail log in attachment if you are interested.
>>> Thanks
>>>
>>> simple diagram for my deployment test.
>>> [image: image.png]
>>>
>>>
>>> Volk, Florian <Florian.Volk(a)scheer-group.com> 於 2018年11月30日 週五
>>> 下午10:24寫道:
>>>
>>>> Hi Eric,
>>>>
>>>>
>>>>
>>>> thanks for this detailed answer J
>>>>
>>>> This is quite interesting. We didn’t expected this behavior. Maybe it
>>>> would be good to place this in the documentation, maybe with this picture
;)
>>>>
>>>>
>>>>
>>>> But this raises a few new questions for us. I try to explain:
>>>>
>>>>
>>>>
>>>> · Do we need for *alternate* setup two UIs if we don’t want
>>>> to use the REST interface or CLI-Tool?
>>>>
>>>> o One for «Gateway Alpha» and one for «Gateway Beta»?
>>>>
>>>> o Because I think you can only connect one elasticseach instance
>>>> with the UI. Am I right on this?
>>>>
>>>> o What about the metrics in this use case à leads to two UIs?
>>>>
>>>>
>>>>
>>>> · For the «one logical gateway»
>>>>
>>>> o If I understand you correctly this would mean that I also have to
>>>> configure only one gateway in my UI and can add X more without adding
them
>>>> into the UI.
>>>> I just have to point them against the same elasticsearch instance.
>>>>
>>>> I also post this mail to the github issue, so we can stay within the
>>>> mailinglist.
>>>>
>>>>
>>>>
>>>> Thanks again,
>>>>
>>>> Florian
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> *Von:* Eric Wittmann <eric.wittmann(a)redhat.com>
>>>> *Gesendet:* Friday, 30 November 2018 14:57
>>>> *An:* Volk, Florian <Florian.Volk(a)scheer-group.com>
>>>> *Cc:* chttl582(a)gmail.com; Marc Savy <marc.savy(a)redhat.com>; Kihm,
>>>> Benjamin <Benjamin.Kihm(a)scheer-group.com>; Gebert, Alfred <
>>>> Alfred.Gebert(a)scheer-group.com>; apiman-user(a)lists.jboss.org
>>>> *Betreff:* Re: [Apiman-user] [DKIM] Re: publish api to specific
>>>> gateway
>>>>
>>>>
>>>>
>>>> Sure no problem. The typical use-case for having multiple Gateway
>>>> nodes is to scale the gateway layer horizontally and then put a load
>>>> balancer in front of them. So for example you might start up 5 apiman
>>>> gateway instances and configure them all to use the same Elasticsearch
>>>> instance for persistence (i.e. where to store configuration info like
which
>>>> APIs have been published). In this use-case, every gateway instance has
>>>> the same set of APIs "published" to it. You can publish an API
from the
>>>> UI/manager to **any** of the gateway instances and they will all know
about
>>>> that API. This is the "Single Logical Gateway" use-case -- the
UI/manager
>>>> and all consumers don't know or care how many gateway nodes there are
-
>>>> there could be 1 node, or there could be 100. It behaves the same
>>>> logically.
>>>>
>>>>
>>>>
>>>> An **alternate** use case for having multiple gateways is when you
>>>> actually want different APIs to be deployed to different gateways. So
>>>> let's say you wanted Gateway Alpha to be able to proxy traffic to
APIs A,
>>>> B, and C. Then you have Gateway Beta which you want to proxy traffic to
>>>> APIs C, D, and E. In that case, consumer traffic MUST be routed through
>>>> Gateway Alpha in order to access APIs A and B. Consumer traffic MUST be
>>>> routed through Gateway Beta to access APIs D and E. Finally, consumer
>>>> traffic can be routed to **either** Gateway Alpha or Gateway Beta in
order
>>>> to access API C. Think of this as the "Two Logical Gateways"
use-case.
>>>>
>>>>
>>>>
>>>> In order to achieve the "Two Logical Gateways" use-case, you
will need
>>>> **two** separate persistence stores (Elasticsearch instances). Then you
>>>> configure Gateway Alpha to use persistence store #1 and configure
Gateway
>>>> Beta to use persistence store #2.
>>>>
>>>>
>>>>
>>>> Note that you can have multiple gateway nodes for EACH of the two
>>>> logical gateways. So for example you could have 5 gateway instances all
>>>> pointing to persistence store #1 - these 5 nodes would make up a single
>>>> logical gateway called "Gateway Alpha". Then you could have 10
gateway
>>>> instances all pointing to persistence store #2 - and these would be a
>>>> single logical gateway called "Gateway Beta".
>>>>
>>>>
>>>>
>>>> Here is a diagram of what the architecture might look like:
>>>>
>>>>
>>>>
>>>> [image: image.png]
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, Nov 30, 2018 at 8:38 AM Volk, Florian <
>>>> Florian.Volk(a)scheer-group.com> wrote:
>>>>
>>>> Hi Eric,
>>>>
>>>>
>>>>
>>>> now I’m confused. We use Elasticsearch as backend. If I understand you
>>>> correctly it would mean that we have to setup an Elasticsearch instance
for
>>>> each gateway?
>>>>
>>>> On the other point, if the gateways operate as logical unit, why is
>>>> there a configuration option in the ui?
>>>>
>>>>
>>>>
>>>> Can you explain this a little bit more detailed? Maybe you have a
>>>> configuration example.
>>>>
>>>>
>>>>
>>>> Regards,
>>>> Florian
>>>>
>>>>
>>>>
>>>> *Von:* Eric Wittmann <eric.wittmann(a)redhat.com>
>>>> *Gesendet:* Friday, 30 November 2018 14:22
>>>> *An:* Volk, Florian <Florian.Volk(a)scheer-group.com>
>>>> *Cc:* chttl582(a)gmail.com; Marc Savy <marc.savy(a)redhat.com>; Kihm,
>>>> Benjamin <Benjamin.Kihm(a)scheer-group.com>; Gebert, Alfred <
>>>> Alfred.Gebert(a)scheer-group.com>; apiman-user(a)lists.jboss.org
>>>> *Betreff:* Re: [Apiman-user] [DKIM] Re: publish api to specific
>>>> gateway
>>>>
>>>>
>>>>
>>>> Are both gateways using the same persistent storage? Each gateway
>>>> would need separate, independent persistence otherwise they will behave
as
>>>> a single "logical" gateway.
>>>>
>>>>
>>>>
>>>> -Eric
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, Nov 30, 2018 at 4:39 AM Volk, Florian <
>>>> Florian.Volk(a)scheer-group.com> wrote:
>>>>
>>>> Hello together,
>>>>
>>>>
>>>>
>>>> I was interested in this and made a short test in my loacal
>>>> environment and I am able to reproduce this.
>>>>
>>>> I created a ticket on github for this (
>>>>
https://github.com/apiman/apiman/issues/711). We may can fix this
>>>> shortly.
>>>>
>>>>
>>>>
>>>> Regards,
>>>>
>>>> Florian
>>>>
>>>>
>>>>
>>>> *Von:* apiman-user-bounces(a)lists.jboss.org <
>>>> apiman-user-bounces(a)lists.jboss.org> *Im Auftrag von *Jon Huang
>>>> *Gesendet:* Friday, 30 November 2018 03:28
>>>> *An:* marc.savy(a)redhat.com
>>>> *Cc:* apiman-user(a)lists.jboss.org
>>>> *Betreff:* [DKIM] Re: [Apiman-user] publish api to specific gateway
>>>>
>>>>
>>>>
>>>> Dear Marc
>>>>
>>>>
>>>>
>>>> Yes I untick another gateway however request towards both gateways
>>>> still works.
>>>>
>>>> Besides I tried to publish API via admin REST API (post api version
>>>> then put gateway info), both gateways forwards request too.
>>>>
>>>> Before filing a bug is there any apigw setting I shall check? (such as
>>>> parameter in apiman.properties or etc...)
>>>>
>>>> Thanks for your help.
>>>>
>>>> Regards
>>>>
>>>> Marc Savy <marc.savy(a)redhat.com> 於 2018年11月21日 週三 下午9:35寫道:
>>>>
>>>> Apologies for the terribly slow reply. We've had so much spam
I've
>>>> missed legitimate emails like this.
>>>>
>>>>
>>>>
>>>> Did you explicitly untick the other gateway? Was this via the UI or
>>>> the API?
>>>>
>>>>
>>>>
>>>> Did you resolve this issue? If not, please file a bug:
>>>>
https://github.com/apiman/apiman/issues
>>>>
>>>>
>>>>
>>>> On Thu, 4 Oct 2018 at 05:00, Jon Huang <chttl582(a)gmail.com> wrote:
>>>>
>>>> Dears
>>>>
>>>>
>>>>
>>>> I had set up 2 gateways.
>>>>
>>>> When I new an API, I have to choose which gateway to publish. (select
>>>> list at Gateway section in the implementation tab).
>>>>
>>>> However after creating a client app and contract for test, I found
>>>> request via another gateway still works.
>>>>
>>>> (I guest when publishing to gateway 1 and request via gateway 2 shall
>>>> fail)
>>>>
>>>> Am I misunderstanding or I miss some settings to make it work?
>>>>
>>>> Thanks
>>>>
>>>> _______________________________________________
>>>> Apiman-user mailing list
>>>> Apiman-user(a)lists.jboss.org
>>>>
https://lists.jboss.org/mailman/listinfo/apiman-user
>>>>
>>>> _______________________________________________
>>>> Apiman-user mailing list
>>>> Apiman-user(a)lists.jboss.org
>>>>
https://lists.jboss.org/mailman/listinfo/apiman-user
>>>>
>>>>