我正在尝试公开一个用.NETCORE3.0编写并打包为gRPC docker镜像的linux后端服务。我在localhost中测试了该服务,一切工作正常。但是,我无法使用istio从GKE访问(我已经将我的GKE集群更新到2019年7月27日的最新版本)。我正在使用带有react.js的gRPC-Web来使用服务。我每次尝试访问时都会收到一个503错误。查看istioingress日志,我看到与503关联的行
[2019-07-28 15:18:57.131][22][warning][upstream] [external/envoy/source/common/upstream/original_dst_cluster.cc:110] original_dst_load_balancer: No downstream connection or no original_dst.下面的配置有什么问题吗?
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: grpc-web-filter
spec:
workloadLabels:
app: users
filters:
- listenerMatch:
listenerType: SIDECAR_INBOUND
listenerProtocol: HTTP
insertPosition:
index: FIRST
filterType: HTTP
filterName: "envoy.grpc_web"
filterConfig: {}
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: users
spec:
host: users
subsets:
- name: v1
labels:
version: v1
---
###########################################################################
# Ingress resource (gateway)
##########################################################################
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: sf-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: usersvs
spec:
hosts:
- "*"
gateways:
- sf-gateway
http:
- match:
- uri:
prefix: /xxx.common.users.UserService
- port: 80
route:
- destination:
host: users.default.svc.cluster.local
port:
number: 80
subset: v1
corsPolicy:
allowOrigin:
- "*"
allowMethods:
- POST
- GET
- OPTIONS
- PUT
- DELETE
allowHeaders:
- grpc-timeout
- content-type
- keep-alive
- user-agent
- cache-control
- content-type
- content-transfer-encoding
- custom-header-1
- x-accept-content-transfer-encoding
- x-accept-response-streaming
- x-user-agent
- x-grpc-web
maxAge: 1728s
exposeHeaders:
- custom-header-1
- grpc-status
- grpc-message
allowCredentials: true
---
##################################################################################################
# users service
##################################################################################################
apiVersion: v1
kind: Service
metadata:
name: users
labels:
app: users
spec:
ports:
- name: grpc-port
port: 80
selector:
app: users
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: users
spec:
replicas: 1
template:
metadata:
labels:
app: users
version: v1
spec:
containers:
- name: users
image: ***
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---这是来自mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim的Dockerfile文件,作为基本的WORKDIR /app Expose80 Expose443
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["UserService/XXX.Users.csproj", "UserService/"]
COPY ["ShowFam.Common/ShowFam.Common.csproj", "ShowFam.Common/"]
RUN dotnet restore "UserService/XXX.Users.csproj"
COPY . .
WORKDIR "/src/UserService"
RUN dotnet build "XXX.Users.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "XXX.Users.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "XXX.Users.dll"]发布于 2020-03-22 15:28:16
您可以在服务端口名称中写入“grpc-web”,如下所示。
apiVersion: v1
kind: Service
metadata:
name: echo-service
spec:
type: ClusterIP
ports:
- name: grpc-web # istio refers this value as protocol
port: 80
targetPort: 9090
selector:
app: echo-service-workerIstio/协议选择:https://istio.io/docs/ops/configuration/traffic-management/protocol-selection/
https://stackoverflow.com/questions/57237518
复制相似问题