Melhores práticas do Kubernetes. Mapeando Serviços Externos

Melhores práticas do Kubernetes. Criando
práticas recomendadas para Kubernetes de contêineres pequenos. Organização Kubernetes com o namespace Kubernetes
Best Practices. Teste de viabilidade Kubernetes com testes de prontidão e vida
Práticas recomendadas de Kubernetes . Definindo consultas e limites de
recursos Melhores práticas do Kubernetes. Desconexão correta de Terminar

Se você é como a maioria das pessoas, provavelmente usa recursos que operam fora do seu cluster. Você pode estar usando a API do Taleo para enviar mensagens de texto ou analisar imagens usando a API do Google Cloud Vision.

Se você usar o mesmo terminal - o ponto de recebimento de solicitações do servidor em todos os seus ambientes e não planeja transferir seus servidores para o Kubernetes, é perfeitamente normal ter um serviço de terminal diretamente no seu código. No entanto, existem muitos outros cenários. Nesta série de práticas recomendadas do Kubernetes, você aprenderá como usar os mecanismos internos do Kubernetes para descobrir serviços dentro e fora do cluster.

Um exemplo de serviço externo generalizado é um banco de dados executado fora de um cluster Kubernetes. Ao contrário dos bancos de dados em nuvem, como o Google Cloud Data Store ou o Google Cloud Spanner, que usam um ponto de extremidade para todos os tipos de acesso, a maioria dos bancos de dados possui pontos de extremidade separados para diferentes circunstâncias.
As práticas recomendadas para o uso de bancos de dados tradicionais, como MySQL e MongoDB, geralmente exigem que você se conecte a diferentes componentes para diferentes ambientes. Você pode ter uma máquina grande para dados de produção e uma máquina menor para um ambiente de teste. Cada um deles terá seu próprio endereço IP ou nome de domínio, mas você provavelmente não desejará alterar seu código ao passar de um ambiente para outro. Portanto, em vez de codificar esses endereços, você pode usar o serviço interno do Kubernetes para descobrir serviços externos baseados em DNS da mesma maneira que para os serviços nativos do Kubernetes.



Suponha que você execute o banco de dados MongoDB no Google Compute Engine. Você ficará preso nesse mundo híbrido até conseguir transferi-lo para um cluster.

Felizmente, você pode usar os serviços estáticos do Kubernetes para facilitar sua vida. Neste exemplo, criei um servidor MongoDB usando o Google Cloud Launcher. Como foi criado na mesma rede (ou cluster Kubernetes VPC), é acessado usando um endereço IP interno de alto desempenho.



Esta é a configuração padrão no Google Cloud, portanto você não precisa configurar nada. Agora que você tem um endereço IP, o primeiro passo é criar um serviço. Você pode perceber que não há seletores de lareira para este serviço. Ou seja, criamos um serviço que não saberá para onde enviar tráfego. Isso permitirá que você crie manualmente um objeto de terminal, que receberá tráfego desse serviço.



O exemplo de código a seguir mostra que os terminais determinam o endereço IP do banco de dados usando o mesmo nome de mongo que o serviço.



O Kubernetes usará todos os endereços IP para encontrar os pontos de extremidade como se fossem pods regulares do Kubernetes; portanto, agora você pode acessar o banco de dados usando uma cadeia de conexão simples com o nome acima mongodb: // mongo. No entanto, não há necessidade de usar endereços IP no seu código.

Se os endereços IP mudarem no futuro, você pode simplesmente atualizar os pontos de extremidade com o novo endereço IP e seus aplicativos não precisarão ser alterados de nenhuma maneira adicional.

Se você estiver usando um banco de dados hospedado em um host de terceiros, provavelmente os proprietários do host forneceram um URI de identificador de recurso unificado para conexão. Portanto, se você recebeu um endereço IP, pode simplesmente usar o método anterior. Este exemplo mostra que eu tenho dois bancos de dados MongoDB hospedados no host mLab.



Um deles é um banco de dados de desenvolvedores e o outro é um banco de dados de produção. As cadeias de conexão para esses bancos de dados são as seguintes - o mLab fornece um URI dinâmico e uma porta dinâmica. Como você pode ver, eles são diferentes.



Para ignorar isso, usamos o Kubernetes e nos conectamos ao banco de dados dos desenvolvedores. Você pode criar um nome de serviço Kubernetes externo, que fornecerá um serviço estático que redirecionará o tráfego para o serviço externo.



Este serviço executará um redirecionamento CNAME simples no nível do kernel, que terá um impacto mínimo no desempenho. Graças a isso, você pode usar uma cadeia de conexão mais simples.



Mas como o nome externo usa o redirecionamento CNAME, ele não pode executar o encaminhamento de porta. Portanto, esta solução é aplicável apenas a portas estáticas e não pode ser usada com portas dinâmicas. Mas o nível gratuito do mLab gratuito, por padrão, fornece ao usuário um número de porta dinâmico e você não pode alterar isso. Isso significa que para dev e prod você precisa de diferentes linhas de comando de conexão. A má notícia é que você precisará codificar o número da porta. Então, como você faz o encaminhamento de porta funcionar?

O primeiro passo é obter o endereço IP do URI. Se você executar o comando nslookup, hostname ou efetuar ping no URI, poderá obter o endereço IP do banco de dados. Se, ao mesmo tempo, o serviço retornar vários endereços IP para você, todos esses endereços poderão ser usados ​​nos pontos de extremidade do objeto.



Lembre-se de que os IPs de URI podem mudar sem aviso prévio, por isso é bastante arriscado usá-los no prod. Usando esse endereço IP, você pode conectar-se a um banco de dados remoto sem especificar uma porta. Assim, o serviço Kubernetes executa o encaminhamento de porta de forma bastante transparente.



O mapeamento, ou mapeamento de recursos externos para internos, oferece a capacidade de usar esses serviços com flexibilidade no cluster no futuro, minimizando os esforços de refatoração. Também facilita o gerenciamento e fornece informações sobre os serviços externos que sua empresa usa.

Para continuar em breve ...


Um pouco de publicidade :)


Obrigado por ficar com a gente. Você gosta dos nossos artigos? Deseja ver materiais mais interessantes? Ajude-nos fazendo um pedido ou recomendando aos seus amigos o VPS na nuvem para desenvolvedores a partir de US $ 4,99 , um analógico exclusivo de servidores de nível básico que foi inventado por nós para você: Toda a verdade sobre o VPS (KVM) E5-2697 v3 (6 núcleos) 10 GB DDR4 480 GB SSD 1 Gbps de US $ 19 ou como dividir o servidor? (as opções estão disponíveis com RAID1 e RAID10, até 24 núcleos e até 40GB DDR4).

Dell R730xd 2 vezes mais barato no data center Equinix Tier IV em Amsterdã? Somente nós temos 2 TVs Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV a partir de US $ 199 na Holanda!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - a partir de $ 99! Leia sobre Como criar um prédio de infraestrutura. classe c usando servidores Dell R730xd E5-2650 v4 que custam 9.000 euros por um centavo?

All Articles