O GKE na AWS é executado em uma Nuvem Privada Virtual (VPC) da AWS. Esta página explica como configurar uma nova VPC para o seu cluster.
O GKE na AWS cria e gerencia recursos dentro da VPC que você especificar. Você também precisa criar várias sub-redes dentro da VPC:
- Até três sub-redes para os nós do plano de controle
- Uma sub-rede para o pool de nós
- Sub-redes para balanceadores de carga do Kubernetes Service
Esta página é para especialistas em redes que desejam instalar, configurar e oferecer suporte a equipamentos de rede. Para saber mais sobre funções comuns e exemplos de tarefas que mencionamos em Google Cloud conteúdo, consulte Funções e tarefas comuns do usuário do GKE Enterprise .
Exemplo de VPC
Siga estas etapas para configurar a VPC ilustrada abaixo. Para seus próprios casos de uso de produção, você pode escolher diferentes intervalos de IP, zonas de disponibilidade, sub-redes e listas de controle de acesso à rede adequados às suas cargas de trabalho.
O diagrama a seguir mostra o exemplo de VPC que você cria ao seguir estas etapas:
Este exemplo usa três zonas de disponibilidade: Zona de Disponibilidade 1 , Zona de Disponibilidade 2 e Zona de Disponibilidade 3. Por exemplo, para criar uma VPC na região
us-east-1
, elas podem ser definidas comous-east-1a
,us-east-1b
eus-east-1c
.Dentro de cada uma das três zonas de disponibilidade, há uma sub-rede pública e uma sub-rede privada.
Réplicas do plano de controle e pontos de extremidade do balanceador de carga, bem como pools de nós, são criados nas sub-redes privadas.
Sub-redes públicas fornecem acesso de saída à Internet para sub-redes privadas e pontos de extremidade do balanceador de carga público.
Todas essas sub-redes são marcadas para descoberta automática de sub-redes . Balanceadores de carga internos serão provisionados nas sub-redes privadas e balanceadores de carga voltados para a Internet nas sub-redes públicas.
Crie sua VPC
Escolha um prefixo e edite a variável de página AMC_PREFIX no comando abaixo para defini-la com o prefixo escolhido. Os comandos de exemplo abaixo anexarão automaticamente esse prefixo a todas as referências à sua VPC e seus recursos.
Crie uma Nuvem Privada Virtual (VPC) da AWS:
aws --region AWS_REGION ec2 create-vpc \ --cidr-block 10.0.0.0/16 \ --tag-specifications 'ResourceType=vpc, Tags=[{Key=Name,Value=AMC_PREFIXVPC}]'
Substitua o seguinte:
-
AWS_REGION
: o nome da região AWS com suporte para criar a VPC -
AMC_PREFIX
: o prefixo do nome da VPC que você escolheu para sua VPC e seus recursos
-
Salve seu ID da VPC em uma variável de ambiente e ative o suporte DNS fornecido pela AWS para a VPC:
VPC_ID=$(aws ec2 describe-vpcs \ --filters 'Name=tag:Name,Values=AMC_PREFIXVPC' \ --query "Vpcs[].VpcId" --output text) aws ec2 modify-vpc-attribute --enable-dns-hostnames --vpc-id $VPC_ID aws ec2 modify-vpc-attribute --enable-dns-support --vpc-id $VPC_ID
Você também pode usar configurações de DNS diferentes para sua VPC. Para mais informações, consulte DNS da VPC da AWS .
Sub-redes do plano de controle
Você pode configurar até três sub-redes para réplicas do plano de controle. Se você especificar menos de três sub-redes, o GKE na AWS criará três réplicas do plano de controle e as distribuirá entre as sub-redes especificadas.
Os clusters são privados para sua VPC. O acesso direto de entrada aos clusters pela internet não é permitido. O GKE na AWS requer acesso limitado de saída à internet para criar e gerenciar clusters. Este exemplo usa um gateway de internet para acesso de saída.
Requisitos de sub-rede
As sub-redes devem
- Ser capaz de resolver endereços DNS
- Ser capaz de estabelecer conexões TCP de saída na porta 443 para endereços IP roteáveis
- Ser capaz de se conectar aos seguintes endpoints:
Ponto final | Propósito |
---|---|
storage.googleapis.com | Para baixar do Cloud Storage durante a instalação |
*.gcr.io | Para baixar do Container Registry durante a instalação |
gkeconnect.googleapis.com | Para conectar-se ao serviço de gerenciamento |
oauth2.googleapis.com | Para autenticação de cluster |
sts.googleapis.com | Para autenticação de cluster |
logging.googleapis.com | Para enviar logs para o Cloud Logging |
monitoramento.googleapis.com | Para enviar métricas ao Cloud Monitoring |
opsconfigmonitoring.googleapis.com` | Para enviar metadados de recursos para o Cloud Monitoring |
servicecontrol.googleapis.com | Para registro de auditoria em nuvem |
Se você não tiver sub-redes para suas instâncias do plano de controle, use os seguintes comandos para criá-las.
Criar sub-redes privadas
Crie três sub-redes privadas em suas zonas de disponibilidade correspondentes:
aws ec2 create-subnet \
--availability-zone AWS_ZONE_1 \
--vpc-id $VPC_ID \
--cidr-block 10.0.1.0/24 \
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet1}]'
aws ec2 create-subnet \
--availability-zone AWS_ZONE_2 \
--vpc-id $VPC_ID \
--cidr-block 10.0.2.0/24 \
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet2}]'
aws ec2 create-subnet \
--availability-zone AWS_ZONE_3 \
--vpc-id $VPC_ID \
--cidr-block 10.0.3.0/24 \
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet3}]'
Substitua o seguinte:
-
AWS_ZONE_1
: Zona de disponibilidade 1 -
AWS_ZONE_2
: Zona de disponibilidade 2 -
AWS_ZONE_3
: Zona de disponibilidade 3
Criar sub-redes públicas
Crie três sub-redes públicas. Elas serão usadas para fornecer acesso de saída à internet para as sub-redes privadas.
aws ec2 create-subnet \ --availability-zone AWS_ZONE_1 \ --vpc-id $VPC_ID \ --cidr-block 10.0.101.0/24 \ --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet1}]' aws ec2 create-subnet \ --availability-zone AWS_ZONE_2 \ --vpc-id $VPC_ID \ --cidr-block 10.0.102.0/24 \ --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet2}]' aws ec2 create-subnet \ --availability-zone AWS_ZONE_3 \ --vpc-id $VPC_ID \ --cidr-block 10.0.103.0/24 \ --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet3}]'
Substitua o seguinte:
-
AWS_ZONE_1
-
AWS_ZONE_2
-
AWS_ZONE_3
-
Marque as sub-redes como públicas:
PUBLIC_SUBNET_ID_1=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet1' \ --query "Subnets[].SubnetId" --output text) PUBLIC_SUBNET_ID_2=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet2' \ --query "Subnets[].SubnetId" --output text) PUBLIC_SUBNET_ID_3=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet3' \ --query "Subnets[].SubnetId" --output text) aws ec2 modify-subnet-attribute \ --map-public-ip-on-launch \ --subnet-id $PUBLIC_SUBNET_ID_1 aws ec2 modify-subnet-attribute \ --map-public-ip-on-launch \ --subnet-id $PUBLIC_SUBNET_ID_2 aws ec2 modify-subnet-attribute \ --map-public-ip-on-launch \ --subnet-id $PUBLIC_SUBNET_ID_3
Criar um gateway de internet
Crie um gateway de internet para que as sub-redes públicas tenham acesso à internet:
aws --region AWS_REGION ec2 create-internet-gateway \ --tag-specifications 'ResourceType=internet-gateway, Tags=[{Key=Name,Value=AMC_PREFIXInternetGateway}]'
Substitua
AWS_REGION
: o nome da região da AWS onde sua VPC foi criada.Anexe o gateway de internet à sua VPC:
INTERNET_GW_ID=$(aws ec2 describe-internet-gateways \ --filters 'Name=tag:Name,Values=AMC_PREFIXInternetGateway' \ --query "InternetGateways[].InternetGatewayId" --output text) aws ec2 attach-internet-gateway \ --internet-gateway-id $INTERNET_GW_ID \ --vpc-id $VPC_ID
Configurar as tabelas de roteamento para sub-redes públicas
Crie uma tabela de rotas para cada uma das sub-redes públicas.
aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl1}]' aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl2}]' aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl3}]'
Associe as tabelas de rotas públicas às sub-redes públicas:
PUBLIC_ROUTE_TABLE_ID_1=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl1' \ --query "RouteTables[].RouteTableId" --output text) PUBLIC_ROUTE_TABLE_ID_2=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl2' \ --query "RouteTables[].RouteTableId" --output text) PUBLIC_ROUTE_TABLE_ID_3=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl3' \ --query "RouteTables[].RouteTableId" --output text) aws ec2 associate-route-table \ --route-table-id $PUBLIC_ROUTE_TABLE_ID_1 \ --subnet-id $PUBLIC_SUBNET_ID_1 aws ec2 associate-route-table \ --route-table-id $PUBLIC_ROUTE_TABLE_ID_2 \ --subnet-id $PUBLIC_SUBNET_ID_2 aws ec2 associate-route-table \ --route-table-id $PUBLIC_ROUTE_TABLE_ID_3 \ --subnet-id $PUBLIC_SUBNET_ID_3
Crie rotas padrão para o gateway de internet:
aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_1 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_2 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_3 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID
Aloque um endereço IP elástico (EIP) para cada gateway NAT:
aws ec2 allocate-address \ --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip1}]' aws ec2 allocate-address \ --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip2}]' aws ec2 allocate-address \ --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip3}]'
Criar gateways NAT
Crie um gateway NAT em cada uma das três sub-redes públicas:
NAT_EIP_ALLOCATION_ID_1=$(aws ec2 describe-addresses \
--filters 'Name=tag:Name,Values=AMC_PREFIXNatEip1' \
--query "Addresses[].AllocationId" --output text)
NAT_EIP_ALLOCATION_ID_2=$(aws ec2 describe-addresses \
--filters 'Name=tag:Name,Values=AMC_PREFIXNatEip2' \
--query "Addresses[].AllocationId" --output text)
NAT_EIP_ALLOCATION_ID_3=$(aws ec2 describe-addresses \
--filters 'Name=tag:Name,Values=AMC_PREFIXNatEip3' \
--query "Addresses[].AllocationId" --output text)
aws ec2 create-nat-gateway \
--allocation-id $NAT_EIP_ALLOCATION_ID_1 \
--subnet-id $PUBLIC_SUBNET_ID_1 \
--tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway1}]'
aws ec2 create-nat-gateway \
--allocation-id $NAT_EIP_ALLOCATION_ID_2 \
--subnet-id $PUBLIC_SUBNET_ID_2 \
--tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway2}]'
aws ec2 create-nat-gateway \
--allocation-id $NAT_EIP_ALLOCATION_ID_3 \
--subnet-id $PUBLIC_SUBNET_ID_3 \
--tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway3}]'
Configurar as tabelas de roteamento para sub-redes privadas
Crie uma tabela de rotas para cada sub-rede privada:
aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl1}]' aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl2}]' aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl3}]'
Associe as tabelas de rotas privadas às sub-redes privadas:
PRIVATE_SUBNET_ID_1=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet1' \ --query "Subnets[].SubnetId" --output text) PRIVATE_SUBNET_ID_2=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet2' \ --query "Subnets[].SubnetId" --output text) PRIVATE_SUBNET_ID_3=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet3' \ --query "Subnets[].SubnetId" --output text) PRIVATE_ROUTE_TABLE_ID_1=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl1' \ --query "RouteTables[].RouteTableId" --output text) PRIVATE_ROUTE_TABLE_ID_2=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl2' \ --query "RouteTables[].RouteTableId" --output text) PRIVATE_ROUTE_TABLE_ID_3=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl3' \ --query "RouteTables[].RouteTableId" --output text) aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_1 \ --subnet-id $PRIVATE_SUBNET_ID_1 aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_2 \ --subnet-id $PRIVATE_SUBNET_ID_2 aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_3 \ --subnet-id $PRIVATE_SUBNET_ID_3
Crie as rotas padrão para gateways NAT:
NAT_GW_ID_1=$(aws ec2 describe-nat-gateways \ --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway1' \ --query "NatGateways[].NatGatewayId" --output text) NAT_GW_ID_2=$(aws ec2 describe-nat-gateways \ --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway2' \ --query "NatGateways[].NatGatewayId" --output text) NAT_GW_ID_3=$(aws ec2 describe-nat-gateways \ --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway3' \ --query "NatGateways[].NatGatewayId" --output text) aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_1 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_1 aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_2 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_2 aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_3 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_3
Sub-redes do pool de nós
Cada pool de nós é colocado em uma única sub-rede. Você pode colocar vários pools de nós em uma sub-rede. O número de nós e pools de nós que você pode criar é limitado pelo intervalo de endereços IP disponível na sub-rede.
Cada sub-rede do pool de nós deve:
- Atenda aos mesmos requisitos de acesso de saída à Internet que suas sub-redes do plano de controle
- Tenha espaço de endereço IP suficiente para cobrir o tamanho do pool de nós
- Não ter a opção "Atribuição automática de IPs públicos" habilitada
As sub-redes privadas criadas anteriormente atendem aos requisitos para sub-redes do plano de controle e sub-redes do pool de nós.
Sub-redes do balanceador de carga de serviço
Se você estiver criando balanceadores de carga de rede ou balanceadores de carga HTTP , marque as sub-redes do balanceador de carga para descoberta automática.
Marque as sub-redes públicas com kubernetes.io/role/elb
:
aws ec2 create-tags \
--resources $PUBLIC_SUBNET_ID_1 \
--tags Key=kubernetes.io/role/elb,Value=1
aws ec2 create-tags \
--resources $PUBLIC_SUBNET_ID_2 \
--tags Key=kubernetes.io/role/elb,Value=1
aws ec2 create-tags \
--resources $PUBLIC_SUBNET_ID_3 \
--tags Key=kubernetes.io/role/elb,Value=1
Marque as sub-redes privadas com kubernetes.io/role/internal-elb
:
aws ec2 create-tags \
--resources $PRIVATE_SUBNET_ID_1 \
--tags Key=kubernetes.io/role/internal-elb,Value=1
aws ec2 create-tags \
--resources $PRIVATE_SUBNET_ID_2 \
--tags Key=kubernetes.io/role/internal-elb,Value=1
aws ec2 create-tags \
--resources $PRIVATE_SUBNET_ID_3 \
--tags Key=kubernetes.io/role/internal-elb,Value=1