istio ingressgateway 负载后端grpc协议服务

image

疯啦疯啦!这个破问题困扰我好久好久

问题场景描述

  1. k8s 利用 istio 的ingressgateway 服务负载后端搭建 的 grpc协议的服务
  2. ingressgateway deployment 搭建在 istio-system NameSpace ,dynamicloading (GRPC服务)搭建在default NameSpace 上

遇见的问题:

  • 首先是无法路由的问题(一直报NR错误)
  • 其次是NameSpace 的问题
ingress 日志,基本都是 流量打到ingress 后就无法向后端调度
[2019-02-26T11:25:21.925Z] "POST /grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfoHTTP/2" 200 NR 0 0 0 - "10.16.101.62" "grpc-go/1.12.0" "d3036123-f9c7-9c7a-a4fa-cfd7f02bfb96" "10.16.101.62:80" "-" - - 10.42.16.33:80 10.16.101.62:61364

2019/2/26 下午7:25:22

解决方法(不多赘述,关键点在下面的yaml文件中注释):

dynamicloading service yaml,解决grpc协议问题
...
spec:
  clusterIP: 10.43.122.80
  ports:
  - name: 6120tcp02
    port: 6120
    protocol: TCP
    targetPort: 6120
  - name: grpc-6125  #### 关键点在这里, name中的定义,要以grpc- 开头,这样就会被识别为grpc协议
    port: 6125
    protocol: TCP
    targetPort: 6125
...
grpc服务相关的 gateway 和 virtualservice yaml文件.跨namespace问题
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: dynamicloading-gateway
  namespace: istio-system  #### 因为gateway所关联的ingress 部署在istio namespace 所以这里指明namespace
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80  ### ingress 暴露端口不懂如何增加自定义端口,所以直接映射的ingress默认端口
      name: grpc
      protocol: HTTP
    hosts:
    #- "dynamic.rc.xxxx.org"
    - "dynamic.i.xxxx.net"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: dynamicloading
  namespace: istio-system #### 因为gateway所关联的ingress 部署在istio namespace 所以这里指明namespace
spec:
  hosts:
  #- "dynamic.rc.xxxxx.org"
  - "dynamic.i.xxxxxx.net"
  gateways:
  - dynamicloading-gateway
  http:
  - match:
    - port: 80
    route:
    - destination:
        host: dynamicloading.default.svc.cluster.local #### 路由后端service 由于跨namespace了,所以定义成全名称
        port:
          number: 6125

你可能感兴趣的:(istio ingressgateway 负载后端grpc协议服务)