Private NAT gateway in GCP - google-cloud-platform

I have a need to connect instances in GCP to an on-premise network through a NAT gateway but apparently this isn't supported by Cloud NAT. Would be happy to hear some suggestions on how this requirement can be implemented.
To give a bit more context:
There will be a cloud interconnect set up however there is a requirement to not have to negotiate IP ranges between on-prem and GCP hence the requirement for the NAT.
Essentially, I need something that achieves the same effect as AWS' private NAT gateway (see https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)

Cloud NAT service is not intended to allow communication between on-premises network and GCP resources, it just handles the inbound and outbound Address Translations in GCP, as stated in the following document [1].
What you are looking for, is to implement Cloud VPN, which is in fact a GCP service designed to allow communication between on-premises networks and GCP resources, here you can find a complete documentation on how it works and the different modes that can be implemented [2].
Now, for the part about the NAT gateway; if your device cannot create IPsec VPNs, then you would need to add a device acting as a VPN gateway in between first. In that case, you would end up with an architecture like this:
[1] https://cloud.google.com/nat/docs/overview
[2] https://cloud.google.com/network-connectivity/docs/vpn/concepts/overview

Related

Firewall issue - egress from GKE to Cloud Function HTTP Trigger

I am developing a solution where a Java application hosted on GKE wants to make an outbound HTTP call to a cloud function which is deployed under a different GCP project, where the GKE operates on a shared network of which possesses firewall rules for the CIDR ranges in that shared network.
For example - GKE cluster & Application deployed under GCP Project A, wishes to invoke a Serverless GCP Function deployed to project B.
There are a number of firewall rules configured on the shared network of which the GKE is operating upon, causing my HTTP call to time out, as the HTTP trigger URL is not mapped to an allowed CIDR range (in that shared network).
What have I tried?
I have lightly investigated one or two solutions which make use of Cloud NAT & Router to proxy the HTTP call to the Cloud Function trigger endpoint, but I am wondering if there are any other, simpler suggestions? The address range for cloud functions is massive so allowing that range is out of the question.
I was thinking about maybe deploying the cloud function into the same VPC & applying ingress restrictions to it, would that allow the HTTP trigger to exist in the allowed IP range?
Thanks in advance
Serverless VPC Access is a GCP solution specially designed to achieve what you want. The communication between the serverless environment and the VPC is done through an internal IP address, and therefore never exposed to the Internet.
For your specific infrastructure, you would need to follow the guide Connecting to a Shared VPC network.

Compute Engine in VPC can't connect to Internet & Cloud Storage after establishing Cloud VPN

Assuming I have a custom VPC with IP ranges 10.148.0.0/20
This custom VPC has firewall rules to allow-internal so the service inside those IP ranges can communicate to each other.
After the system grows I need to connect to some on-premises network by using Classic Cloud VPN, already create Cloud VPN (the on-premises side configuration already configured by someone) and the VPN Tunnel already established (with green checkmarks).
I also can ping to on-premises IP right now (let's say ping to 10.xxx.xxx.xxx where this is not GCP internal/private IP but on-premises private IP) using compute engine created on custom VPC network.
The problem is all the compute engine instance spawn in custom VPC network can't communicate to the internet now (like doing sudo apt update) or even communicate to google cloud storage (using gsutil), but they can communicate using private IP.
I also can't spawn dataproc cluster on that custom VPC (I guess because it can't connect to GCS, since dataproc needs GCS for staging buckets).
Since I do not really know about networking stuff and relatively new to GCP, how to be able to connect to the internet on instances that I created inside custom VPC?
After checking more in-depth about my custom VPC and Cloud VPN I realize there's misconfiguration when I establish the Cloud VPN, I've chosen route-based in routing option and input 0.0.0.0/0 in Remote network IP ranges. I guess this routes sending all traffic to VPN as #John Hanley said.
Solved it by using policy-based in routing option and only add specific IP in Remote network IP ranges.
Thank you #John Hanley and
#guillaume blaquiere for pointing this out

Does Cloud Run with a VPC Connector send all original outbound traffic through the connector?

With fully managed Cloud Run connected to a VPC with a Serverless VPC Accessor, does all outbound traffic from Cloud Run go through that connector, or only traffic destined for RFC 1918 addresses?
If only for private IPs, how can I configure Cloud Run to send all of its outbound requests into the VPC?
(Note - with Cloud Functions there is an option to route all traffic or only private IPs through the connector - reference )
For now the Serverless VPC Connector for Cloud Run is still on Beta and some Network features will be added in the future, including Egress control.
The goal right now is to develop an identical implementation as the one Cloud Functions has so it makes sense to quote that doc. Unfortunately there is no ETA for it to be implemented. We encourage you to follow up the release notes
When reading this particular doc keep in mind: The Cloud Run service is the one fully managed, not the VPC Access connector. With that said, we could tell that all the traffic without would go through the VPC for now.
Hope this is helpful! :)

Within AWS and AWS to On-Premise private connectivity

I have done a clean sweep of AWS docs but couldn't find answer to my scenario. I'm looking for a solution wherein I will have private connectivity(no data flows through Internet but within AWS network) between my two VPCs and VPC to On-premise connectivity. I'm aware of AWS PrivateLink and Direct Connect but they have some limitations e.g. a RDS Instance cannot be exposed as an Endpoint service to be consumed and things like that.
Is there any way I can achieve the above ?
AWS Transit Gateway allows you to setup direct networking between VPCs and your on premises environment. It supports both VPN and Direct Connect for the on premises leg of the connection.
https://aws.amazon.com/transit-gateway/

connecting ibm cloud to aws cloud

let say I wanted to connect my IBM cloud to an aws vpc so that you could talk to machines on both ends via private IPs. I know you'd have to deal with routing and what not, but how would one do that? Would you have to use a virtual private gateway or something?
Use a software VPN appliance to join the two networks.
This will involve running VPN software, such as Openswan, in publicly-accessible subnets of both networks.
Alternatively, you could use an Amazon VPC virtual gateway on one end and a software appliance on the other end.
See the Software VPN section of this whitepaper for some examples: Amazon VPC Connectivity Options