首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Istio gRPC-Web配置

Istio gRPC-Web配置
EN

Stack Overflow用户
提问于 2019-07-28 10:31:45
回答 1查看 1.3K关注 0票数 0

我正在尝试公开一个用.NETCORE3.0编写并打包为gRPC docker镜像的linux后端服务。我在localhost中测试了该服务,一切工作正常。但是,我无法使用istio从GKE访问(我已经将我的GKE集群更新到2019年7月27日的最新版本)。我正在使用带有react.jsgRPC-Web来使用服务。我每次尝试访问时都会收到一个503错误。查看istioingress日志,我看到与503关联的行

代码语言:javascript
复制
[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.

下面的配置有什么问题吗?

代码语言:javascript
复制
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

代码语言:javascript
复制
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"]
EN

回答 1

Stack Overflow用户

发布于 2020-03-22 15:28:16

您可以在服务端口名称中写入“grpc-web”,如下所示。

代码语言:javascript
复制
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-worker

Istio/协议选择:https://istio.io/docs/ops/configuration/traffic-management/protocol-selection/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57237518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档