部署 Rest + gRPC 服务器部署到带有入口的 k8s
Posted
技术标签:
【中文标题】部署 Rest + gRPC 服务器部署到带有入口的 k8s【英文标题】:Deploy Rest + gRPC server deploy to k8s with ingress 【发布时间】:2019-08-31 21:41:49 【问题描述】:我使用了一个示例 gRPC HelloWorld 应用程序https://github.com/grpc/grpc-go/tree/master/examples/helloworld。该示例在本地系统中运行流畅。
我想使用 Ingress 将其部署到 Kubernetes。
以下是我的配置文件。
service.yaml - 作为 NodePort
apiVersion: v1
kind: Service
metadata:
name: grpc-scratch
labels:
run: grpc-scratch
annotations:
service.alpha.kubernetes.io/app-protocols: '"grpc":"HTTP2"'
spec:
type: NodePort
ports:
- name: grpc
port: 50051
protocol: TCP
targetPort: 50051
selector:
run: example-grpc
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: grpc-ingress
annotations:
nginx.org/grpc-services: "grpc"
kubernetes.io/ingress.class: "nginx"
kubernetes.io/tls-acme: true
spec:
tls:
- hosts:
- xyz.com
secretName: grpc-secret
rules:
- host: xyz.com
http:
paths:
- path: /grpc
backend:
serviceName: grpc
servicePort: 50051
我无法使用 url xyz.com/grpc
向服务器发出 gRPC 请求。得到错误
"error": "14 UNAVAILABLE: Name resolution failure"
如果我向xyz.com
提出请求,则错误是
"error": "14 UNAVAILABLE: Trying to connect an http1.x server"
任何帮助将不胜感激。
【问题讨论】:
您的服务定义了端口 8081,但您的入口需要端口 50051。为什么? @MadWombat 更新了服务。这是指向差异端口的不同服务。 @TusharSheth 你也可以分享你的部署清单吗? github.com/kubernetes/ingress-nginx/issues/2497 你用什么作为入口控制器?克? nginx的?至少有什么? 【参考方案1】:入口对象的后端是服务和端口名称的组合
在您的情况下,您将 serviceName: grpc
作为后端,而您的服务的实际名称是 name: grpc-scratch
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: grpc-ingress
annotations:
nginx.org/grpc-services: "grpc"
kubernetes.io/ingress.class: "nginx"
kubernetes.io/tls-acme: true
spec:
tls:
- hosts:
- xyz.com
secretName: grpc-secret
rules:
- host: xyz.com
http:
paths:
- path: /grpc
backend:
serviceName: grpc-scratch
servicePort: grpc
【讨论】:
以上是关于部署 Rest + gRPC 服务器部署到带有入口的 k8s的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
如何在 Google Cloud Platform 上部署 GRPC 服务器和客户端?
如何将简单的 Spring Boot(带有 Gradle 构建系统)部署到 Apache Tomcat(真实服务器,而不是嵌入服务器)?
在 WildFly 上重新部署后,CDI 无法在 @Requestscoped REST 服务中将 @Singleton 设置为 @Provider