如何配置Helm图表的Ingress文件以部署gRPC服务?

时间:2019-08-16 04:09:49

标签: kubernetes kubernetes-helm

我想将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 }}

1 个答案:

答案 0 :(得分:0)

您似乎在入口上缺少注释。

ingress.yaml-代码段

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

根据official Kubernetes nginx ingress documentation中的此代码段:

     

后端协议

     

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

     

默认情况下,NGINX使用HTTP。

     

示例:

     

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

顺便说一句,由于您似乎使用的是SSL,因此您可能需要指定GRPCS而不是GRPC

值得一提的另一件事是文档中提到该注释替代了旧版本中的“安全后端”,这可能是您发现当前正在使用的grpc-backend注释的地方。