<p>I'm deploying an <strong>grpc</strong> application that uses <strong>tls</strong> application (<strong>grpcs</strong> to be precise). App is deployed to <strong>kubernetes</strong> cluster in <strong>AWS</strong> cloud created using <strong>Kops</strong> tool. I'm using self signed certs for auth (by now). The problem is I can't find any guideline on <strong>how to properly expose such service to outer world</strong>. There are bits and pieces here and there, but nothing that seems to do what I want. Additional level of complexity - I need to expose several ports on same service, so I can't use Ingress rules for k8s as my client application restricts using any paths in urls and requires me to specify only host and port. Inside cluster everything is setup and works as expected with authorisation and proper DNS resolution.</p>

<p>So ideally I want:</p>

<ul>
<li>Solution that proxies grpcs requests to specific service in cluster.</li>
<li>Solution that introduces load balancer that does the same</li>
</ul>

<p>Thank you very much for your time!</p>

<p>Ok. Thank was enough to fix the issue. Notice the annotation section.</p>

<pre class="lang-yaml prettyprint-override"><code>apiVersion: v1
kind: Service

metadata:
  name: my-service
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "9999"
spec:
  ports:
    - port: 9999
      targetPort: 9999
      protocol: TCP
  selector:
    app: my-service
  type: LoadBalancer
</code></pre>

<p>Then I had to add A record with balancer dns name to Route 53, and it worked.</p>
