我在 AWS EKS 中设置了 gRPC 服务器,并使用 Nginx-Ingress-Controller 来执行负载平衡。我尝试通过将 gRPC 服务器入口设置为类似来终止 NLB 上的 TLS
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
name: my-grpc
namespace: myspace
spec:
rules:
- host: my.test.com
http:
paths:
- path: /
backend:
serviceName: grpc-server
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
另外,我使用 Amazon Certificate Manager 来管理 NLB 的 TLS,因此我必须将 Nginx-Ingress-Controller Value.yaml 的 Helm Chart 更改为以下字段
controller:
service:
enabled: true
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xxxxxxxxxxx
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443,8443"
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "3600"
service.beta.kubernetes.io/aws-load-balancer-type: nlb
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
targetPorts:
http: http
https: http
Run Code Online (Sandbox Code Playgroud)
问题是,我无法成功通过 443 端口调用并使客户端连接到 gRPC 服务器。
该问题发生在 NLB 和 Nginx 之间,但具体问题和原因尚不清楚。任何形式的帮助将不胜感激。
注意:我知道示例ingress-nginx有 TLS 字段,但如果我使用 ACM,我应该在此处放置什么。
我终于通过 AWS + NLB + EKS 得到了一些东西。我从这个基本的 grpc 应用程序开始
将“fortune-teller.stack.build”的所有实例替换为您的 URL(例如 example.com)
在入口中,我必须将 tls -> Secret Name 更改为我之前使用本指南创建的 tls-secret
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
name: fortune-ingress
namespace: default
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: fortune-teller-service
servicePort: grpc
tls:
- secretName: tls-secret
hosts:
- example.com
Run Code Online (Sandbox Code Playgroud)
在 cert.yaml 中,更改
在 svc.yaml 中,添加注释和“type: LoadBalancer”
apiVersion: v1
kind: Service
metadata:
name: fortune-teller-service
namespace: default
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
service.beta.kubernetes.io/aws-load-balancer-internal: "false"
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:<REGION>:<MY ACCOUNT>:certificate/<CERT ID>"
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "tcp"
spec:
type: LoadBalancer
selector:
k8s-app: fortune-teller-app
ports:
- port: 50051
targetPort: 50051
name: grpc
Run Code Online (Sandbox Code Playgroud)
通过自述文件部署完所有内容后,请在 AWS 控制台中找到 NLB。
现在等待...因为侦听器更新似乎需要几分钟时间。
grpcurl example.com:443 build.stack.fortune.FortuneTeller/Predict
通过交换图像、端口,当然还有名称,我还能够让我的应用程序成功运行。
我犯的错误使它对我不起作用:
| 归档时间: |
|
| 查看次数: |
5854 次 |
| 最近记录: |