mirror of https://github.com/kubernetes/kops.git
				
				
				
			
		
			
				
	
	
		
			90 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # Network Topologies in kOps
 | |
| 
 | |
| kOps supports a number of pre-defined network topologies. They are separated into commonly used scenarios, or topologies.
 | |
| 
 | |
| Each of the supported topologies are listed below, with an example on how to deploy them.
 | |
| 
 | |
| # Supported Topologies
 | |
| 
 | |
| kOps supports the following topologies:
 | |
| 
 | |
| | Topology        | Value   | Description                                                               |
 | |
| |-----------------|---------|---------------------------------------------------------------------------|
 | |
| | Public Cluster  | public  | All nodes will be launched in a subnet accessible from the internet.      |
 | |
| | Private Cluster | private | All nodes will be launched in a subnet with no ingress from the internet. |
 | |
| 
 | |
| # Types of Subnets
 | |
| 
 | |
| ## Public Subnet
 | |
| 
 | |
| A subnet of type `Public` accepts incoming traffic from the internet.
 | |
| 
 | |
| ## Private Subnet
 | |
| 
 | |
| A subnet of type `Private` does not route traffic from the internet.
 | |
| 
 | |
| If a cluster is IPv6, then `Private` subnets are IPv6-only.
 | |
| 
 | |
| If the subnet is capable of IPv4, it typically has a CIDR range from private IP address space.
 | |
| Egress to the internet is typically routed through a Network Address Translation (NAT) device,
 | |
| such as an AWS NAT Gateway.
 | |
| 
 | |
| If the subnet is capable of IPv6, egress to the internet is typically routed through a
 | |
| connection-tracking firewall, such as an AWS Egress-only Internet Gateway. Egress to the
 | |
| NAT64 range `64:ff9b::/96` is typically routed to a NAT64 device, such as an AWS NAT Gateway.
 | |
| 
 | |
| ## DualStack Subnet
 | |
| 
 | |
| A subnet of type `DualStack` is like `Private`, but supports both IPv4 and IPv6.
 | |
| 
 | |
| On AWS, this subnet type is used for nodes, such as control plane nodes and bastions,
 | |
| which need to be instance targets of a load balancer.
 | |
| 
 | |
| ## Utility Subnet
 | |
| 
 | |
| A subnet of type `Utility` is like `Public`, but is not used to provision nodes.
 | |
| 
 | |
| Utility subnets are used to provision load balancers that accept ingress from the internet.
 | |
| They are also used to provision NAT devices.
 | |
| 
 | |
| # Defining a topology on create
 | |
| 
 | |
| To specify a topology use the `--topology` or `-t` flag as in :
 | |
| 
 | |
| ```
 | |
| kops create cluster ... --topology public|private
 | |
| ```
 | |
| 
 | |
| You may also set a [networking option](networking.md), with the exception that the
 | |
| `kubenet` option does not support private topology.
 | |
| 
 | |
| Newly created clusters with private topology *will* have public access to the Kubernetes API and an (optional) SSH bastion instance
 | |
| through load balancers. This can be changed as described below.
 | |
| 
 | |
| ## Changing the Topology of the API Server
 | |
| 
 | |
| To change the load balancer that fronts the API server from internet-facing to internal-only there are a few steps to accomplish:
 | |
| 
 | |
| AWS load balancers do not support changing from internet-facing to internal. However, we can manually delete it and have kOps recreate the ELB for us.
 | |
| 
 | |
| ### Steps to Change the Load Balancer from Internet-Facing to Internal
 | |
|  
 | |
| - Edit the cluster: `kops edit cluster $NAME`
 | |
| - Change the api load balancer type from: Public to Internal. It should look like this when done:
 | |
| ```yaml
 | |
|  spec:
 | |
|     api:
 | |
|       loadBalancer:
 | |
|         type: Internal
 | |
| ```
 | |
|  - Save and exit the edit
 | |
|  - Run the update command to check the config: `kops update cluster $NAME`
 | |
|  - BEFORE DOING the same command with the `--yes` option, go into the AWS console and DELETE the api load balancer
 | |
|  - Run: `kops update cluster $NAME --yes`
 | |
|  - Run a rolling update so that the control plane nodes register with the new internal load balancer.
 | |
|  Run `kops rolling-update cluster --cloudonly --force --instance-group-roles master --yes` command.  
 | |
|  We have to use the  `--cloudonly` option because we deleted the API load balancer, leaving no way to talk to the Kubernetes API.
 | |
|  The `--force` option is there because otherwise kOps doesn't know that we need to update the control plane nodes.
 | |
|  Once the rolling update has completed you have an internal only load balancer that has the control plane nodes registered with it.
 | |
| 
 |