1

我有一个在 k8s 集群(远程服务器)上运行的 gRPC 服务器。我尝试从 gRPC 客户端(本地 pc)连接到此服务。为此,我使用 Istio 入口网关。但我收到带有 14 个错误代码的“连接关闭”消息。

这是我的gRPC 客户端

conn, err := grpc.Dial("service.example.com:80", grpc.WithInsecure())
if err != nil {
    panic(err)
}

c := service.NewServiceClient(conn)

if _, err := c.TestRPC(...); err != nil {
    log.Println(err.Error()) // rpc error: code = Unavailable desc = connection closed
}

我的网关

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: grpc
        protocol: GRPC
      hosts:
        - "*"

我的虚拟服务

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: service-vs
spec:
  gateways:
    - gateway
  hosts:
    - "service.example.com"
  http:
    - match:
        - port: 80
      route:
        - destination:
            host: service
            port:
              number: 9000

我的服务

apiVersion: v1
kind: Service
metadata:
  name: service
  labels:
    app: service
spec:
  ports:
    - port: 9000
      name: grpc
  selector:
    app: service

我的部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: service
  labels:
    app: service
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 25%
  selector:
    matchLabels:
      app: service
  template:
    metadata:
      labels:
        app: service
    spec:
      containers:
        - name: service
          image: registry.example.com/user/service:latest
          imagePullPolicy: Always
          ports:
            - name: grpc
              containerPort: 9000
      imagePullSecrets:
        - name: private-registry-secret

我怎么解决这个问题?

ps

  • 我的 example.com 在 CloudFlare 下。
  • 我为 service.example.com 设置了 DNA A 记录
  • 没有防火墙规则。
  • gRPC 连接已开启(我认为这并不重要,因为它仅适用于 443 端口)
4

1 回答 1

1

没发现哪里明显不对,估计主机VirtualService应该是Kubernetes内部的一个DNS。喜欢service.default.svc.cluster.local

于 2021-03-30T01:17:37.027 回答