<p>How to make load balancing for GRPC services on GKE on L7 (with Ingress over HTTP/2 + TLS)?</p>

<p>I know that I have the option to use L4 (TCP layer) to configure Service with "LoadBalancer" type. But I want to know if I can use Ingress + L7 load balancing over HTTP/2+TLS.</p>

<p>Also I see "HTTP/2 to backends is not supported for GKE." (on <a href="https://cloud.google.com/load-balancing/docs/backend-service#HTTP2-limitations" rel="nofollow noreferrer">https://cloud.google.com/load-balancing/docs/backend-service#HTTP2-limitations</a>).   But I don't know it's actual or not.</p>

<p>GKE Ingress can now <a href="https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-http2" rel="nofollow noreferrer">load balance with HTTP/2</a>, when you use <strong>https</strong>.</p>

<p>To get HTTP/2 between the load balancer (ingress controller) and your pods, your service need an extra annotation:</p>

<pre><code>apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/app-protocols: '{"my-port":"HTTP2"}'
</code></pre>

<p>In addition, your pods most use TLS and have <a href="https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation" rel="nofollow noreferrer">ALPN</a> h2 configured. This can be done e.g. with an HAProxy as a sidecar with <a href="https://www.eclipse.org/jetty/documentation/current/http2-configuring-haproxy.html" rel="nofollow noreferrer">http2 configuration</a>. I have successfully used this setup on GKE.</p>
