无法访问nginx-ingress和nlb后面的grpc应用程序

问题描述 投票:0回答:0

我在 AWS EKS 中安装了 grpc 应用程序。 grpc 端点通过端口转发成功工作:

grpcurl -plaintext -protoset-out=reflection.protoset localhost:8080 list 
                                 
grpc.health.v1.Health
grpc.reflection.v1alpha.ServerReflection

我已经通过 Helm Chart 安装了 nginx-ingress,并设置了以下配置:

USER-SUPPLIED VALUES:
controller:
  service:
    annotations:
      service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
      service.beta.kubernetes.io/aws-load-balancer-ssl-cert: <cert-arn>
      service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
      service.beta.kubernetes.io/aws-load-balancer-type: nlb
    targetPorts:
      https: 443

这已成功创建一个带有侦听器的 NLB,一个用于 HTTP,一个用于 TLS,并附加了证书。

然后我创建了一个像这样的入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/backend-protocol: GRPC
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  generation: 7
  labels:
    name: <app>
  name: <svc-name>
  namespace: <ns>
spec:
  ingressClassName: nginx
  rules:
  - host: <app>.development.<domain>
    http:
      paths:
      - backend:
          service:
            name: <svc>
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - <app>.development.<domain>
    secretName: dev-tls
status:
  loadBalancer:
    ingress:
    - hostname: <loadbalancer>

您会注意到我还在入口处使用 cert-manager/lets-encrypt 终止 TLS,因为我认为这是必需的。

外部 DNS 正在 Route53 中正确创建记录,并且正在从 Let's Encrypt 获取证书。但是,无论我做什么,grpc curl 都不起作用并抛出“上下文截止日期超出”

grpcurl -protoset-out=reflection.protoset <app>.development.<domain>:443 list
Failed to dial target host "<app>.development.<domain>:443": context deadline exceeded

我在这里缺少什么?我尝试过的其他事情:

将 TLS 侦听器上的 ALPN 策略设置为仅 HTTP/2 使用 ALB 入口控制器(是的,真的!)同样的问题

编辑:还验证了这不是示例 grpc 应用程序的应用程序问题

编辑2:使用服务

Type=LoadBalancer
并绕过nginx-ingress完全有效,所以这绝对看起来像是nginx-ingress的问题

kubernetes grpc amazon-eks nginx-ingress http2
© www.soinside.com 2019 - 2024. All rights reserved.