This page explains how to grant authorized network access to cluster control planes (masters) in Google Kubernetes Engine (GKE) clusters. For general information about GKE networking, visit the Network overview.
Overview
Authorized networks allow you to specify CIDR ranges and allow IP addresses in those ranges to access your cluster control plane endpoint using HTTPS. Authorized networks are compatible with all clusters.
GKE uses both Transport Layer Security (TLS) and authentication to provide secure access to your cluster control plane endpoint from the public internet. This provides you the flexibility to administer your cluster from anywhere. By using authorized networks, you can further restrict access to specified sets of IP addresses.
Benefits
Adding authorized networks can provide additional security benefits for your cluster. Authorized networks grant access to a specific set of addresses that you designate, such as those that originate from your environment. This can help protect access to your cluster in the case of a vulnerability in the cluster's authentication or authorization mechanisms.
Benefits with private clusters
Private clusters run nodes without external IP addresses, and optionally run their cluster control plane without a publicly-reachable endpoint. Additionally, private clusters do not allow Google Cloud IP addresses to access the control plane endpoint by default. Using private clusters with authorized networks makes your control plane reachable only by the allowed CIDRs, by nodes within your cluster's VPC, and by Google's internal production jobs that manage your control plane.
Limitations
- A cluster can have no more than 50 authorized network CIDR ranges.
Before you begin
Before you start, make sure you have performed the following tasks:
- Ensure that you have enabled the Google Kubernetes Engine API. Enable Google Kubernetes Engine API
- Ensure that you have installed the Cloud SDK.
Set up default gcloud
settings using one of the following methods:
- Using
gcloud init
, if you want to be walked through setting defaults. - Using
gcloud config
, to individually set your project ID, zone, and region.
Using gcloud init
If you receive the error One of [--zone, --region] must be supplied: Please specify
location
, complete this section.
-
Run
gcloud init
and follow the directions:gcloud init
If you are using SSH on a remote server, use the
--console-only
flag to prevent the command from launching a browser:gcloud init --console-only
-
Follow the instructions to authorize
gcloud
to use your Google Cloud account. - Create a new configuration or select an existing one.
- Choose a Google Cloud project.
- Choose a default Compute Engine zone for zonal clusters or a region for regional or Autopilot clusters.
Using gcloud config
- Set your default project ID:
gcloud config set project PROJECT_ID
- If you are working with zonal clusters, set your default compute zone:
gcloud config set compute/zone COMPUTE_ZONE
- If you are working with Autopilot or regional clusters, set your default compute region:
gcloud config set compute/region COMPUTE_REGION
- Update
gcloud
to the latest version:gcloud components update
Creating a cluster with authorized networks
You can create a cluster with one or more authorized networks by using the
gcloud
tool, the Google Cloud Console, or the GKE API.
gcloud
Run the following command:
gcloud container clusters create cluster-name \
--enable-master-authorized-networks \
--master-authorized-networks cidr1,cidr2...
Replace the following:
- cluster-name: is the name of your existing cluster.
- cidr1, cidr2: The CIDR values for the authorized networks.
With the --master-authorized-networks
flag, you can specify up to 50
comma-delimited CIDRs (such as 8.8.8.0/24
) that you'd like to grant
access your cluster control plane endpoint through HTTPS.
For example:
gcloud container clusters create example-cluster \
--enable-master-authorized-networks \
--master-authorized-networks 8.8.8.8/32,8.8.8.0/24
Console
Visit the Google Kubernetes Engine menu in Cloud Console.
Click add_box Create.
Configure your cluster as desired.
From the navigation pane, under Cluster, click Networking.
Under Advanced networking options, select the Enable master authorized networks checkbox.
Click Add authorized network.
Enter a Name for the network.
For Network, enter a CIDR range that you want to grant access to your cluster control plane.
Click Done. Add additional authorized networks as desired.
Click Create.
API
Specify the masterAuthorizedNetworksConfig
object in your cluster
create
request:
"masterAuthorizedNetworksConfig": {
"enabled": true,
"cidrBlocks": [
{
"displayName": string,
"cidrBlock": string
}
]
}
For more information, refer to MasterAuthorizedNetworksConfig.
Creating a private cluster with authorized networks
To learn how to create a private cluster with one or more authorized networks, refer to Private Clusters.
Add an authorized network to an existing cluster
You can add an authorized network to an existing cluster using the gcloud
command-line tool, or by using Cloud Console.
gcloud
Run the following command:
gcloud container clusters update cluster-name \
--enable-master-authorized-networks \
--master-authorized-networks cidr1,cidr2...
Replace the following:
- cluster-name: is the name of your existing cluster.
- cidr1, cidr2: The CIDR values for the authorized networks.
With the --master-authorized-networks
flag, you can specify up to 50
comma-delimited CIDRs (such as 8.8.8.0/24
) that you'd like to grant
access your cluster control plane endpoint through HTTPS.
For example:
gcloud container clusters update example-cluster \
--enable-master-authorized-networks \
--master-authorized-networks 8.8.8.8/32,8.8.8.0/24
Console
Visit the Google Kubernetes Engine menu in Cloud Console.
Click the name of the cluster you want to modify.
Under Networking, in the Master authorized networks field, click edit Edit master authorized networks.
Select the Enable master authorized networks checkbox.
Click Add authorized network.
Enter a Name for the network.
For Network, enter a CIDR range that you want to grant access to your cluster control plane.
Click Done. Add additional authorized networks as desired.
Click Save Changes.
API
Specify the desiredMasterAuthorizedNetworksConfig
field in your cluster
update
request. In the field, specify a
MasterAuthorizedNetworksConfig object:
"desiredMasterAuthorizedNetworksConfig": {
object(MasterAuthorizedNetworksConfig)
}
Verifying an authorized network
You can verify an authorized network in an existing cluster using the gcloud
command-line tool, or by using Cloud Console.
gcloud
Run the following command:
gcloud container clusters describe cluster-name
In the command output, look for the masterAuthorizedNetworksConfig
field:
...
masterAuthorizedNetworksConfig:
cidrBlocks:
- cidrBlock: 8.8.8.8/32
- cidrBlock: 8.8.4.4/32
enabled: true
...
Console
Visit the Google Kubernetes Engine menu in Cloud Console.
Click the name of the cluster you want to modify.
Under Networking, note that the Master authorized networks field displays the allowed CIDRs.
API
Send a get
request. Look for the CIDR blocks under the
masterAuthorizedNetworksConfig
field. For example:
"masterAuthorizedNetworksConfig": {
"enabled": true,
"cidrBlocks": [
{
"displayName": "Office",
"cidrBlock": "192.0.2.0/24"
}
]
}
Disable authorized networks
You can disable authorized networks for an existing cluster using the gcloud
command-line tool, or by using Cloud Console.
gcloud
Run the following command:
gcloud container clusters update cluster-name \
--no-enable-master-authorized-networks
Console
Visit the Google Kubernetes Engine menu in Cloud Console.
Click the name of the cluster you want to modify.
Under Networking, in the Master authorized networks field, click edit Edit master authorized networks.
Clear the Enable master authorized networks checkbox.
Click Save Changes.
Troubleshooting
The following sections explain how to resolve common issues with authorized networks.
Too many CIDR blocks
gcloud
returns the following error when attempting to create or update a
cluster with more than 50 CIDR blocks:
ERROR: (gcloud.container.clusters.update) argument --master-authorized-networks: too many args
To resolve this issue, ensure that you specify fewer than 50 CIDR blocks.
Unable to connect to the server
kubectl
commands time out due to incorrectly configured CIDR blocks:
Unable to connect to the server: dial tcp MASTER_IP: getsockopt: connection timed out
When you create or update a cluster, ensure that you specify the correct CIDR blocks.
What's next
- Read the GKE network overview.
- Learn about VPC-native clusters.
- Learn about firewall rules.
- Learn how to create private clusters.