service-proxy | API gateway for REST , OpenAPI , GraphQL and SOAP | REST library
kandi X-RAY | service-proxy Summary
Support
Quality
Security
License
Reuse
- Extract the cookie header .
- Adjust the certificate .
- Append a Set - Cookie header .
- Writes all parsers in a model .
- Gets the calls page .
- Main entry point .
- Adds a new schema resolver .
- Returns this event as an XMLEvent .
- Fills the regular expression with backrefs .
- Create the interceptor .
service-proxy Key Features
service-proxy Examples and Code Snippets
Trending Discussions on service-proxy
Trending Discussions on service-proxy
QUESTION
For some reason my 4.0.2 based code doesn't produce rx-fied service versions with codegen.
Both VertxEBProxy and VertxProxyHandler classes are created as expected though.
Here is a demo project: https://github.com/ashertarno/playground
Please see the required dependencies below:
implementation "io.vertx:vertx-core:$vertxVersion"
implementation "io.vertx:vertx-rx-java2:$vertxVersion"
implementation "io.vertx:vertx-codegen:$vertxVersion"
implementation "io.vertx:vertx-service-proxy:$vertxVersion"
implementation "io.vertx:vertx-rx-java2-gen:$vertxVersion"
annotationProcessor "io.vertx:vertx-codegen:$vertxVersion:processor"
annotationProcessor "io.vertx:vertx-service-proxy:$vertxVersion"
What would be missing in this case?
ANSWER
Answered 2021-Mar-09 at 17:25You have to add io.vertx:vertx-rx-java2-gen:$vertxVersion
as an annotationProcessor
and testAnnotationProcessor
. After I did that, I had the classes get generated:
./build/classes/java/main/me/tarno/playground/reactivex/BaseServiceProxy.class
./build/classes/java/test/me/tarno/playground/reactivex/TestProxy.class
QUESTION
I'm trying to use the latest Angular Material with Angular 9 but I encountered below problem
and here is my app.modul.ts
import { NgModule } from '@angular/core';
import { CommonModule, CurrencyPipe } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientJsonpModule } from '@angular/common/http';
import { HttpClientModule } from '@angular/common/http';
import { ModalModule } from 'ngx-bootstrap/modal';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
import { CollapseModule } from 'ngx-bootstrap/collapse';
import { TabsModule } from 'ngx-bootstrap/tabs';
import { NgxPaginationModule } from 'ngx-pagination';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { ServiceProxyModule } from '@shared/service-proxies/service-proxy.module';
import { SharedModule } from '@shared/shared.module';
import { HomeComponent } from '@app/home/home.component';
import { AboutComponent } from '@app/about/about.component';
// tenants
import { TenantsComponent } from '@app/tenants/tenants.component';
import { CreateTenantDialogComponent } from './tenants/create-tenant/create-tenant-dialog.component';
import { EditTenantDialogComponent } from './tenants/edit-tenant/edit-tenant-dialog.component';
// roles
import { RolesComponent } from '@app/roles/roles.component';
import { CreateRoleDialogComponent } from './roles/create-role/create-role-dialog.component';
import { EditRoleDialogComponent } from './roles/edit-role/edit-role-dialog.component';
// users
import { UsersComponent } from '@app/users/users.component';
import { CreateUserDialogComponent } from '@app/users/create-user/create-user-dialog.component';
import { EditUserDialogComponent } from '@app/users/edit-user/edit-user-dialog.component';
import { ChangePasswordComponent } from './users/change-password/change-password.component';
import { ResetPasswordDialogComponent } from './users/reset-password/reset-password.component';
// layout
import { HeaderComponent } from './layout/header.component';
import { HeaderLeftNavbarComponent } from './layout/header-left-navbar.component';
import { HeaderLanguageMenuComponent } from './layout/header-language-menu.component';
import { HeaderUserMenuComponent } from './layout/header-user-menu.component';
import { FooterComponent } from './layout/footer.component';
import { SidebarComponent } from './layout/sidebar.component';
import { SidebarLogoComponent } from './layout/sidebar-logo.component';
import { SidebarUserPanelComponent } from './layout/sidebar-user-panel.component';
import { SidebarMenuComponent } from './layout/sidebar-menu.component';
import { ChatComponent } from './chat/chat.component';
import { Chat2Component } from './chat2/chat2.component';
import { CitizenInterestsComponent } from './citizen-interests/citizen-interests.component';
import {MAT_CHECKBOX_CLICK_ACTION, MatCheckbox} from '@angular/material/checkbox';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
AboutComponent,
// tenants
TenantsComponent,
CreateTenantDialogComponent,
EditTenantDialogComponent,
// roles
RolesComponent,
CreateRoleDialogComponent,
EditRoleDialogComponent,
// users
UsersComponent,
CreateUserDialogComponent,
EditUserDialogComponent,
ChangePasswordComponent,
ResetPasswordDialogComponent,
// layout
HeaderComponent,
HeaderLeftNavbarComponent,
HeaderLanguageMenuComponent,
HeaderUserMenuComponent,
FooterComponent,
SidebarComponent,
SidebarLogoComponent,
SidebarUserPanelComponent,
SidebarMenuComponent,
ChatComponent,
Chat2Component,
CitizenInterestsComponent
],
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
HttpClientModule,
HttpClientJsonpModule,
ModalModule.forChild(),
BsDropdownModule,
CollapseModule,
TabsModule,
AppRoutingModule,
ServiceProxyModule,
SharedModule,
NgxPaginationModule,
MatCheckbox
],
providers: [],
entryComponents: [
// tenants
CreateTenantDialogComponent,
EditTenantDialogComponent,
// roles
CreateRoleDialogComponent,
EditRoleDialogComponent,
// users
CreateUserDialogComponent,
EditUserDialogComponent,
ResetPasswordDialogComponent
],
})
export class AppModule {}
ERROR in node_modules/@angular/material/checkbox/checkbox.d.ts:56:22 - error NG6002: Appears in the NgModule.imports of AppModule, but could not be resolved to an NgModule class. This likely means that the library (@angular/material/checkbox) which declares MatCheckbox has not been processed correctly by ngcc, or is not compatible with Angular Ivy. Check if a newer version of the library is available, and update if so. Also consider checking with the library's authors to see if the library is expected to be compatible with Ivy.
ANSWER
Answered 2020-Jun-18 at 08:50I found the solution here
I was imported Matcheckbox instead of MatCheckboxModule
before that, I ran this command npm ci I don't know if this affects but that what I did.
QUESTION
I am simply trying to add morgan to log my http calls. The two methods I have tried are:
- Adding it to the MySequence class:
export class MySequence extends MiddlewareSequence {
async handle(context: RequestContext) {
const finished = await this.invokeMiddleware(context, [morgan()]);
if (finished) {
return;
}
await super.handle(context);
}
}
- Adding it before calling the
this.sequence(MySequence)
in theapplication.ts
file:
export class MyAppApiApplication extends BootMixin(
ServiceMixin(RepositoryMixin(RestApplication)),
) {
constructor(options: ApplicationConfig = {}) {
super(options);
this.expressMiddleware(
morgan,
{},
{
injectConfiguration: 'watch',
key: 'middleware.morgan',
}
);
this.sequence(MySequence);
...
}
The first method was working before I updated my loopback dependencies from:
"@loopback/boot": "^2.4.1",
"@loopback/core": "^2.9.3",
"@loopback/repository": "^2.11.0",
"@loopback/rest": "^6.0.0",
"@loopback/rest-explorer": "^2.2.8",
"@loopback/service-proxy": "^2.3.6",
to:
"@loopback/boot": "^3.0.1",
"@loopback/core": "^2.10.1",
"@loopback/repository": "^3.0.1",
"@loopback/rest": "^7.0.1",
"@loopback/rest-explorer": "^3.0.1",
"@loopback/service-proxy": "^3.0.1",
The update clearly did something that made it stop working but I can't figure out what.
Also, I have seen other methods in the docs like the one using Interceptors but it feels like an overkill when it should be something as easy as adding a middleware to an Express app.
ANSWER
Answered 2020-Sep-29 at 15:55Please revert your change to MySequence.ts
. The following is good enough:
export class MySequence extends MiddlewareSequence {
}
You should be aware that the morgan middleware registered using this.expressMiddleware will be automatically discovered by MiddlewareSequence
.
See a working example at:
https://github.com/strongloop/loopback-next/blob/master/examples/todo/src/application.ts#L46
QUESTION
I have an out put in the below pattern
["snaptuda-shv-22-lla1.example.com","snaptuza-shv-22-lla1.example.com","snaptuservice-proxy-shv-22-lla1.example.com"]
I used below command to strip the domains within the double quotes
cut -d"\"" -f2 file.txt
I got only the first domain , which was
snaptuda-shv-22-lla1.example.com
What I need is all domains till the end of the file , how can I achieve this ?
ANSWER
Answered 2020-Sep-19 at 08:15jq -r '.[]' filename
Or if the input comes from stdout, like this:
echo '["snaptuda-shv-22-lla1.example.com",...]' | jq -r '.[]'
snaptuda-shv-22-lla1.example.com
snaptuza-shv-22-lla1.example.com
snaptuservice-proxy-shv-22-lla1.example.com
QUESTION
I'm trying to setup an SQLServer BDC on AKS but the process does not seem to be moving beyond a certain point. The AKS cluster is a 3 node cluster built on a Standard_E8_v3 VM ScaleSet.
Here is a list of pods: C:\Users\rgn>kubectl get pods -n mssql-cluster
NAME READY STATUS RESTARTS AGE
control-qm754 3/3 Running 0 35m
controldb-0 2/2 Running 0 35m
controlwd-wxrlg 1/1 Running 0 32m
logsdb-0 1/1 Running 0 32m
logsui-mqfcv 1/1 Running 0 32m
metricsdb-0 1/1 Running 0 32m
metricsdc-9frbb 1/1 Running 0 32m
metricsdc-jr5hk 1/1 Running 0 32m
metricsdc-ls7mf 1/1 Running 0 32m
metricsui-pn9qf 1/1 Running 0 32m
mgmtproxy-x4ctb 2/2 Running 0 32m
When I ran describe against mgmtproxy-x4ctb pod the below is what I see. And even though that status indicates it is running, it is not (the readiness probe is failing). I believe this is the reason why the deployment is not proceeding.
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 11m default-scheduler Successfully assigned mssql-cluster/mgmtproxy-x4ctb to aks-agentpool-34156060-vmss000002
Normal Pulling 11m kubelet, aks-agentpool-34156060-vmss000002 Pulling image "mcr.microsoft.com/mssql/bdc/mssql-service-proxy:2019-CU4-ubuntu-16.04"
Normal Pulled 11m kubelet, aks-agentpool-34156060-vmss000002 Successfully pulled image "mcr.microsoft.com/mssql/bdc/mssql-service-proxy:2019-CU4-ubuntu-16.04"
Normal Created 11m kubelet, aks-agentpool-34156060-vmss000002 Created container service-proxy
Normal Started 11m kubelet, aks-agentpool-34156060-vmss000002 Started container service-proxy
Normal Pulling 11m kubelet, aks-agentpool-34156060-vmss000002 Pulling image "mcr.microsoft.com/mssql/bdc/mssql-monitor-fluentbit:2019-CU4-ubuntu-16.04"
Normal Pulled 11m kubelet, aks-agentpool-34156060-vmss000002 Successfully pulled image "mcr.microsoft.com/mssql/bdc/mssql-monitor-fluentbit:2019-CU4-ubuntu-16.04"
Normal Created 11m kubelet, aks-agentpool-34156060-vmss000002 Created container fluentbit
Normal Started 11m kubelet, aks-agentpool-34156060-vmss000002 Started container fluentbit
Warning Unhealthy 10m (x6 over 11m) kubelet, aks-agentpool-34156060-vmss000002 Readiness probe failed: cat: /var/run/container.ready: No such file or directory
I tried it twice but both times it was not able to move beyond this point. From the link it looks like this problem only exist since last month. Can someone point me in the right direction?
Log listing from the proxy pod:
2020/06/13 16:25:35 Setting the directories for 'agent:agent' owner with '-rwxrwxr-x' mode: [/var/opt /var/log /var/run/secrets /var/run/secrets/keytabs /var/run/secrets/certificates /var/run/secrets/credentials /var/opt/agent /var/log/agent /var/run/agent]
2020/06/13 16:25:35 Setting the directories for 'agent:agent' owner with '-rwxrwx---' mode: [/var/opt/agent /var/log/agent /var/run/agent]
2020/06/13 16:25:35 Searching agent configuration file at /opt/agent/conf/mgmtproxy.json
2020/06/13 16:25:35 Searching agent configuration file at /opt/agent/conf/agent.json
2020/06/13 16:25:35.777955 Changed the container umask from '-----w--w-' to '--------w-'
2020/06/13 16:25:35.778031 Setting the directories for 'supervisor:supervisor' owner with '-rwxrwx---' mode: [/var/log/supervisor/log /var/opt/supervisor /var/log/supervisor /var/run/supervisor]
2020/06/13 16:25:35.778170 Setting the directories for 'fluentbit:fluentbit' owner with '-rwxrwx---' mode: [/var/opt/fluentbit /var/log/fluentbit /var/run/fluentbit]
2020/06/13 16:25:35.778411 Agent configuration: {"PodType":"mgmtproxy","ContainerName":"fluentbit","GrpcPort":8311,"HttpsPort":8411,"ScaledSetKind":"ReplicaSet","securityPolicy":"certificate","dnsServicesToWaitFor":null,"cronJobs":null,"serviceJobs":null,"healthModules":null,"logRotation":{"agentLogMaxSize":500,"agentLogRotateCount":3,"serviceLogRotateCount":10},"fileMap":{"fluentbit-certificate.pem":"/var/run/secrets/certificates/fluentbit/fluentbit-certificate.pem","fluentbit-privatekey.pem":"/var/run/secrets/certificates/fluentbit/fluentbit-privatekey.pem","krb5.conf":"/etc/krb5.conf","nsswitch.conf":"/etc/nsswitch.conf","resolv.conf":"/etc/resolv.conf","smb.conf":"/etc/samba/smb.conf"},"userPermissions":{"agent":{"user":"agent","group":"agent","mode":"0770","modeSetgid":false,"directories":[]},"fluentbit":{"user":"fluentbit","group":"","mode":"","modeSetgid":false,"directories":[]},"fundamental":{"user":"agent","group":"agent","mode":"0775","modeSetgid":false,"directories":["/var/opt","/var/log","/var/run/secrets","/var/run/secrets/keytabs","/var/run/secrets/certificates","/var/run/secrets/credentials"]},"supervisor":{"user":"supervisor","group":"supervisor","mode":"0770","modeSetgid":false,"directories":["/var/log/supervisor/log"]}},"fileIgnoreList":["agent-certificate.pem","agent-privatekey.pem"],"InstanceId":"t4KLx1m5vDsHCHc038KgKHH5HOcQVR0Z","ContainerId":"","StartServicesImmediately":false,"DisableFileDownloads":false,"DisableHealthChecks":false,"serviceFencingEnabled":false,"isPrivileged":true,"IsConfigurationManagerEnabled":false,"LWriter":{"filename":"/var/log/agent/agent.log","maxsize":500,"maxage":0,"maxbackups":10,"localtime":true,"compress":false}}
2020/06/13 16:25:36.316209 Attempting to join cluster...
2020/06/13 16:25:36.316301 Source directory /var/opt/secrets/certificates/ca does not exist
2020/06/13 16:25:36.316520 [Reaper] Starting the signal loop for reaper
2020/06/13 16:25:40.642164 [Reaper] Received SIGCHLD signal. Starting process reaper.
2020/06/13 16:25:40.652703 Starting secure gRPC listener on 0.0.0.0:8311
2020/06/13 16:25:40.943805 Cluster join successful.
2020/06/13 16:25:40.943846 Stopping gRPC listener on 0.0.0.0:8311
2020/06/13 16:25:40.944704 Getting manifest from controller...
2020/06/13 16:25:40.964774 Downloading '/config/scaledsets/mgmtproxy/containers/fluentbit/files/fluentbit-certificate.pem' from controller...
2020/06/13 16:25:40.964816 Downloading '/config/scaledsets/mgmtproxy/containers/fluentbit/files/fluentbit-privatekey.pem' from controller...
2020/06/13 16:25:40.987309 Stored 1206 bytes to /var/run/secrets/certificates/fluentbit/fluentbit-certificate.pem
2020/06/13 16:25:40.992108 Stored 1694 bytes to /var/run/secrets/certificates/fluentbit/fluentbit-privatekey.pem
2020/06/13 16:25:40.992235 Agent is ready.
2020/06/13 16:25:40.992348 Starting supervisord with command: '[supervisord --nodaemon -c /etc/supervisord.conf]'
2020/06/13 16:25:40.992719 Started supervisord with pid=1437
2020/06/13 16:25:40.993030 Starting secure gRPC listener on 0.0.0.0:8311
2020/06/13 16:25:40.996580 Starting HTTPS listener on 0.0.0.0:8411
2020/06/13 16:25:41.998667 [READINESS] Not all supervisord processes are ready. Attempts: 1, Max attempts: 250
2020/06/13 16:25:41.999567 Loading go plugin plugins/bdc.so
2020/06/13 16:25:41.999588 Loading go plugin plugins/platform.so
2020/06/13 16:25:41.999600 Starting the health monitoring, number of modules: 2, services: ["fluentbit","agent"]
2020/06/13 16:25:41.999605 Starting the health service
2020/06/13 16:25:41.999609 Starting the health durable store
2020/06/13 16:25:41.999614 Loading existing health properties from /var/opt/agent/health/health-properties-main.gob
2020/06/13 16:25:41.999642 No existing file path for file: /var/opt/agent/health/health-properties-main.gob
2020/06/13 16:25:42.640719 Adding a new plugin plugins/bdc.so
2020/06/13 16:25:43.302872 Adding a new plugin plugins/platform.so
2020/06/13 16:25:43.302932 Created a health module watcher for service 'fluentbit'
2020/06/13 16:25:43.302948 Starting a new watcher for health module: fluentbit
2020/06/13 16:25:43.302983 Starting a new watcher for health module: agent
2020/06/13 16:25:43.302992 Health monitoring started
2020/06/13 16:25:53.000908 [READINESS] All services marked as ready.
2020/06/13 16:25:53.000966 [READINESS] Container is now ready.
2020/06/13 16:26:01.995093 [MONITOR] Service states: map[fluentbit:RUNNING]
ANSWER
Answered 2020-Jun-20 at 22:08All,
Finally it got sorted out.
There were several issues with respect to our azure policy and our network policy.
(1) It was not allowing new IP addresses to be assigned to the loadbalancer.
(2) The gateway proxy was not getting new IP Addresses since we ran out of our quota of 10 max IPs that were allowed.
(3) My desktop from where I started to deploy was not able to ping the controller service IP addresses and Port.
We addressed the above one after the other and we are in the final stages.
Given that the IP Addresses are static but generated on the fly it cannot be provisioned. How did the others handle this with their network/azure infrastructure team?
Thanks, rgn
QUESTION
im struggling with the mapping to openapi spec of relations in loopback 4.
There are two entities: Plan & PlanItem with relates with "Plan hasMany PlanItems" In my endpoint spec i've declared the inclusion of the relation like that:
@authenticate('jwt')
@get('/{id}', {
responses: {
'200': {
description: 'Plan for given id, including items',
content: {
'application/json': {
schema: getModelSchemaRef(Plan, {
title: "PlanWithRelations",
exclude: ['ownerId'],
includeRelations: true
})
},
},
},
},
})
async findOne(
@param.path.string('id') id: string,
): Promise {
return this.plansService.findOne(id);
}
the resulting components section in the openapi.json looks like this:
{
"openapi": "3.0.0",
"info": {
"title": "ngbm-api - NGBM API v1.0",
"version": "1.0.0",
"contact": {
}
},
// ...
"components": {
"schemas": {
// ...
"PlanWithRelations": {
"title": "PlanWithRelations",
"description": "(Schema options: { title: 'PlanWithRelations', exclude: [ 'ownerId' ], includeRelations: true })",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlanWithRelations"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
}
}
}
as you can see the items array in the 'PlanWithRelations' has a $ref to the same schema 'PlanWithRelations' and not to 'PlanItem'
Can someone give me a hint how to fix this ? If you need more informations feels free to give me a hint.
here are my loopback --version
output:
@loopback/cli version: 2.2.1
@loopback/* dependencies:
- @loopback/authentication: ^4.1.1
- @loopback/boot: ^2.0.2
- @loopback/build: ^5.0.0
- @loopback/context: ^3.2.0
- @loopback/core: ^2.2.0
- @loopback/metadata: ^2.0.2
- @loopback/openapi-spec-builder: ^2.0.2
- @loopback/openapi-v3: ^3.1.1
- @loopback/repository-json-schema: ^2.0.2
- @loopback/repository: ^2.0.2
- @loopback/rest: ^3.1.0
- @loopback/testlab: ^2.0.2
- @loopback/docs: ^3.2.1
- @loopback/example-hello-world: ^2.0.2
- @loopback/example-log-extension: ^2.0.2
- @loopback/example-rpc-server: ^2.0.2
- @loopback/example-todo: ^3.0.2
- @loopback/example-soap-calculator: ^2.0.2
- @loopback/service-proxy: ^2.0.2
- @loopback/http-caching-proxy: ^2.0.2
- @loopback/http-server: ^2.0.2
- @loopback/example-todo-list: ^3.0.2
- @loopback/dist-util: ^0.4.0
- @loopback/rest-explorer: ^2.0.2
- @loopback/eslint-config: ^6.0.2
- @loopback/example-express-composition: ^2.0.2
- @loopback/example-greeter-extension: ^2.0.2
- @loopback/booter-lb3app: ^2.0.2
- @loopback/example-lb3-application: ^2.0.2
- @loopback/example-greeting-app: ^2.0.2
- @loopback/example-context: ^2.0.2
- @loopback/repository-tests: ^0.11.2
- @loopback/extension-health: ^0.3.2
- @loopback/authorization: ^0.5.2
- @loopback/rest-crud: ^0.7.2
- @loopback/security: ^0.2.2
- @loopback/authentication-passport: ^2.0.2
- @loopback/example-metrics-prometheus: ^0.2.2
- @loopback/extension-metrics: ^0.2.2
- @loopback/model-api-builder: ^2.0.2
- @loopback/extension-logging: ^0.2.2
- @loopback/example-access-control-migration: ^1.1.2
- @loopback/example-file-transfer: ^1.1.2
- @loopback/example-rest-crud: ^1.1.1
- @loopback/apiconnect: ^0.1.1
- @loopback/example-validation-app: ^1.1.1
- @loopback/cron: ^0.1.0
ANSWER
Answered 2020-Apr-19 at 08:10It is a known bug that including a "title" will cause invalid schema generation.
A workaround is to remove the "title" key from getModelSchemaRef
:
schema: getModelSchemaRef(Plan, {
exclude: ['ownerId'],
includeRelations: true
})
The PR with the fix has been merged and the fix will be released soon.
QUESTION
I already was able to expose the Vert.x EventBus through a socket regarding the official docs:
https://vertx.io/docs/vertx-sockjs-service-proxy/java/
The purpose is to interact with a NodeJS App. For initial tests, the messages are already working between normal Verticals and the Node App
However, I can see that the class io.vertx.ext.web.handler.sockjs.PermittedOptions is already Deprecated.
This is the snippet
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.sockjs.BridgeOptions;
import io.vertx.ext.web.handler.sockjs.PermittedOptions;
import io.vertx.ext.web.handler.sockjs.SockJSHandler;
.
.
.
Router router = Router.router(vertx);
BridgeOptions opts = new BridgeOptions()
.addInboundPermitted(new PermittedOptions().setAddress("nodetest"))
.addOutboundPermitted(new PermittedOptions().setAddress("nodetest"));
router.mountSubRouter("/eventbus", SockJSHandler.create(vertx).bridge(opts));
vertx.createHttpServer().requestHandler(router).listen(3000, res -> {
if (res.succeeded())
promise.complete();
else
promise.fail(res.cause());
});
.
.
.
¿What is the right way to proceed?
ANSWER
Answered 2020-Feb-18 at 10:42the class you mention is duplicated across 2 repositories, the "fix" is just to update the import statement to the right one:
io.vertx.ext.bridge.PermittedOptions
All the rest should work as expected.
QUESTION
i'm trying to reverse proxy using istio virtual service
it is possible forward request in virtual service? (like nginx's proxy_pass)
in result,
- http://myservice.com/about/* -> forward request to CDN (external service outside k8s system - aws s3, etc....)
- http://myservice.com/* -> my-service-web (internal service includes in istio mesh)
defined serviceentry, but it just "redirect", not forward reqeust.
here is my serviceentry.yaml and virtualservice.yaml
- serviceentry.yaml
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: my-service-proxy
namespace: my-service
spec:
hosts:
- CDN_URL
location: MESH_EXTERNAL
ports:
- number: 80
name: http
protocol: HTTP
- number: 443
name: https
protocol: TLS
resolution: DNS
- virtualservice.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service
namespace: my-service
spec:
hosts:
- myservice.com
gateways:
- myservice
http:
- match:
- uri:
prefix: /about
rewrite:
authority: CDN_URL
uri: /
route:
- destination:
host: CDN_URL
- route:
- destination:
host: my-service-web.svc.cluster.local
port:
number: 80
virtualservice can acts like nginx-igress?
ANSWER
Answered 2020-Feb-06 at 08:31Based on that istio discuss
User @palic asked same question here
Shouldn’t it be possible to let ISTIO do the reverse proxy thing, so that no one needs a webserver (httpd/nginx/ lighthttpd/…) to do the reverse proxy job?
And the answer provided by @Daniel_Watrous
The job of the Istio control plane is to configure a fleet of reverse proxies. The purpose of the webserver is to serve content, not reverse proxy. The reverse proxy technology at the heart of Istio is Envoy, and Envoy can be use as a replacement for HAProxy, nginx, Apache, F5, or any other component that is being used as a reverse proxy.
it is possible forward request in virtual service
Based on that I would say it's not possible to do in virtual service, it's just rewrite(redirect), which I assume is working for you.
when i need function of reverse proxy, then i have to using nginx ingresscontroller (or other things) instead of istio igress gateway?
If we talk about reverse proxy, then yes, you need to use other technology than istio itself.
As far as I'm concerned, you could use some nginx pod, which would be configured as reverse proxy to the external service, and it will be the host for your virtual service.
So it would look like in below example.
EXAMPLE
ingress gateway -> Virtual Service -> nginx pod ( reverse proxy configured on nginx)
Service entry -> accessibility of URLs outside of the cluster
Let me know if you have any more questions.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install service-proxy
Support
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesExplore Kits - Develop, implement, customize Projects, Custom Functions and Applications with kandi kits
Save this library and start creating your kit
Share this Page