我想将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 }}
答案 0 :(得分:0)
您似乎在入口上缺少注释。
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
注释的地方。