【问题标题】:How to configure Ingress file of Helm chart to deploy a gRPC service?如何配置 Helm Chart 的 Ingress 文件来部署 gRPC 服务?
【发布时间】:2019-08-16 04:09:49
【问题描述】:

我想将 gRPC 服务部署到 Azure Kubernetes 服务。我已经使用 Helm 图表部署了 RESTful 服务,但 gRPC 服务抛出“连接超时”错误。

我已经尝试了 NGINX 和 HELM 文档中所说的所有内容,但没有任何效果。证书是自签名的。我已经尝试了注释的所有排列和组合:p

Service.yaml

apiVersion: v1
kind: Service
metadata:
  name: {{ template "fullname" . }}
  labels:
    app: {{ template "fullname" . }}
    chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
    release: "{{ .Release.Name }}"
    heritage: "{{ .Release.Service }}"
spec:
  ports:
  - port: 50051
    protocol: TCP
    targetPort: 50051
    name: grpc
  selector:
    app: {{ template "fullname" . }}
  type: NodePort

ingress.yaml

{{ if .Values.ingress.enabled }}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ template "fullname" . }} 
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/grpc-backend: "true"
    nginx.org/grpc-services: {{ template "fullname" . }}
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
    secretName: aks-ingress-tls
  rules:
  - http:
      proto: h2
      paths:
      - backend:
          serviceName: {{ template "fullname" . }}
          servicePort: grpc
          proto: h2
        path: /{servicename}-grpc(/|$)(.*)
{{ end }}

也试过了-还是不行-

{{ if .Values.ingress.enabled }}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ template "fullname" . }} 
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
  - secretName: aks-ingress-tls
  rules:
  - http:
      paths:
      - backend:
          serviceName: {{ template "fullname" . }}
          servicePort: 50051
        path: /servicename-grpc(/|$)(.*)
{{ end }}

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    您的入口似乎缺少注释。

    ingress.yaml - sn-p

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        # This annotation matters!
        nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
    

    根据official Kubernetes nginx ingress documentation的这个sn-p:

    后端协议

    使用 backend-protocol annotations 可以指示 NGINX 应该如何与后端服务通信。 (替换旧版本中的安全后端)有效值:HTTP、HTTPS、GRPC、GRPCS 和 AJP

    默认情况下,NGINX 使用 HTTP。

    例子:

    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

    顺便说一句,您可能需要指定 GRPCS 而不是 GRPC,因为您似乎正在使用 SSL。

    另外需要指出的是,文档中提到此注释替换了旧版本中的“安全后端”,您可能在旧版本中找到了您当前使用的 grpc-backend 注释。

    【讨论】:

    • 我也尝试过使用后端协议。即使这样也行不通。以前,我没有使用任何 SSL 证书,所以我只放了 GRPC。我现在将尝试使用 GRPCS。
    • 其他注解可以吗?你能建议一个示例入口文件吗?我已经尝试了网络上的所有内容。没有任何效果。
    • 这看起来像是 grpc 的 kubernetes 项目中的一个示例:github.com/kubernetes/ingress-nginx/tree/master/docs/examples/…
    • 我现在尝试使用 GRPCS,它说无法访问该站点。
    • 你分享的github链接也失效了。我在问题部分添加了修改后的入口。
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多