Controlar o acesso à rede ao endpoint do servidor de API do cluster
Este tópico ajuda a ativar o acesso privado ao endpoint do servidor de API do Kubernetes de cluster do Amazon EKS e limitar ou desabilitar completamente o acesso público pela Internet.
Quando você cria um cluster, o Amazon EKS cria um endpoint para o servidor gerenciado de API do Kubernetes usado para se comunicar com o cluster (usando as ferramentas de gerenciamento do Kubernetes, como kubectl
). Por padrão, esse endpoint do servidor de API é público para a Internet, e o acesso ao servidor de API é protegido usando uma combinação de AWS Identity and Access Management (IAM) e Kubernetes Role Based Access Control
Formato de endpoint de cluster IPv6
O EKS cria um endpoint exclusivo de pilha dupla no seguinte formato para novos clusters IPv6
criados após outubro de 2024. Um cluster IPv6 é um cluster que você seleciona IPv6
na configuração da família de IP (ipFamily
) do cluster.
nota
O endpoint de cluster de pilha dupla foi introduzido em outubro de 2024. Para obter mais informações sobre clusters IPv6
, consulte Saiba mais sobre endereços IPv6 para clusters, pods e serviços. Clusters criados antes de outubro de 2024 devem usar o seguinte formato de endpoint.
Formato de endpoint de cluster IPv4
O EKS cria um endpoint exclusivo no formato a seguir para cada cluster que seleciona IPv4
na configuração da família de IP (ipFamily) do cluster:
nota
Antes de outubro de 2024, os clusters IPv6
também usavam esse formato de endpoint. Para eles, tanto o endpoint público quanto o privado têm apenas endereços IPv4
resolvidos a partir desse endpoint.
Endpoint privado do cluster
Você pode habilitar o acesso privado ao servidor de API do Kubernetes para que todas as comunicações entre os nós e o servidor de API fiquem na VPC. Você pode limitar os endereços IP que podem acessar o servidor de API pela Internet ou desativar completamente o acesso à Internet para o servidor de API.
nota
Como esse endpoint é para o servidor de API do Kubernetes, não um endpoint tradicional do AWS PrivateLink para comunicação com uma API da AWS, ele não aparece como um endpoint no console da Amazon VPC.
Ao ativar o acesso privado ao endpoint para o cluster, o Amazon EKS cria uma zona hospedada privada do Route 53 em seu nome e a associa à VPC do cluster. Essa zona hospedada privada é gerenciada pelo Amazon EKS e não aparece nos recursos do Route 53 da sua conta. Para que a zona hospedada privada roteie o tráfego adequadamente para o seu servidor da API, a VPC deve ter enableDnsHostnames
e enableDnsSupport
definidos como true
, e o conjunto de opções DHCP para sua VPC deve incluir AmazonProvidedDNS
na lista de servidores de nome de domínio. Para obter mais informações, consulte Updating DNS support for your VPC (Atualizar o suporte de DNS para VPC) no Manual do usuário da Amazon VPC.
É possível definir os requisitos de acesso ao endpoint do servidor de API ao criar um cluster, e você pode atualizar o acesso ao endpoint do servidor de API para um cluster a qualquer momento.
Modificar o acesso ao endpoint do cluster
Use os procedimentos desta seção para modificar o acesso ao endpoint para um cluster existente. A tabela a seguir mostra as combinações compatíveis de acesso ao endpoint do servidor de API e seus comportamentos associados.
Acesso público ao endpoint | Acesso privado ao endpoint | Comportamento |
---|---|---|
Habilitado |
Desabilitado |
|
Habilitado |
Habilitado |
|
Desabilitado |
Habilitado |
|
Você pode modificar o acesso ao endpoint do servidor de API do cluster usando a CLI AWS Management Console ou AWS.
Configure o acesso ao endpoint - AWS console
-
Abra o console do Amazon EKS
. -
Selecione o nome do cluster para exibir as informações dele.
-
Escolha a guia Networking (Redes) e selecione Update (Atualizar).
-
Em Acesso privado: escolha se deseja habilitar ou desabilitar o acesso privado para o endpoint do servidor de API do Kubernetes do cluster. Se você habilitar o acesso privado, as solicitações de API do Kubernetes originadas na VPC do cluster usarão o endpoint da VPC privado. É necessário habilitar o acesso privado para desabilitar o acesso público.
-
Em Acesso público: escolha se deseja habilitar ou desabilitar o acesso público para o endpoint do servidor de API do Kubernetes do cluster. Se você desabilitar o acesso público, o servidor de API do Kubernetes do cluster só poderá receber solicitações da VPC do cluster.
-
(Opcional) Se você habilitou o Acesso público, poderá especificar quais endereços da Internet podem se comunicar com o endpoint público. Selecione Advanced Settings (Configurações avançadas). Insira um bloco CIDR, como
203.0.113.5/32
. O bloco não pode incluir endereços reservados. É possível inserir blocos adicionais selecionando Add Source (Adicionar origem). Há um número máximo de blocos CIDR que você pode especificar. Para ter mais informações, consulte Visualizar e gerenciar as cotas de serviço do Amazon EKS e do Fargate. Se você não especificar nenhum bloco, o endpoint do servidor de API público receberá solicitações de todos os endereços IP ( 0.0.0.0/0
). Se você restringir o acesso ao endpoint público usando blocos CIDR, é recomendável habilitar também o acesso ao endpoint privado para que os nós e os Pods do Fargate (se você usá-los) possam se comunicar com o cluster. Sem o endpoint privado habilitado, suas origens CIDR de endpoint de acesso público devem incluir as origens de saída de sua VPC. Por exemplo, se você tiver um nó em uma sub-rede privada que se comunica com a Internet por meio de um gateway NAT, será necessário adicionar o endereço IP de saída do gateway NAT como parte de um bloco CIDR na lista de permissões no endpoint público. -
Selecione Update (Atualizar) para concluir.
Configurar o acesso ao endpoint - AWS CLI
Conclua as etapas a seguir usando a versão AWS CLI 1.27.160
ou posterior. É possível verificar sua versão atual com aws --version
. Para instalar ou atualizar a AWS CLI, consulte Instalar a AWS CLI.
-
Atualize o acesso ao endpoint do servidor de API do cluster com o seguinte comando da CLI AWS. Substitua o nome do cluster e os valores desejados de acesso ao endpoint. Se você definir
endpointPublicAccess=true
, também poderá inserir um único bloco CIDR ou uma lista de blocos CIDR separados por vírgulas parapublicAccessCidrs
. Os blocos não podem incluir endereços reservados. Se você especificar blocos CIDR, o endpoint do servidor de API público só receberá solicitações dos blocos listados. Há um número máximo de blocos CIDR que você pode especificar. Para ter mais informações, consulte Visualizar e gerenciar as cotas de serviço do Amazon EKS e do Fargate. Se você restringir o acesso ao endpoint público usando blocos CIDR, é recomendável habilitar também o acesso ao endpoint privado para que os nós e os Pods do Fargate (se você usá-los) possam se comunicar com o cluster. Sem o endpoint privado habilitado, suas origens CIDR de endpoint de acesso público devem incluir as origens de saída de sua VPC. Por exemplo, se você tiver um nó em uma sub-rede privada que se comunica com a Internet por meio de um gateway NAT, será necessário adicionar o endereço IP de saída do gateway NAT como parte de um bloco CIDR na lista de permissões no endpoint público. Se você não especificar nenhum bloco CIDR, o endpoint do servidor de API público receberá solicitações de todos os endereços IP (0.0.0.0/0). nota
O comando a seguir permite acesso privado e acesso público a partir de um único endereço IP para o endpoint do servidor de API. Substitua
203.0.113.5/32
por um único bloco CIDR ou uma lista de blocos CIDR separados por vírgulas aos quais você deseja restringir o acesso à rede.aws eks update-cluster-config \ --region region-code \ --name my-cluster \ --resources-vpc-config endpointPublicAccess=true,publicAccessCidrs="203.0.113.5/32",endpointPrivateAccess=true
Veja um exemplo de saída abaixo.
{ "update": { "id": "e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000", "status": "InProgress", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "true" }, { "type": "EndpointPrivateAccess", "value": "true" }, { "type": "publicAccessCidrs", "value": "[\203.0.113.5/32\"]" } ], "createdAt": 1576874258.137, "errors": [] } }
-
Monitore o status da atualização do acesso ao endpoint com o comando a seguir, usando o nome do cluster e o ID da atualização retornado pelo comando anterior. Sua atualização estará concluída quando o status for exibido como
Successful
.aws eks describe-update \ --region region-code \ --name my-cluster \ --update-id e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000
Veja um exemplo de saída abaixo.
{ "update": { "id": "e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000", "status": "Successful", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "true" }, { "type": "EndpointPrivateAccess", "value": "true" }, { "type": "publicAccessCidrs", "value": "[\203.0.113.5/32\"]" } ], "createdAt": 1576874258.137, "errors": [] } }
Acessar um servidor de API somente privado
Se tiver desabilitado o acesso público ao endpoint do servidor de API do Kubernetes do cluster, você só poderá acessar o servidor de API pela VPC ou por uma rede conectada. Veja a seguir algumas maneiras possíveis de acessar o endpoint do servidor de API do Kubernetes:
- Rede conectada
-
Conecte a sua rede à VPC com um gateway de trânsito da AWS ou outra opção de conectividade e depois use um computador na rede conectada. É necessário garantir que o grupo de segurança do plano de controle do Amazon EKS tenha regras para permitir o tráfego de entrada na porta 443 da rede conectada.
- Bastion host do Amazon EC2
-
Você pode executar uma instância do Amazon EC2 em uma sub-rede pública na VPC do cluster e fazer login via SSH nessa instância para executar os comandos do
kubectl
. Para obter mais informações, consulte Bastion hosts do Linux na AWS. É necessário garantir que o grupo de segurança do plano de controle do Amazon EKS tenha regras para permitir o tráfego de entrada na porta 443 do seu bastion host. Para ter mais informações, consulte Exibir os requisitos para grupos de segurança do Amazon EKS em clusters. Quando você configurar
kubectl
para o bastion host, use credenciais da AWS que já estiverem mapeadas para a configuração do RBAC do cluster ou adicione a entidade principal do IAM que o bastion usará para a configuração do RBAC antes de remover o acesso público ao endpoint. Para ter mais informações, consulte Conceder aos usuários e perfis do IAM acesso às APIs do Kubernetes e Acesso negado ou não autorizado (kubectl). - IDE AWS Cloud9
-
AWS O Cloud9 é um ambiente de desenvolvimento integrado (IDE) baseado em nuvem que permite que você escreva, execute e depure seu código com apenas um navegador. Você pode criar um IDE do AWS Cloud9 na VPC do seu cluster e usar o IDE para se comunicar com o cluster. Para obter mais informações, consulte Criação de um ambiente em AWS Cloud9. É necessário garantir que o grupo de segurança do plano de controle do Amazon EKS contenha regras para permitir o tráfego de entrada na porta 443 do seu grupo de segurança IDE. Para ter mais informações, consulte Exibir os requisitos para grupos de segurança do Amazon EKS em clusters.
Quando você configurar o
kubectl
para o seu AWS Cloud9 IDE, certifique-se de usar as credenciais do AWS que já estão mapeadas na configuração RBAC do cluster ou adicione a entidade principal do IAM que o IDE usará à configuração RBAC antes de remover o acesso público ao endpoint. Para ter mais informações, consulte Conceder aos usuários e perfis do IAM acesso às APIs do Kubernetes e Acesso negado ou não autorizado (kubectl).