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.
- O desenvolvedor cria uma imagem Docker para o aplicativo.
- A imagem é enviada para Container Registry.
- O aplicativo é implementado em clusters Kubernetes em Dallas e Londres.
- Os usuários finais acessam o aplicativo.
- 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),
- Plug-in do IBM Cloud Kubernetes Service (
kubectlpara 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:
- possuir um domínio customizado para que seja possível configurar o DNS para esse domínio para apontar para os servidores de nomes do IBM Cloud Internet Services.
- e entender os conceitos básicos de Kubernetes
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:
-
Configure Nome do cluster para my-us-cluster.
-
Localize em América do Norte e Dallas
-
Abra os clusters Kubernetes e clique em Create cluster (Criar cluster ).
-
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.
- Clique em Criar VPC..
- Na seção Local, selecione Geografia e Região, por exemplo
North AmericaeDallas. - Digite um nome para sua VPC, selecione um grupo de recursos e, opcionalmente, adicione tags para organizar seus recursos.
- Desmarque Permitir SSH e Permitir ping no Grupo de segurança padrão.
- Desmarque a opção Criar sub-rede em cada zona.
- Clique em Criar.
- Em Zonas do trabalhador e sub-redes e desmarque as duas zonas para as qual a sub-rede não foi criada.
- Defina Nós de trabalho por zona como
1e clique em Alterar tipo para explorar e mudar para o tipo de nó de trabalho de sua escolha. - Em Ingresso, ative Gerenciamento de segredos do Ingress e selecione sua instância existente do Secrets Manager.
- Insira um Nome do cluster e selecione o mesmo Grupo de recursos usado para o VPC.
- 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 você espera que o cluster se torne ativo, conecte um gateway público à VPC Navegue para Nuvens privadas virtuais.
- Clique no nome para o VPC usado pelo cluster e role para baixo até a seção de sub-redes
- 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.
- Na seção Local, selecione uma Geografia, multizona Disponibilidade e Metro por exemplo
North AmericaeDallas. - Em Zonas e VLANs do trabalhador, desmarque todas as zonas, exceto uma delas
- Defina Nós de trabalho por zona como
1e clique em Alterar tipo para explorar e mudar para o tipo de nó de trabalho de sua escolha. - Em Terminal em Serviço Principal e selecione Terminais privados e públicos.
- Em Ingresso, ative Gerenciamento de segredos do Ingress e selecione sua instância existente do Secrets Manager.
- Insira um Nome do cluster e selecione o Grupo de recursos no qual criar esses recursos.
- A criação de log ou o monitoramento não são necessários neste tutorial, desative essas opções e clique em Criar.
- Na seção Local, selecione uma Geografia, multizona Disponibilidade e Metro por exemplo
-
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.
-
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 -
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-kubernetesSaída de exemplo:
deployment "hello-world-deployment" created. -
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=3000Isso retorna uma mensagem como
service "hello-world-service" exposed. Para ver os serviços:kubectl get services -
Execute o aplicativo no cluster com duas réplicas:
kubectl scale deployment hello-world-deployment --replicas=2 -
É 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.
- Recupere o subdomínio do Ingresso do cluster:
Procure o valoribmcloud ks cluster get --cluster $MYCLUSTERIngress Subdomain. - 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
- 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 - Inclua a instância de ingresso:
Pode levar alguns minutos para que o ingresso se torne disponível, conforme indicado por um valor na coluna ADDRESS no comando:kubectl apply -f glb-ingress.yamlkubectl get ingress - 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>:O comando curl seria semelhante a este:curl --header 'Host: <glb_name>.<your_domain_name>' <IngressSubdomain>/hostnamecurl --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:
- Em Criar um cluster Kubernetes, substitua:
- o nome do cluster my-us-cluster por my-uk-cluster;
- a localização a partir de América do Norte e Dallas com Europa e London.
- Em Implementar o aplicativo no cluster Kubernetes:
- Substitua o MYCLUSTER= my-us-cluster por my-uk-cluster
- Configure o Ingress para o subdomínio DNS
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.
-
Se você não possui um domínio, pode comprar um de um registrador.
-
Navegue para IBM Cloud Internet Services no catálogo do IBM Cloud.
-
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
-
Quando a instância de serviço for provisionada, clique em Incluir domínio.
-
Insira seu nome de domínio e clique em Avançar.
-
A configuração de seus registros DNS é uma etapa opcional e pode ser ignorada neste tutorial. Clique em Avançar.
-
Quando os servidores de nomes forem designados, configure seu registrador ou provedor de nome de domínio para usar os servidores de nomes listados.
-
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> nspara 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.
-
No painel IBM Cloud Internet Services, use o menu de navegação para selecionar Reliability (Confiabilidade ) > Global Load Balancers (Balanceadores de carga globais ).
-
Selecione a guia verificações de funcionamento e clique em Criar.
- Configure Nome para hello-world-service
- Configure Tipo de monitor como HTTP.
- Configure Porta para 80.
- Configure Caminho para /.
- Em Configurar cabeçalhos de solicitação (opcional) inclua o nome do cabeçalho:
Hoste Valor:<glb_name>.<your_domain_name> - 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
- Selecione a guia Conjuntos de origem e clique em Criar.
- Defina o nome como
US. - Configure Nome da origem para
us-cluster. - Configure o Endereço de origem para o serviço kubernetes
<IngressSubdomain>impresso poribmcloud ks cluster get --cluster $MYCLUSTERpara o cluster dos EUA - Defina o Health check como aquele criado na seção anterior.
- Defina a região do Health Check como
Western North America. - Clique em Salvar.
Um conjunto para o cluster em Londres
- Selecione a guia Conjuntos de origem e clique em Criar.
- Defina o nome como
UK. - Configure Nome da origem para
uk-cluster. - Configure Endereço de origem para o serviço kubernetes
<IngressSubdomain>impresso poribmcloud ks cluster get --cluster $MYCLUSTERpara o cluster do Reino Unido. - Defina o Health check como aquele criado na seção anterior.
- Defina a região do Health Check como
Western Europe. - Clique em Salvar.
Criar o Global Load Balancer
Com os conjuntos de origem definidos, é possível concluir a configuração do balanceador de carga.
-
Selecione a guia Balanceadores de carga e clique em Criar.
-
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. -
Em Geo routes (Rotas geográficas ), clique em Add route (Adicionar rota ).
- Selecione Default (Padrão ) no menu suspenso Region (Região ).
- Selecione a piscina US.
- 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.
-
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.
- No painel do IBM Cloud Internet Services, navegue para Segurança e, em seguida, para WAF.
- Assegure-se de que o WAF esteja Ativado.
- 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.
- Deixe os conjuntos de regras do OWASP padrão no estado em que se encontram.
- Configure Sensibilidade como
Low. - Configure Ação como
Simulatepara registrar todos os eventos.
- 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.
-
No painel do CIS, selecione Confiabilidade > Global Load Balancer.
-
Localize o GLB que você criou na tabela Load Balancers.
-
Ative os recursos de Segurança e Desempenho na coluna Proxy:
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:
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:
Remover recursos
Remover recursos de cluster do Kubernetes
- Remova o Ingresso, você pode fazê-lo executando o seguinte comando:
kubectl delete -f glb-ingress.yaml - Remova o serviço, você pode fazê-lo executando o seguinte comando:
kubectl delete service hello-world-service - Remova a implementação, você pode fazê-lo executando o seguinte comando:
kubectl delete deployment hello-world-deployment - Exclua os clusters se eles tiverem sido criados especificamente para este tutorial.
Remova recursos do CIS
- Remova o GLB.
- Remova os conjuntos de origem.
- Remova as verificações de funcionamento.
- Atualize o DNS para o seu domínio personalizado.
- Exclua a instância CIS se você a criou especificamente para este tutorial.