I have a gRPC server set up in AWS EKS, and use Nginx-Ingress-Controller to perform load balancing. I try to terminate TLS at NLB, by setting the gRPC server ingress to like
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
Also, I use Amazon Certificate Manager to manage the TLS for NLB, so I have to change the Helm Chart of Nginx-Ingress-Controller Value.yaml the following fields
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
The problem is, I could not successfully call through 443 port and make the client connect to the gRPC server.
The problem happens between NLB and Nginx, but what and why is unknown. Any kind of help will be appreciated.
Note: I am aware of the example ingress-nginx has TLS field, but what I should put here if I am using ACM.