go - 使用入口部署 Rest + gRPC 服务器部署到 k8s

标签 go grpc http2 kubernetes-ingress grpc-go

我使用了示例 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"
}

如有任何帮助,我们将不胜感激。

最佳答案

入口对象的后端是服务和端口名称的组合

在你的情况下,你有 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

关于go - 使用入口部署 Rest + gRPC 服务器部署到 k8s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55612412/

相关文章:

go - 如何使用 gofmt 将单引号替换为双引号

go - 将一个结构的字段更新为另一个结构

java - ServerInterceptor 中的 grpc-java 异步调用

java - 如何配置 Netty 4 HTTP/2 客户端来获取单个帧

apache - 如何在 CentOS7 的 Virtualmin 上启用/安装 HTTP/2

php - 是否可以通过 HTTP/2 设置 Guzzle + Pool?

pointers - 将局部变量的指针传递给 Golang 中的 channel 是否安全?

sql - 如何重置从 go database/sql pool 获取的连接状态?

c++ - Command CodeSign 出现问题失败,退出代码为非零,还给了我 Signing Identity : "-"

c++ - 使用 MSYS2/Mingw32 编译 gRPC