Clusters Kubernetes multiregion resilientes e seguros com o IBM Cloud Internet Services

Este tutorial pode incorrer em custos. Use o Estimador de custos para gerar uma estimativa do custo baseada em seu uso projetado.

Os usuários são menos propensos a experienciar o tempo de inatividade quando um aplicativo é projetado com a resiliência em mente. Ao implementar uma solução com o Kubernetes Service, você se beneficia de recursos integrados, como balanceamento de carga e isolamento, maior resiliência com relação a falhas potenciais com hosts, redes ou apps. Ao criar vários clusters e se ocorrer uma interrupção em um cluster, os usuários ainda poderão acessar um aplicativo que também esteja implantado em outro cluster. Com muitos clusters em locais diferentes, os usuários também podem acessar o cluster mais próximo e reduzir a latência da rede. Para maior resiliência, você tem a opção de selecionar também os clusters de várias zonas, o que significa que seus nós são implantados em várias zonas dentro de um local.

Este tutorial destaca como o Cloud Internet Services (CIS), uma plataforma uniforme para configurar e gerenciar o DNS (Domain Name System), o GLB (Global Load Balancing), o WAF (Web Application Firewall) e a proteção contra a negação de serviço distribuída ( DDoS ) para aplicativos da Internet, pode ser integrado aos clusters do Kubernetes para dar suporte a esse cenário e fornecer uma solução segura e resiliente em vários locais.

Objetivos

  • Implante um aplicativo em vários clusters Kubernetes em diferentes locais.
  • Distribua o tráfego entre vários clusters com um balanceador de carga global.
  • Rotear usuários para o cluster mais próximo.
  • Proteger seu aplicativo contra ameaças de segurança.
  • Aumentar o desempenho do aplicativo com o armazenamento em cache.

Arquitetura*Diagrama de
do

  1. O desenvolvedor cria uma imagem Docker para o aplicativo.
  2. A imagem é enviada para Container Registry.
  3. O aplicativo é implementado em clusters Kubernetes em Dallas e Londres.
  4. Os usuários finais acessam o aplicativo.
  5. O IBM Cloud Internet Services é configurado para interceptar solicitações para o aplicativo e para distribuir a carga entre os clusters. Além disso, o DDoS Protection e o Web Application Firewall são ativados para proteger o aplicativo de ameaças comuns. Opcionalmente, ativos como imagens, arquivos CSS são armazenados em cache.

Antes de Iniciar

Este tutorial requer:

  • CLI do IBM Cloud,
    • Plug-in do IBM Cloud Kubernetes Service (kubernetes-service),
  • kubectl para interagir com clusters Kubernetes,

Você encontrará instruções para baixar e instalar essas ferramentas para o seu ambiente operacional no guia Getting started with solution tutorials.

Além disso, certifique-se de:

Implementar um aplicativo em um local

Este tutorial implementa um aplicativo Kubernetes em clusters em vários locais. Você iniciará com um local, Dallas, e, em seguida, repetirá estas etapas para Londres.

Criar um cluster Kubernetes

Um cluster mínimo com uma (1) zona e um (1) nó de trabalho é suficiente para este tutorial.

Ao criar o cluster Kubernetes a seguir:

  1. Configure Nome do cluster para my-us-cluster.

  2. Localize em América do Norte e Dallas

  3. Abra os clusters Kubernetes e clique em Create cluster (Criar cluster ).

  4. Crie um cluster em sua escolha de Infraestrutura

    • As etapas a seguir serão se você selecionar o VPC para Kubernetes na infraestrutura do VPC É necessário criar um VPC e uma ou mais sub-redes antes de criar o cluster Kubernetes. Consulte a documentação Criando clusters VPC para obter mais detalhes.

      1. Clique em Criar VPC..
      2. Na seção Local, selecione Geografia e Região, por exemplo North America e Dallas.
      3. Digite um nome para sua VPC, selecione um grupo de recursos e, opcionalmente, adicione tags para organizar seus recursos.
      4. Desmarque Permitir SSH e Permitir ping no Grupo de segurança padrão.
      5. Desmarque a opção Criar sub-rede em cada zona.
      6. Clique em Criar.
      7. Em Zonas do trabalhador e sub-redes e desmarque as duas zonas para as qual a sub-rede não foi criada.
      8. Defina Nós de trabalho por zona como 1 e clique em Alterar tipo para explorar e mudar para o tipo de nó de trabalho de sua escolha.
      9. Em Ingresso, ative Gerenciamento de segredos do Ingress e selecione sua instância existente do Secrets Manager.
      10. Insira um Nome do cluster e selecione o mesmo Grupo de recursos usado para o VPC.
      11. A criação de log ou o monitoramento não são necessários neste tutorial, desative essas opções e clique em Criar.
      12. Enquanto você espera que o cluster se torne ativo, conecte um gateway público à VPC Navegue para Nuvens privadas virtuais.
      13. Clique no nome para o VPC usado pelo cluster e role para baixo até a seção de sub-redes
      14. Clique no nome da sub-rede criada anteriormente e na seção Public Gateway, clique em Desconectado para mudar o estado para Conectado.
    • As etapas a seguir são se você selecionar Clássico para Kubernetes na infraestrutura Clássica Consulte a documentação Criando um cluster clássico padrão para obter mais detalhes.

      1. Na seção Local, selecione uma Geografia, multizona Disponibilidade e Metro por exemplo North America e Dallas.
      2. Em Zonas e VLANs do trabalhador, desmarque todas as zonas, exceto uma delas
      3. Defina Nós de trabalho por zona como 1 e clique em Alterar tipo para explorar e mudar para o tipo de nó de trabalho de sua escolha.
      4. Em Terminal em Serviço Principal e selecione Terminais privados e públicos.
      5. Em Ingresso, ative Gerenciamento de segredos do Ingress e selecione sua instância existente do Secrets Manager.
      6. Insira um Nome do cluster e selecione o Grupo de recursos no qual criar esses recursos.
      7. A criação de log ou o monitoramento não são necessários neste tutorial, desative essas opções e clique em Criar.

Enquanto o cluster está ficando pronto, você vai preparar o aplicativo.

Implementar o aplicativo no cluster Kubernetes

O cluster deve estar pronto. É possível verificar seu status no console do Kubernetes Service.

  1. Obtenha acesso ao seu cluster conforme descrito na guia Acesso de seu cluster. Algo como:

    MYCLUSTER=my-us-cluster
    ibmcloud ks cluster config --cluster $MYCLUSTER
    
  2. Crie a implementação usando uma imagem pré-construída do aplicativo. O código-fonte do aplicativo pode ser encontrado neste repositório GitHub.

    kubectl create deploy hello-world-deployment --image=icr.io/solution-tutorials/tutorial-scalable-webapp-kubernetes
    

    Saída de exemplo: deployment "hello-world-deployment" created.

  3. Torne o aplicativo acessível dentro do cluster criando um serviço:

    kubectl expose deployment/hello-world-deployment --type=ClusterIP --port=80 --name=hello-world-service --target-port=3000
    

    Isso retorna uma mensagem como service "hello-world-service" exposed. Para ver os serviços:

    kubectl get services
    
  4. Execute o aplicativo no cluster com duas réplicas:

    kubectl scale deployment hello-world-deployment --replicas=2
    
  5. É possível verificar o status da implementação com o comando a seguir:

    kubectl get pods
    

Obtenha o Subdomínio do Ingress designado ao cluster

Quando um cluster Kubernetes é criado, é atribuído a ele um subdomínio Ingress (por exemplo, my-us-cluster.us-south.containers.appdomain.cloud ) e um endereço IP público do Application Load Balancer.

  1. Recupere o subdomínio do Ingresso do cluster:
    ibmcloud ks cluster get --cluster $MYCLUSTER
    
    Procure o valor Ingress Subdomain.
  2. Anote essas informações para uma etapa posterior.

Este tutorial usa o Subdomínio do Ingresso para configurar o Global Load Balancer. Você também poderia substituir o Subdomínio do Ingresso pelo Application Load Balancer, ALB, público do cluster. Um <IngressSubdomain> tem a seguinte aparência my-us-cluster-e7f2ca73139645ddf61a8702003a483a-0000.us-south.containers.appdomain.cloud

Configure o Ingress para o seu subdomínio DNS

Será necessário ter seu próprio nome de domínio DNS e um subdomínio do balanceador de carga global será criado na seguinte tarefa: <glb_name>.<your_domain_name>. Algo como hello-world-service.example.com <glb_name> = hello-world-service e <your_domain_name> = example.com

  1. Crie o arquivo glb-ingress.yaml e substitua os itens temporários por seus respectivos valores:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
     name: <glb-name>
     annotations:
       spec.ingressClassName: "public-iks-k8s-nginx"
    spec:
     rules:
     - host: <glb-name>.<your_domain_name>
       http:
         paths:
         - path: /
           pathType: Prefix
           backend:
             service:
               name: hello-world-service
               port:
                 number: 80
    
  2. Inclua a instância de ingresso:
    kubectl apply -f glb-ingress.yaml
    
    Pode levar alguns minutos para que o ingresso se torne disponível, conforme indicado por um valor na coluna ADDRESS no comando:
    kubectl get ingress
    
  3. Agora teste configurando o cabeçalho http do Host curl com o seu nome de subdomínio de DNS para substituir o padrão de <IngressSubdomain>:
    curl --header 'Host: <glb_name>.<your_domain_name>' <IngressSubdomain>/hostname
    
    O comando curl seria semelhante a este: curl --header 'Host: hello-world-service.ibmom.com' my-us-cluster-e7f2ca73139645ddf61a8702003a483a-0000.us-south.containers.appdomain.cloud/hostname

E, em seguida, para outro local

Repita as etapas anteriores para o local de Londres com as seguintes substituições:

Configurar o balanceamento de carga multilocal

Seu aplicativo está agora em execução em dois clusters, mas está faltando um componente para que os usuários acessem os clusters de forma transparente por meio de um único ponto de entrada.

Nesta seção, você configurará o IBM Cloud Internet Services ( CIS ) para distribuir a carga entre os dois clusters. O CIS é um serviço completo que oferece Global Load Balancer (GLB), Caching, Web Application Firewall (WAF) e Page rule para proteger seus aplicativos e, ao mesmo tempo, garantir a confiabilidade e o desempenho dos seus aplicativos em nuvem.

Para configurar um balanceador de carga global, você precisará:

  • apontar um domínio customizado para servidores de nomes do CIS,
  • para recuperar o subdomínio do Ingress dos clusters Kubernetes,
  • configurar verificações de funcionamento para validar a disponibilidade de seu aplicativo e
  • definir conjuntos de origem apontando para os clusters.

Registre um domínio customizado com o IBM Cloud Internet Services

A primeira etapa é criar uma instância do CIS e apontar seu domínio customizado para servidores de nomes do CIS.

  1. Se você não possui um domínio, pode comprar um de um registrador.

  2. Navegue para IBM Cloud Internet Services no catálogo do IBM Cloud.

  3. Selecione um plano, configure o nome do serviço e o grupo de recursos e clique em Criar para criar uma instância de serviço

  4. Quando a instância de serviço for provisionada, clique em Incluir domínio.

  5. Insira seu nome de domínio e clique em Avançar.

  6. A configuração de seus registros DNS é uma etapa opcional e pode ser ignorada neste tutorial. Clique em Avançar.

  7. Quando os servidores de nomes forem designados, configure seu registrador ou provedor de nome de domínio para usar os servidores de nomes listados.

  8. Neste ponto você pode clicar em Cancelar para voltar à página principal, depois de ter configurado o seu escrivão ou o provedor de DNS, poderão ser necessárias até 24 horas para que as mudanças entrem em vigor.

    Quando o status do domínio na página Visão geral muda de Pendente para Ativo, é possível usar o comando dig <your_domain_name> ns para verificar se os novos servidores de nome entraram em vigor.

Configurar a verificação de funcionamento para o Global Load Balancer

As Verificações de funcionamento monitoram respostas para solicitações de HTTP/HTTPS dos conjuntos de origem em um intervalo de conjunto. Elas são usadas com conjuntos de origem para determinar se os conjuntos ainda estão em execução adequadamente.

  1. No painel IBM Cloud Internet Services, use o menu de navegação para selecionar Reliability (Confiabilidade ) > Global Load Balancers (Balanceadores de carga globais ).

  2. Selecione a guia verificações de funcionamento e clique em Criar.

    1. Configure Nome para hello-world-service
    2. Configure Tipo de monitor como HTTP.
    3. Configure Porta para 80.
    4. Configure Caminho para /.
    5. Em Configurar cabeçalhos de solicitação (opcional) inclua o nome do cabeçalho: Host e Valor: <glb_name>.<your_domain_name>
    6. Clique em Criar.

    Ao construir seus próprios aplicativos, é possível definir um terminal de funcionamento dedicado, como /heathz, no qual você relataria o estado do aplicativo.

Definir conjuntos de origem

Um conjunto é um grupo de servidores de origem para os quais o tráfego é roteado de forma inteligente quando conectado a um GLB. Com os clusters no Reino Unido e nos Estados Unidos, é possível definir os conjuntos baseados em localização e configurar o CIS para redirecionar usuários para os clusters mais próximos com base na localização geográfica das solicitações do usuário.

Um conjunto para o cluster em Dallas

  1. Selecione a guia Conjuntos de origem e clique em Criar.
  2. Defina o nome como US.
  3. Configure Nome da origem para us-cluster.
  4. Configure o Endereço de origem para o serviço kubernetes <IngressSubdomain> impresso por ibmcloud ks cluster get --cluster $MYCLUSTER para o cluster dos EUA
  5. Defina o Health check como aquele criado na seção anterior.
  6. Defina a região do Health Check como Western North America.
  7. Clique em Salvar.

Um conjunto para o cluster em Londres

  1. Selecione a guia Conjuntos de origem e clique em Criar.
  2. Defina o nome como UK.
  3. Configure Nome da origem para uk-cluster.
  4. Configure Endereço de origem para o serviço kubernetes <IngressSubdomain> impresso por ibmcloud ks cluster get --cluster $MYCLUSTER para o cluster do Reino Unido.
  5. Defina o Health check como aquele criado na seção anterior.
  6. Defina a região do Health Check como Western Europe.
  7. Clique em Salvar.

Criar o Global Load Balancer

Com os conjuntos de origem definidos, é possível concluir a configuração do balanceador de carga.

  1. Selecione a guia Balanceadores de carga e clique em Criar.

  2. Insira um nome, <glb_name>, em Nome para o Balanceador de carga global. Esse nome também fará parte de sua URL de aplicativo universal (http://<glb_name>.<your_domain_name>), independente do local.

  3. Em Geo routes (Rotas geográficas ), clique em Add route (Adicionar rota ).

    1. Selecione Default (Padrão ) no menu suspenso Region (Região ).
    2. Selecione a piscina US.
    3. Clique em Incluir.

    Repita o processo para criar o seguinte:

    Lista de rotas Geo a serem criadas
    Região Conjunto de Origem
    Padrão EUA
    Europa Ocidental UK
    Europa Oriental UK
    Nordeste Asiático UK
    Sudeste Asiático UK
    Oeste da América do Norte EUA
    Leste da América do Norte EUA

    Com essa configuração, os usuários na Europa e na Ásia serão redirecionados para o cluster em Londres, usuários nos EUA para o cluster de Dallas. Quando uma solicitação não corresponder a nenhuma das rotas definidas, ela será redirecionada para o(s) pool(s) na região Padrão.

  4. Clique em Criar.

Nesta etapa, você configurou com êxito um Global Load Balancer com clusters do Kubernetes em vários locais. É possível acessar a URL do GLB http://<glb_name>.<your_domain_name>/hostname para visualizar seu aplicativo. Com base em sua localização, você é redirecionado para o cluster mais próximo ou para um cluster do conjunto padrão, caso o CIS não tenha sido capaz de mapear o seu endereço IP para uma localização específica.

Proteger o aplicativo

Ativar o Web Application Firewall

O Web Application Firewall (WAF) protege seu aplicativo da web contra ataques da Camada 7 do ISO. Geralmente, ele é combinado com conjuntos de regras agrupadas, esses conjuntos de regras visam proteger contra vulnerabilidades no aplicativo filtrando o tráfego malicioso.

  1. No painel do IBM Cloud Internet Services, navegue para Segurança e, em seguida, para WAF.
  2. Assegure-se de que o WAF esteja Ativado.
  3. Clique em Conjunto de regras do OWASP. Nessa página, é possível revisar o Conjunto de regras principal do OWASP e ativar ou desativar as regras individualmente. Quando uma regra estiver ativada, se uma solicitação recebida acionar a regra, a pontuação de ameaça global será aumentada. A configuração Sensibilidade decidirá se uma Ação é acionada para a solicitação.
    1. Deixe os conjuntos de regras do OWASP padrão no estado em que se encontram.
    2. Configure Sensibilidade como Low.
    3. Configure Ação como Simulate para registrar todos os eventos.
  4. Clique em Conjunto de regras do CIS. Essa página mostra regras adicionais com base em pilhas de tecnologia comuns para hospedar websites.

Para obter uma conexão segura com HTTPS, você pode obter um certificado do Let's Encrypt ou por meio do IBM Cloud Secrets Manager.

Aumentar o desempenho e proteger contra ataques de Negação de Serviço

Um ataque de negação distribuída de serviço (DDoS) é uma tentativa maliciosa de interromper o tráfego normal de um servidor, serviço ou rede sobrecarregando o destino ou sua infraestrutura circundante com uma sobrecarga de tráfego de internet. O CIS está equipado para proteger o seu domínio de DDoS.

  1. No painel do CIS, selecione Confiabilidade > Global Load Balancer.

  2. Localize o GLB que você criou na tabela Load Balancers.

  3. Ative os recursos de Segurança e Desempenho na coluna Proxy:

    CIS Alternância de Proxy ON
    CIS Alternância de Proxy ON

Seu GLB está agora protegido. Um benefício imediato é que os endereços IP de origem de seus clusters serão ocultados dos clientes. Se o CIS detectar uma ameaça para uma solicitação futura, o usuário poderá ver uma tela como esta antes de ser redirecionado para seu aplicativo:

Verificando- DDoS proteção
Verificando- DDoS proteção

Além disso, agora é possível controlar qual conteúdo é armazenado em cache pelo CIS e por quanto tempo ele permanece armazenado em cache. Acesse Desempenho > Armazenamento em cache para definir o nível de armazenamento em cache global e a expiração do navegador. É possível customizar as regras de segurança global e de armazenamento em cache com Regras de página. As Regras de página permitem a configuração de baixa granularidade usando caminhos de domínio específicos. Como exemplo com Regras de página, você poderia decidir armazenar em cache todo o conteúdo em /assets por 3 dias:

Regras de Página
Regras de Página
..

Remover recursos

Remover recursos de cluster do Kubernetes

  1. Remova o Ingresso, você pode fazê-lo executando o seguinte comando:
    kubectl delete -f glb-ingress.yaml
    
  2. Remova o serviço, você pode fazê-lo executando o seguinte comando:
    kubectl delete service hello-world-service
    
  3. Remova a implementação, você pode fazê-lo executando o seguinte comando:
    kubectl delete deployment hello-world-deployment
    
  4. Exclua os clusters se eles tiverem sido criados especificamente para este tutorial.

Remova recursos do CIS

  1. Remova o GLB.
  2. Remova os conjuntos de origem.
  3. Remova as verificações de funcionamento.
  4. Atualize o DNS para o seu domínio personalizado.
  5. Exclua a instância CIS se você a criou especificamente para este tutorial.

Conteúdo relacionado