PuppetConf 2016. Kubernetes para administradores de sistema. Parte 3

PuppetConf 2016. Kubernetes para administradores de sistema. Parte 1 do
PuppetConf 2016. Kubernetes para administradores de sistema. Parte 2

Pegamos o aplicativo Lobsters e criamos uma nova imagem com novos requisitos. Primeiro, digite o comando de implantação $ kubectl apply –f deployments / lobsters.yaml e envie o aplicativo ao cluster, que deve executar a atualização de atualização sem interrupção para cada uma das instâncias de aplicativos disponíveis, de acordo com a política de atualização. Primeiro, o sistema garante que cada instância esteja operacional e depois as destrói no próximo conjunto de contêineres.



Vamos ver como funcionou. Para fazer isso, recarregamos o site e agora a falta de manchas brancas fará nosso profissional de marketing feliz.



Como administrador do sistema, você pode dizer: "Não há HTTPS aqui, esses sites são fáceis de invadir, é perigoso!" Como esse problema pode ser resolvido? Eu acho que em sua solução, o Kubernetes pode atuar como uma estrutura que permite ao administrador do sistema implementar uma abordagem criativa para o trabalho. Seria bom se eu pudesse declarar declarativamente: "Quero obter o certificado Let's Encrypt para este site, mas não quero reimplementar esse contêiner". Quero fazer isso dentro dos meus recursos, sem recorrer à equipe de desenvolvimento de aplicativos para obter ajuda. O Kubernetes permite isso, pois suporta extensões personalizadas.

Falei sobre kubectl, pods, implantações, serviços, mas também temos tipos personalizados - tipos de recursos personalizados que podem ser obtidos no Puppet. No Puppet, podemos definir novos tipos, para que possamos usar esse sistema para o nosso trabalho.
Vamos ver como fica no Kubernetes. Primeiro de tudo, precisamos de uma extensão para certificados, é assim que parece. Aqui temos nosso próprio espaço para nome hightower.com, no qual o objeto certificado está localizado.



Criamos uma nova extensão no Kubernetes usando o comando $ kubectl create –f extensions / certificate.yaml, e o armazenamento é criado automaticamente no backend e esse estado é gerenciado.



A aparência desse novo objeto exige que eu use uma nova ferramenta que rastreia as alterações e executa ações no objeto de certificado. Ou seja, essa ferramenta em segundo plano deve interagir com o Let's Encrypt e obter um certificado válido. Para isso, uso segredo - mostrarei rapidamente como isso é feito.

Portanto, precisamos de um novo sub e mostrarei qual é a diferença em relação ao código anterior. Estou adicionando nginx a um contêiner existente, portanto, não precisamos entrar em contato com a equipe de desenvolvimento. Continuamos a usar HTTPS simplesmente colocando o contêiner na parte superior da lareira existente.



Este contêiner aceita tráfego HTTPS e precisa de um arquivo de configuração para interagir com o back-end. Também preciso de alguns certificados que o nginx faça o download do sistema de arquivos, para que as variáveis ​​de ambiente não funcionem aqui. Eu não escrevi nginx, então não consigo fazê-lo fazer isso.



Então, basta adicionar este contêiner dentro da lareira e passar para dois segredos.



O primeiro e mais importante segredo é o certificado TLS, que deve vir de Let's Encrypt. Não vou relatar o Let's Encrypt para o meu aplicativo, estou relatando para o meu sistema. Eu quero controlar essa abstração. Então agora eu tenho que criar um arquivo de configuração para o nginx. Este é o principal arquivo de configuração que se parece com isso.

A porta 443 é especificada aqui e o SSL está ativado, que procura esses 2 arquivos no sistema de arquivos, captura o tráfego e o envia ao host local 127.0.0.1 {000.



É exatamente isso que meu aplicativo escuta. Agora vou criar o configmap - o mapa de configuração do nginx usando o seguinte comando.



Agora, usando o comando $ kubectl get configmaps, coloco o configmap “nginx” no sistema com o mesmo nome que o disco.



Em seguida, você precisa criar um segredo, lembro novamente - quero que tudo seja automatizado e não quero interferir no processo de obtenção de certificados. Para fazer isso, estou implantando uma ferramenta chamada "kube-cert-manager", e aqui está o resultado.



Estamos tentando obter um certificado Let's Encrypt válido, no qual meu navegador confiará, e inseri-lo no back-end como segredo. Portanto, para o meu coração, não haverá diferença no fato de termos completado seu conteúdo. Se você se lembra, tudo isso é feito criando um tipo personalizado no Puppet.

Talvez seja uma má idéia, mas agora tentarei iniciar o controlador, que funcionará em segundo plano. Não compilamos, não criamos provedores, esse daemon apenas funciona em segundo plano e observa as alterações. Assim que o objeto de certificado aparece, ele recebe com Let's Encrypt e o insere no sistema em tempo real, sem demora. Então, eu uso o seguinte comando.



Essa coisa também tem armazenamento, para que possamos salvar tudo o que precisamos. Leva alguns segundos para o gerente de certificação kube-cert-manager começar a trabalhar.



A próxima coisa que precisamos fazer é criar um objeto de certificado. É isso que eu me defino, esse é o meu próprio esquema. Estou criando uma coisa nova que o Kubernetes não encontrou até esse momento, que diz que posso obter um certificado para o domínio lobsters.com.



Há um endereço de e-mail e outras informações necessárias para que o Let's Encrypt me dê um certificado válido. Vamos criptografar me enviará um token de troca para verificar se eu realmente sou o proprietário desse domínio e precisarei aplicá-lo ao meu DNS no Google Cloud. Se a verificação for aprovada, eles me fornecerão um certificado real, que eu inserirei no meu sistema de arquivos. Vamos ver como isso funciona, digitando o comando $ kubectl get pods.



Como você pode ver, o gerenciador de certificados ainda está funcionando. Vamos ver as informações detalhadas sobre esse processo usando o comando $ kubectl description pods kube-cert-manager, inserindo o nome do contêiner na primeira linha de código.



Você vê que o trabalho está sendo feito dentro do cronograma. No momento, o servidor está criando um volume que, após verificação e formatação, será montado nesse servidor. Enquanto esse processo estiver em andamento, podemos ir além e terminar nosso trabalho.

Entro no comando kubectl create –f certificates / lobsters.yaml e obtenho o seguinte resultado.



Em seguida, uso um comando que permite exibir os logs de vários contêineres. Vou destacar o que se refere ao meu objeto.



Agora, um registro DNS está sendo criado dentro do meu servidor DNS baseado em nuvem. Se eu atualizar a página mostrada aqui, verei um novo token de troca com a extensão .txt.



Portanto, recebi o token do Let's Encrypt e agora verifico se esse registro DNS foi distribuído a todos os servidores autorizados antes de solicitar ao Let's Encrypt para verificar essa entrada de texto no meu domínio.



Se isso funcionar, eles me enviarão um certificado válido de volta. A demonstração do DNS em tempo real é uma má ideia. Sim, finalmente obtemos o certificado. Vamos criptografar percebeu que o certificado desapareceu do Kubernetes e o inseriu lá. Isso é ótimo, porque agora eu já tenho uma interface de solicitação de certificado para tudo o que é executado no Kubernetes.

Para garantir que tudo esteja funcionando corretamente, insiro o comando $ kubectl get secrets e vemos um segredo para lobsters.hightowerlabs.com.



Agora eu uso o comando $ kubectl delete secrets lobsters.hightowerlabs.com, porque é um sistema declarativo, não excluímos o objeto de certificado, mas nos livramos do segredo associado a ele localizado dentro do Kubernetes. Como resultado, devemos garantir que, quando esse elemento for excluído, o sistema retornará o próprio certificado Let's Encrypt. Isso é muito parecido com o que fazemos no Puppet, só que aqui acontece online.

Depois de garantir que tudo funcione, estamos reimplantando nosso aplicativo nginx chamado "lobsters-secure", que garantirá a segurança do novo domínio. Sua imagem é semelhante à versão anterior, mas a diferença é que colocamos nginx aqui. O Nginx pega o link dos segredos e, em seguida, o Kubernetes o insere no sistema de arquivos, como resultado do qual recebo um certificado válido para um domínio específico.

Para fazer isso, insiro o comando $ kubectl apply –f deployments / lobsters-secure.yaml usando o mesmo nome para que este comando substitua o estado existente. Em seguida, o comando $ kubectl get pods é usado, o que mostra que a atualização sem interrupção está acontecendo aqui agora, conforme nossas definições foram alteradas.

Após a conclusão da atualização, fica claro que a nova definição é usada para este aplicativo. Quero garantir que o certificado seja válido para o nosso nome DNS, para o qual insiro o comando $ kubectl get svc e copio o endereço IP do site das lagostas.



Ao acessar a guia Google Cloud, você pode ver que esse endereço corresponde ao endereço correspondente ao nome de domínio lobsters.hightowerlabs.com. Agora, se você digitar lobsters.hightowerlabs.com na barra de endereços do seu navegador , poderá ver que temos um certificado válido.



Obrigado, é tudo o que eu queria dizer no relatório Kubernetes para administradores do sistema.


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 baseado em nuvem para desenvolvedores a partir de US $ 4,99 , um analógico exclusivo de servidores básicos que foi inventado por nós para você: Toda a verdade sobre o VPS (KVM) E5-2697 v3 (6 núcleos) 10GB DDR4 480GB SSD 1Gbps de 10GB 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 US $ 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