bounty还有6天到期。回答此问题可获得+500声望奖励。jaxxstorm正在寻找一个规范答案:这仍然是一个问题,开始一个新的赏金
我在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在route 53中正确创建了一条记录,并且正在从let's encrypt获取证书。但是,无论我做什么,grpc curl都不起作用,并抛出“context deadline exceed”
grpcurl -protoset-out=reflection.protoset <app>.development.<domain>:443 list
Failed to dial target host "<app>.development.<domain>:443": context deadline exceeded
型
我错过了什么?我尝试过的其他方法:
将TLS侦听器上的ALPN策略设置为仅使用ALB入口控制器的HTTP/2(是的,真的!)同一问题
编辑:我还验证了这不是一个示例grpc应用程序的应用程序问题
编辑2:使用服务Type=LoadBalancer
并完全绕过nginx-ingress可以工作,所以这绝对看起来像是nginx-ingress的问题
1条答案
按热度按时间r55awzrz1#
字符串
您已调配的NLB无法从您的网络访问,除非是有意的,请尝试添加以下注解:
第一个月
在控制台上检查NLB是否已联机(例如通过健康检查)并重试。