image
疯啦疯啦!这个破问题困扰我好久好久
问题场景描述
- k8s 利用 istio 的ingressgateway 服务负载后端搭建 的 grpc协议的服务
- 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
网友评论