Prepare clusters locais do Amazon EKS em AWS Outposts para desconexões de rede
Se a sua rede local tiver perdido a conectividade com o AWS Cloud, você poderá continuar a usar o cluster local do Amazon EKS em um Outpost. Este tópico aborda como você pode preparar o cluster local para desconexões de rede e as considerações relacionadas.
-
Clusters locais permitem estabilidade e operações contínuas durante desconexões temporárias e não planejadas da rede. AWS O Outposts continua sendo uma oferta totalmente conectada que atua como uma extensão da Nuvem AWS no seu data center. Em caso de desconexão da rede entre o Outpost e o AWS Cloud, recomendamos tentar restaurar a conexão. Para obter instruções, consulte a lista de verificação de solução de problemas da rede do rack doAWS Outposts no Guia do Usuário do AWS Outposts. Para obter informações sobre como solucionar problemas de clusters locais, consulte Solucionar problemas de clusters locais do Amazon EKS em AWS Outposts.
-
Os Outposts emitem uma métrica
ConnectedStatus
que você pode usar para monitorar o estado da conectividade do Outpost. Para obter mais informações, consulte Outposts Metrics no Guia do Usuário do AWS Outposts. -
Os clusters locais usam o IAM como mecanismo de autenticação padrão usando o autenticador do AWS Identity and Access Management para Kubernetes
. O IAM não está disponível durante desconexões de rede. Assim, os clusters locais são compatíveis com um mecanismo de autenticação alternativo usando certificados x.509
que você pode usar para se conectar ao cluster durante desconexões de rede. Para obter informações sobre como obter e usar um certificadox.509
para o cluster, consulte Autenticar no cluster local durante uma desconexão de rede. -
Caso não você consiga acessar o Route 53 durante desconexões de rede, considere o uso de servidores DNS locais no ambiente on-premises. As instâncias do ambiente de gerenciamento do Kubernetes usam endereços IP estáticos. Você pode configurar os hosts que usa para se conectar ao cluster com o nome do host do endpoint e os endereços IP como uma alternativa ao uso de servidores DNS locais. Para obter mais informações, consulte DNS no Guia do Usuário do AWS Outposts.
-
Se você esperar aumentos no tráfego das aplicações durante desconexões de rede, pode provisionar capacidade computacional adicional no cluster quando estiver conectado à nuvem. As instâncias do Amazon EC2 estão incluídas no preço do AWS Outposts. Portanto, a execução de instâncias adicionais não afeta o custo de uso da AWS.
-
Durante desconexões de rede para permitir operações de criação, atualização e escalação de workloads, as imagens de contêiner da aplicação devem estar acessíveis pela rede local e o cluster deve ter capacidade suficiente. Os clusters locais não hospedam um registro de contêiner para você. Se os Pods foram executados anteriormente nesses nós, as imagens de contêiners serão armazenadas em cache nos nós. Se você normalmente extrair imagens de contêiner da aplicação do Amazon ECR na nuvem, considere executar um cache ou registro local. Um cache ou registro local será útil se você precisar de operações de criação, atualização e escalação para recursos de workload durante desconexões de rede.
-
Os clusters locais usam o Amazon EBS como a classe de armazenamento padrão para volumes persistentes e o driver da CSI do Amazon EBS para gerenciar o ciclo de vida dos volumes persistentes do Amazon EBS. Durante desconexões de rede, os Pods que são baseados no Amazon EBS não podem ser criados, atualizados nem escalados. Isso porque essas operações exigem chamadas para a API do Amazon EBS na nuvem. Se você estiver implantando workloads com estado em clusters locais e precisar de operações de criação, atualização ou escalabilidade durante desconexões de rede, considere usar um mecanismo de armazenamento alternativo.
-
Os snapshots do Amazon EBS não poderão ser criados ou excluídos se o AWS Outposts não puder acessar as APIs relevantes da região do AWS (como as APIs do Amazon EBS ou do Amazon S3).
-
Ao integrar o ALB (Ingress) com o AWS Certificate Manager (ACM), os certificados são enviados e armazenados na memória da instância do AWS Outposts ALB Compute. A terminação TLS atual continuará a funcionar no caso de uma desconexão da região AWS. As operações de mutação nesse contexto falharão (como novas definições de entrada, novas operações de API de certificados baseados em ACM, escala de computação do ALB ou rotação de certificados). Para obter mais informações, consulte Solução de problemas de renovação de certificados gerenciados no Guia do Usuário do AWS Certificate Manager.
-
Os logs do ambiente de gerenciamento do Amazon EKS são armazenados em cache localmente nas instâncias do ambiente de gerenciamento do Kubernetes durante desconexões de rede. Após a reconexão, os logs são enviados para o CloudWatch Logs na região da AWS principal. Você pode usar o Prometheus
, o Grafana ou as soluções de parceiros do Amazon EKS para monitorar o cluster localmente usando o endpoint de métricas do servidor de API Kubernetes ou usando Fluent Bit para logs. -
Se você estiver usando o AWS Load Balancer Controller no Outposts para tráfego das aplicações, os Pods existentes fronteados pelo AWS Load Balancer Controller continuarão a receber tráfego durante desconexões de rede. O novo Pods criado durante as desconexões de rede não recebe tráfego até que o Outpost seja reconectado à Nuvem AWS. Considere a possibilidade de definir a contagem de réplicas para suas aplicações enquanto estiver conectado ao AWS Cloud para acomodar suas necessidades de dimensionamento durante as desconexões de rede.
-
O Amazon VPC CNI plugin for Kubernetes assume o modo IP secundário
por padrão. Ele é configurado com WARM_ENI_TARGET
=1
, o que permite que o plug-in mantenha disponível “uma interface de rede totalmente elástica” de endereços IP. Considere mudar os valoresWARM_ENI_TARGET
,WARM_IP_TARGET
eMINIMUM_IP_TARGET
de acordo com suas necessidades de escalonamento durante um estado desconectado. Para obter mais informações, consulte o arquivo readmedo plug-in no GitHub. Para obter uma lista do número máximo de Pods que é suportado por cada tipo de instância, consulte o arquivo eni-max-pods.txt no GitHub.
Autenticar no cluster local durante uma desconexão de rede
O AWS Identity and Access Management (IAM) não está disponível durante desconexões de rede. Você não pode autenticar no cluster local usando credenciais do IAM enquanto está desconectado. Porém, você pode se conectar ao cluster pela rede local usando certificados x509
quando estiver desconectado. Você precisa baixar e armazenar o certificado X509
de um cliente para usar durante as desconexões. Neste tópico, você aprenderá a criar e usar o certificado para autenticação no cluster quando ele está em um estado desconectado.
-
Crie uma solicitação de assinatura do certificado.
-
Gere uma solicitação de assinatura do certificado.
openssl req -new -newkey rsa:4096 -nodes -days 365 \ -keyout admin.key -out admin.csr -subj "/CN=admin"
-
Crie uma solicitação de assinatura do certificado no Kubernetes.
BASE64_CSR=$(cat admin.csr | base64 -w 0) cat << EOF > admin-csr.yaml apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: admin-csr spec: signerName: kubernetes.io/kube-apiserver-client request: ${BASE64_CSR} usages: - client auth EOF
-
-
Crie uma solicitação de assinatura do certificado usando o
kubectl
.kubectl create -f admin-csr.yaml
-
Verifique o status da solicitação de assinatura do certificado.
kubectl get csr admin-csr
Veja um exemplo de saída abaixo.
NAME AGE REQUESTOR CONDITION admin-csr 11m kubernetes-admin Pending
O Kubernetes criou a solicitação de assinatura do certificado.
-
Aprove a solicitação de assinatura do certificado.
kubectl certificate approve admin-csr
-
Verifique novamente o status da solicitação de assinatura do certificado para aprovação.
kubectl get csr admin-csr
Veja um exemplo de saída abaixo.
NAME AGE REQUESTOR CONDITION admin-csr 11m kubernetes-admin Approved
-
Recupere e verifique o certificado.
-
Recupere o certificado.
kubectl get csr admin-csr -o jsonpath='{.status.certificate}' | base64 --decode > admin.crt
-
Verifique o certificado.
cat admin.crt
-
-
Crie uma vinculação de função de cluster para um usuário
admin
.kubectl create clusterrolebinding admin --clusterrole=cluster-admin \ --user=admin --group=system:masters
-
Gere um kubeconfig com escopo de usuário para um estado desconectado.
Você pode gerar um arquivo
kubeconfig
usando os certificadosadmin
baixados. Substituamy-cluster
eapiserver-endpoint
nos comandos a seguir.aws eks describe-cluster --name my-cluster \ --query "cluster.certificateAuthority" \ --output text | base64 --decode > ca.crt
kubectl config --kubeconfig admin.kubeconfig set-cluster my-cluster \ --certificate-authority=ca.crt --server apiserver-endpoint --embed-certs
kubectl config --kubeconfig admin.kubeconfig set-credentials admin \ --client-certificate=admin.crt --client-key=admin.key --embed-certs
kubectl config --kubeconfig admin.kubeconfig set-context admin@my-cluster \ --cluster my-cluster --user admin
kubectl config --kubeconfig admin.kubeconfig use-context admin@my-cluster
-
Visualize o arquivo
kubeconfig
.kubectl get nodes --kubeconfig admin.kubeconfig
-
Se você já tiver serviços em produção no Outpost, pule esta etapa. Se o Amazon EKS for o único serviço em execução no Outpost e o Outpost não estiver em produção no momento, você poderá simular uma desconexão de rede. Antes de entrar em produção com o cluster local, simule uma desconexão para ter certeza de que pode acessar o cluster mesmo quando ele está no estado desconectado.
-
Aplique regras de firewall nos dispositivos de rede que conectam seu Outpost à região da AWS. Com isso, o link de serviço do Outpost é desconectado. Você não pode criar novas instâncias. As instâncias em execução no momento perdem a conectividade com a região AWS e a Internet.
-
Você pode testar a conexão com o cluster local enquanto estiver desconectado usando o certificado
x509
. Certifique-se de alterar okubeconfig
para oadmin.kubeconfig
que você criou em uma etapa anterior. Substituamy-cluster
pelo nome do cluster local.kubectl config use-context admin@my-cluster --kubeconfig admin.kubeconfig
Se você notar algum problema com os clusters locais enquanto eles estiverem no estado desconectado, será recomendável abrir um tíquete de suporte.
-