1. Overview
    1. Google Cloud supports IPv6 clients with HTTP(S) Load Balancing, SSL Proxy Load Balancing, and TCP Proxy Load Balancing
    2. The load balancer accepts IPv6 connections from users, and then proxies those connections to backends
    3. Enables customers to use a single anycast IPv6 address for multi-region deployment
    4. Need one load balancer IPv6 address for application instances running across multiple regions
    5. DNS server has a single AAAA record and no need to load balance among multiple IPv6 addresses
    6. Caching of AAAA records by clients is not an issue because there's only one address to cache
    7. User requests to the IPv6 address are automatically load balanced to the closest healthy backend with available capacity
    8. Overflows across regions with a single IPv6 load balancer address
    9. If backends in one region are out of resources or unhealthy, the global load balancer automatically directs requests from users to the next closest region with available resources
    10. When the closest region has available resources, global load balancing reverts back to serving by this region
    11. Global load balancing requires the Premium Tier of Network Service Tiers
  2. IPv6 termination and proxy
    1. Configuring IPv6 termination for load balancers enables backends appear as IPv6 applications to IPv6 clients
    2. When a user connects to the load balancer through IPv6, the load balancer, with its IPv6 address and forwarding rule, waits for user connections
    3. The load balancer, with its IPv6 address and forwarding rule, waits for user connections
    4. An IPv6 client connects to the load balancer via IPv6
    5. The load balancer acts as a reverse proxy and terminates the IPv6 client connection
    6. It places the request into an IPv4 connection to a backend
    7. On the reverse path, the load balancer receives the IPv4 response from the backend, and then places it into the IPv6 connection back to the original client
  3. IPv6 address allocation for load balancer forwarding rules
    1. When an external load balancer is configured, provide it with one or more global forwarding rules, each with an external, publicly routed IPv4 or IPv6 IP address (or both)
    2. IP address can be used in the DNS records for the site
    3. When a forwarding rule is created, either use a static IP address reserved for the project or have the forwarding rule automatically acquire an ephemeral IP address when it is created
    4. A static IP address is reserved to the project, and can be kept until deliberately released
    5. An ephemeral address belongs to the forwarding rule as long as the forwarding rule exists
    6. If the forwarding rule is deleted, the ephemeral address is released back into the Google Cloud pool
    7. If both an IPv4 and IPv6 address are needed for the load balancer, create two forwarding rules, associating an IPv4 address with one and an IPv6 address with the other
    8. Associate both rules with the same load balancer
  4. Client IP header with IPv6 termination for HTTP(S) Load Balancing
    1. When the load balancer proxies the IPv6 connection from the client to an IPv4 connection to the backend, the original source IP address is replaced with the load balancer's IP address
    2. Backends need to know the original source IP address for logging, for decision making, or for other purposes
    3. Google Cloud provides an HTTP header that is propagated to the backends that includes the original IPv6 client IP address
    4. HTTP headers for IPv6 are similar to those for IPv4